/**
  * Test hook_registry_files_alter() wildcard replacement.
  */
 public function testWildcardClassmap()
 {
     $this->filesystem->addClass('test://lib/xy/z.php', 'Foo\\Bar');
     $this->assertFalse(class_exists('Foo\\Bar', FALSE), 'Class Foo\\Bar must not exist yet.');
     xautoload()->adapter->addClassmapSources(array('test://lib/**/*.php'));
     $this->assertTrue(class_exists('Foo\\Bar'), 'Class Foo\\Bar must exist.');
 }
 /**
  * Tests a simulated regular request.
  */
 function testNormalRequest()
 {
     // Create virtual class files.
     $this->filesystem->addClass('test://modules/testmod_psr0/lib/Drupal/testmod_psr0/Foo.php', 'Drupal\\testmod_psr0\\Foo');
     $this->filesystem->addClass('test://modules/testmod_psr4/lib/Foo.php', 'Drupal\\testmod_psr4\\Foo');
     $this->filesystem->addClass('test://modules/testmod_pearflat/lib/Foo.php', 'testmod_pearflat_Foo');
     $this->assertTrue(file_exists('test://modules/testmod_psr0/lib/Drupal/testmod_psr0/Foo.php'), 'Stream wrapper file exists.');
     $services = xautoload()->getServiceContainer();
     // Mock out DrupalSystem in the service container.
     $extensions = $this->getExampleExtensions();
     $system = new MockDrupalSystem(array(), $extensions);
     $services->set('system', $system);
     // Simulate _xautoload_register_drupal().
     // No cache is active.
     // Initialize the finder, to fire scheduled operations.
     $services->proxyFinder->getFinder();
     // Register prefixes and namespaces for enabled extensions.
     $operation = new FinderOperation\BootPhase($extensions);
     $services->proxyFinder->onFinderInit($operation);
     // Simulate inclusion of other module files.
     // The testmod_psr4.module must contain an equivalent to the following line,
     // to tell xautoload that PSR-4 is in action:
     $services->main->registerModulePsr4('test://modules/testmod_psr4/testmod_psr4.module', 'lib');
     // Boot modules use their classes.
     $this->assertLoadClass('Drupal\\testmod_psr0\\Foo');
     $this->assertLoadClass('Drupal\\testmod_psr4\\Foo');
     $this->assertLoadClass('testmod_pearflat_Foo');
 }
 /**
  * Assert that inclusions are done in the expected order.
  *
  * @param \Drupal\xautoload\ClassLoader\ClassLoaderInterface $loader
  * @param string $class
  * @param string[] $expectedCandidates
  */
 protected function assertFileInclusions($loader, $class, array $expectedCandidates)
 {
     // Register the class file in the virtual filesystem.
     $this->filesystem->addClass(end($expectedCandidates), $class);
     $this->filesystem->resetReportedOperations();
     // Check that the class is not already defined.
     $this->assertFalse(class_exists($class, FALSE), "Class '{$class}' is not defined before loadClass().");
     // Trigger the class loader.
     $loader->loadClass($class);
     $expectedOperations = array();
     foreach ($expectedCandidates as $file) {
         $expectedOperations[] = $file . ' - stat';
     }
     $expectedOperations[] = end($expectedCandidates) . ' - include';
     $this->assertSame($expectedOperations, $this->filesystem->getReportedOperations());
     // Check that the class is defined after the class loader has done its job.
     $this->assertTrue(class_exists($class, FALSE), "Class is defined after loadClass().");
 }