public function testNextFailsIfFileNotFound() { $iterator = new RecursivePathsIterator(new ArrayIterator(array($this->tempDir . '/css', $this->tempDir . '/foo')), '/app'); $iterator->rewind(); $this->assertSame($this->tempDir . '/css', $iterator->key()); $this->assertSame('/app', $iterator->current()); try { $iterator->next(); $this->fail('Expected a RuntimeException'); } catch (RuntimeException $e) { } $this->assertFalse($iterator->valid()); $this->assertNull($iterator->current()); $this->assertNull($iterator->key()); }
/** * Loads the mapping. * * @param Package $containingPackage The package that contains the * mapping. * @param PackageCollection $packages A list of packages that can * be referenced using * `@vendor/package:` prefixes * in the path references. * * @throws AlreadyLoadedException If the mapping is already loaded. */ public function load(Package $containingPackage, PackageCollection $packages) { if (null !== $this->state) { throw new AlreadyLoadedException('The mapping is already loaded.'); } $filesystemPaths = array(); $loadErrors = array(); foreach ($this->pathReferences as $relativePath) { $loadError = null; try { $absolutePath = $this->makeAbsolute($relativePath, $containingPackage, $packages); $this->assertFileExists($absolutePath, $relativePath, $containingPackage); $filesystemPaths[] = $absolutePath; } catch (NoSuchPackageException $loadError) { } catch (FileNotFoundException $loadError) { } if ($loadError) { $loadErrors[] = $loadError; } } $iterator = new RecursivePathsIterator(new ArrayIterator($filesystemPaths), $this->repositoryPath); foreach ($iterator as $filesystemPath => $repositoryPath) { $directoryEntries = array(); // If the filesystem path is a directory, list all entries of the // directory recursively if ($iterator->hasChildren()) { $directoryEntries = iterator_to_array(new RecursiveIteratorIterator($iterator->getChildren(), RecursiveIteratorIterator::SELF_FIRST)); ksort($directoryEntries); } $this->pathMappings = array_merge($this->pathMappings, array($filesystemPath => $repositoryPath), $directoryEntries); } $this->repositoryPaths = array_unique($this->pathMappings); $this->filesystemPaths = $filesystemPaths; $this->loadErrors = $loadErrors; $this->containingPackage = $containingPackage; sort($this->repositoryPaths); $this->refreshState(); }