/**
  * @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;
 }