/** * @test */ public function it_should_find_classes_in_dir() { $finder = new ClassFinder(); $classes = $finder->find(__DIR__ . '/fixtures/classes'); sort($classes); // ignore order $this->assertEquals(['PhpXComponents\\Test\\fixtures\\classes\\Inner\\AnotherInnerTestClass', 'PhpXComponents\\Test\\fixtures\\classes\\Inner\\InnerTestClass', 'PhpXComponents\\Test\\fixtures\\classes\\TestClass'], $classes); }
/** * Perform filesystem scan on a given directory and find all component classes * * @expensive Expensive filesystem scan operation * @param string $dir * @return array * @throws ConfigurationException If two components with the same name are found */ protected function findComponents($dir) { $loader = new ClassFinder(); $classes = $loader->find($dir); $components = []; foreach ($classes as $class) { $basename = basename(str_replace('\\', '/', $class), 'Component'); if (isset($components[$basename])) { throw new ConfigurationException(sprintf('Duplicate component name "<%s>" found in "%s" and "%s"', $basename, $components[$basename], $class)); } $components[$basename] = $class; } return $components; }