示例#1
0
 /**
  * Tests resolving the inbound path to the system path.
  */
 function testProcessInbound()
 {
     // Create an alias manager stub.
     $alias_manager = $this->getMockBuilder('Drupal\\Core\\Path\\AliasManager')->disableOriginalConstructor()->getMock();
     $system_path_map = array(array('/foo', NULL, '/user/1'), array('/fr/foo', NULL, '/fr/foo'), array('/fr', NULL, '/fr'), array('/user/login', NULL, '/user/login'));
     $alias_manager->expects($this->any())->method('getPathByAlias')->will($this->returnValueMap($system_path_map));
     // Create a stub config factory with all config settings that will be checked
     // during this test.
     $config_factory_stub = $this->getConfigFactoryStub(array('system.site' => array('page.front' => '/user/login'), 'language.negotiation' => array('url' => array('prefixes' => array('fr' => 'fr')))));
     // Create a language negotiator stub.
     $negotiator = $this->getMockBuilder('Drupal\\language\\LanguageNegotiatorInterface')->getMock();
     $negotiator->expects($this->any())->method('getNegotiationMethods')->will($this->returnValue(array(LanguageNegotiationUrl::METHOD_ID => array('class' => 'Drupal\\language\\Plugin\\LanguageNegotiation\\LanguageNegotiationUrl'))));
     $method = new LanguageNegotiationUrl();
     $method->setConfig($config_factory_stub);
     $method->setLanguageManager($this->languageManager);
     $negotiator->expects($this->any())->method('getNegotiationMethodInstance')->will($this->returnValue($method));
     // Create a user stub.
     $current_user = $this->getMockBuilder('Drupal\\Core\\Session\\AccountInterface')->getMock();
     // Create the processors.
     $alias_processor = new PathProcessorAlias($alias_manager);
     $decode_processor = new PathProcessorDecode();
     $front_processor = new PathProcessorFront($config_factory_stub);
     $language_processor = new PathProcessorLanguage($config_factory_stub, $this->languageManager, $negotiator, $current_user);
     // First, test the processor manager with the processors in the incorrect
     // order. The alias processor will run before the language processor, meaning
     // aliases will not be found.
     $priorities = array(1000 => $alias_processor, 500 => $decode_processor, 300 => $front_processor, 200 => $language_processor);
     // Create the processor manager and add the processors.
     $processor_manager = new PathProcessorManager();
     foreach ($priorities as $priority => $processor) {
         $processor_manager->addInbound($processor, $priority);
     }
     // Test resolving the French homepage using the incorrect processor order.
     $test_path = '/fr';
     $request = Request::create($test_path);
     $processed = $processor_manager->processInbound($test_path, $request);
     $this->assertEquals('/', $processed, 'Processing in the incorrect order fails to resolve the system path from the empty path');
     // Test resolving an existing alias using the incorrect processor order.
     $test_path = '/fr/foo';
     $request = Request::create($test_path);
     $processed = $processor_manager->processInbound($test_path, $request);
     $this->assertEquals('/foo', $processed, 'Processing in the incorrect order fails to resolve the system path from an alias');
     // Now create a new processor manager and add the processors, this time in
     // the correct order.
     $processor_manager = new PathProcessorManager();
     $priorities = array(1000 => $decode_processor, 500 => $language_processor, 300 => $front_processor, 200 => $alias_processor);
     foreach ($priorities as $priority => $processor) {
         $processor_manager->addInbound($processor, $priority);
     }
     // Test resolving the French homepage using the correct processor order.
     $test_path = '/fr';
     $request = Request::create($test_path);
     $processed = $processor_manager->processInbound($test_path, $request);
     $this->assertEquals('/user/login', $processed, 'Processing in the correct order resolves the system path from the empty path.');
     // Test resolving an existing alias using the correct processor order.
     $test_path = '/fr/foo';
     $request = Request::create($test_path);
     $processed = $processor_manager->processInbound($test_path, $request);
     $this->assertEquals('/user/1', $processed, 'Processing in the correct order resolves the system path from an alias.');
 }