1
0
Fork 0

[ClassMapGenerator] Improve error message when the path does not exist

i.e. the composer.json has a typo
pull/1315/head
Victor Berchet 2012-11-11 18:31:17 +01:00
parent ff5c428d60
commit ab48114531
2 changed files with 29 additions and 13 deletions

View File

@ -40,42 +40,49 @@ class ClassMapGenerator
/** /**
* Iterate over all files in the given directory searching for classes * Iterate over all files in the given directory searching for classes
* *
* @param Iterator|string $dir The directory to search in or an iterator * @param Iterator|string $path The path to search in or an iterator
* @param string $whitelist Regex that matches against the file path * @param string $whitelist Regex that matches against the file path
* *
* @return array A class map array * @return array A class map array
*
* @throws \RuntimeException When the path is neither an existing file nor directory
*/ */
public static function createMap($dir, $whitelist = null) public static function createMap($path, $whitelist = null)
{ {
if (is_string($dir)) { if (is_string($path)) {
if (is_file($dir)) { if (is_file($path)) {
$dir = array(new \SplFileInfo($dir)); $path = array(new \SplFileInfo($path));
} else if (is_dir($path)) {
$path = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path));
} else { } else {
$dir = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($dir)); throw new \RuntimeException(
'Could not scan for classes inside "'.$path.
'" which does not appear to be a file nor a folder'
);
} }
} }
$map = array(); $map = array();
foreach ($dir as $file) { foreach ($path as $file) {
if (!$file->isFile()) { if (!$file->isFile()) {
continue; continue;
} }
$path = $file->getRealPath(); $filePath = $file->getRealPath();
if (pathinfo($path, PATHINFO_EXTENSION) !== 'php') { if (pathinfo($filePath, PATHINFO_EXTENSION) !== 'php') {
continue; continue;
} }
if ($whitelist && !preg_match($whitelist, strtr($path, '\\', '/'))) { if ($whitelist && !preg_match($whitelist, strtr($filePath, '\\', '/'))) {
continue; continue;
} }
$classes = self::findClasses($path); $classes = self::findClasses($filePath);
foreach ($classes as $class) { foreach ($classes as $class) {
$map[$class] = $path; $map[$class] = $filePath;
} }
} }

View File

@ -88,7 +88,7 @@ class ClassMapGeneratorTest extends \PHPUnit_Framework_TestCase
* @expectedException \RuntimeException * @expectedException \RuntimeException
* @expectedExceptionMessage Could not scan for classes inside * @expectedExceptionMessage Could not scan for classes inside
*/ */
public function testThrowsWhenFileDoesNotExist() public function testFindClassesThrowsWhenFileDoesNotExist()
{ {
$r = new \ReflectionClass('Composer\\Autoload\\ClassMapGenerator'); $r = new \ReflectionClass('Composer\\Autoload\\ClassMapGenerator');
$find = $r->getMethod('findClasses'); $find = $r->getMethod('findClasses');
@ -97,6 +97,15 @@ class ClassMapGeneratorTest extends \PHPUnit_Framework_TestCase
$find->invoke(null, __DIR__.'/no-file'); $find->invoke(null, __DIR__.'/no-file');
} }
/**
* @expectedException \RuntimeException
* @expectedExceptionMessage Could not scan for classes inside
*/
public function testCreateMapThrowsWhenDirectoryDoesNotExist()
{
ClassMapGenerator::createMap(__DIR__.'/no-file.no-foler');
}
protected function assertEqualsNormalized($expected, $actual, $message = null) protected function assertEqualsNormalized($expected, $actual, $message = null)
{ {
foreach ($expected as $ns => $path) { foreach ($expected as $ns => $path) {