 1ac0f42a58
			
		
	
	1ac0f42a58
	
	
	
		
			
			Travis config update Removed HHVM script as Laravel no longer support HHVM after releasing 5.3
		
			
				
	
	
		
			271 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			271 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| /*
 | |
|  * This file is part of the Symfony package.
 | |
|  *
 | |
|  * (c) Fabien Potencier <fabien@symfony.com>
 | |
|  *
 | |
|  * For the full copyright and license information, please view the LICENSE
 | |
|  * file that was distributed with this source code.
 | |
|  */
 | |
| 
 | |
| namespace Symfony\Component\Routing\Tests\Loader;
 | |
| 
 | |
| use Doctrine\Common\Annotations\AnnotationReader;
 | |
| use Doctrine\Common\Annotations\AnnotationRegistry;
 | |
| use Symfony\Component\Routing\Annotation\Route as RouteAnnotation;
 | |
| use Symfony\Component\Routing\Loader\AnnotationClassLoader;
 | |
| use Symfony\Component\Routing\Route;
 | |
| use Symfony\Component\Routing\Tests\Fixtures\AnnotationFixtures\AbstractClassController;
 | |
| use Symfony\Component\Routing\Tests\Fixtures\AnnotationFixtures\ActionPathController;
 | |
| use Symfony\Component\Routing\Tests\Fixtures\AnnotationFixtures\DefaultValueController;
 | |
| use Symfony\Component\Routing\Tests\Fixtures\AnnotationFixtures\ExplicitLocalizedActionPathController;
 | |
| use Symfony\Component\Routing\Tests\Fixtures\AnnotationFixtures\InvokableController;
 | |
| use Symfony\Component\Routing\Tests\Fixtures\AnnotationFixtures\InvokableLocalizedController;
 | |
| use Symfony\Component\Routing\Tests\Fixtures\AnnotationFixtures\LocalizedActionPathController;
 | |
| use Symfony\Component\Routing\Tests\Fixtures\AnnotationFixtures\LocalizedMethodActionControllers;
 | |
| use Symfony\Component\Routing\Tests\Fixtures\AnnotationFixtures\LocalizedPrefixLocalizedActionController;
 | |
| use Symfony\Component\Routing\Tests\Fixtures\AnnotationFixtures\LocalizedPrefixMissingLocaleActionController;
 | |
| use Symfony\Component\Routing\Tests\Fixtures\AnnotationFixtures\LocalizedPrefixMissingRouteLocaleActionController;
 | |
| use Symfony\Component\Routing\Tests\Fixtures\AnnotationFixtures\LocalizedPrefixWithRouteWithoutLocale;
 | |
| use Symfony\Component\Routing\Tests\Fixtures\AnnotationFixtures\MethodActionControllers;
 | |
| use Symfony\Component\Routing\Tests\Fixtures\AnnotationFixtures\MissingRouteNameController;
 | |
| use Symfony\Component\Routing\Tests\Fixtures\AnnotationFixtures\NothingButNameController;
 | |
| use Symfony\Component\Routing\Tests\Fixtures\AnnotationFixtures\PrefixedActionLocalizedRouteController;
 | |
| use Symfony\Component\Routing\Tests\Fixtures\AnnotationFixtures\PrefixedActionPathController;
 | |
| use Symfony\Component\Routing\Tests\Fixtures\AnnotationFixtures\RouteWithPrefixController;
 | |
| 
 | |
| class AnnotationClassLoaderTest extends AbstractAnnotationLoaderTest
 | |
| {
 | |
|     /**
 | |
|      * @var AnnotationClassLoader
 | |
|      */
 | |
|     private $loader;
 | |
| 
 | |
|     protected function setUp()
 | |
|     {
 | |
|         $reader = new AnnotationReader();
 | |
|         $this->loader = new class($reader) extends AnnotationClassLoader {
 | |
|             protected function configureRoute(Route $route, \ReflectionClass $class, \ReflectionMethod $method, $annot)
 | |
|             {
 | |
|             }
 | |
|         };
 | |
|         AnnotationRegistry::registerLoader('class_exists');
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @dataProvider provideTestSupportsChecksResource
 | |
|      */
 | |
|     public function testSupportsChecksResource($resource, $expectedSupports)
 | |
|     {
 | |
|         $this->assertSame($expectedSupports, $this->loader->supports($resource), '->supports() returns true if the resource is loadable');
 | |
|     }
 | |
| 
 | |
|     public function provideTestSupportsChecksResource()
 | |
|     {
 | |
|         return array(
 | |
|             array('class', true),
 | |
|             array('\fully\qualified\class\name', true),
 | |
|             array('namespaced\class\without\leading\slash', true),
 | |
|             array('ÿClassWithLegalSpecialCharacters', true),
 | |
|             array('5', false),
 | |
|             array('foo.foo', false),
 | |
|             array(null, false),
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     public function testSupportsChecksTypeIfSpecified()
 | |
|     {
 | |
|         $this->assertTrue($this->loader->supports('class', 'annotation'), '->supports() checks the resource type if specified');
 | |
|         $this->assertFalse($this->loader->supports('class', 'foo'), '->supports() checks the resource type if specified');
 | |
|     }
 | |
| 
 | |
|     public function testSimplePathRoute()
 | |
|     {
 | |
|         $routes = $this->loader->load(ActionPathController::class);
 | |
|         $this->assertCount(1, $routes);
 | |
|         $this->assertEquals('/path', $routes->get('action')->getPath());
 | |
|     }
 | |
| 
 | |
|     public function testInvokableControllerLoader()
 | |
|     {
 | |
|         $routes = $this->loader->load(InvokableController::class);
 | |
|         $this->assertCount(1, $routes);
 | |
|         $this->assertEquals('/here', $routes->get('lol')->getPath());
 | |
|     }
 | |
| 
 | |
|     public function testInvokableLocalizedControllerLoading()
 | |
|     {
 | |
|         $routes = $this->loader->load(InvokableLocalizedController::class);
 | |
|         $this->assertCount(2, $routes);
 | |
|         $this->assertEquals('/here', $routes->get('action.en')->getPath());
 | |
|         $this->assertEquals('/hier', $routes->get('action.nl')->getPath());
 | |
|     }
 | |
| 
 | |
|     public function testLocalizedPathRoutes()
 | |
|     {
 | |
|         $routes = $this->loader->load(LocalizedActionPathController::class);
 | |
|         $this->assertCount(2, $routes);
 | |
|         $this->assertEquals('/path', $routes->get('action.en')->getPath());
 | |
|         $this->assertEquals('/pad', $routes->get('action.nl')->getPath());
 | |
|     }
 | |
| 
 | |
|     public function testLocalizedPathRoutesWithExplicitPathPropety()
 | |
|     {
 | |
|         $routes = $this->loader->load(ExplicitLocalizedActionPathController::class);
 | |
|         $this->assertCount(2, $routes);
 | |
|         $this->assertEquals('/path', $routes->get('action.en')->getPath());
 | |
|         $this->assertEquals('/pad', $routes->get('action.nl')->getPath());
 | |
|     }
 | |
| 
 | |
|     public function testDefaultValuesForMethods()
 | |
|     {
 | |
|         $routes = $this->loader->load(DefaultValueController::class);
 | |
|         $this->assertCount(1, $routes);
 | |
|         $this->assertEquals('/{default}/path', $routes->get('action')->getPath());
 | |
|         $this->assertEquals('value', $routes->get('action')->getDefault('default'));
 | |
|     }
 | |
| 
 | |
|     public function testMethodActionControllers()
 | |
|     {
 | |
|         $routes = $this->loader->load(MethodActionControllers::class);
 | |
|         $this->assertCount(2, $routes);
 | |
|         $this->assertEquals('/the/path', $routes->get('put')->getPath());
 | |
|         $this->assertEquals('/the/path', $routes->get('post')->getPath());
 | |
|     }
 | |
| 
 | |
|     public function testLocalizedMethodActionControllers()
 | |
|     {
 | |
|         $routes = $this->loader->load(LocalizedMethodActionControllers::class);
 | |
|         $this->assertCount(4, $routes);
 | |
|         $this->assertEquals('/the/path', $routes->get('put.en')->getPath());
 | |
|         $this->assertEquals('/the/path', $routes->get('post.en')->getPath());
 | |
|     }
 | |
| 
 | |
|     public function testRouteWithPathWithPrefix()
 | |
|     {
 | |
|         $routes = $this->loader->load(PrefixedActionPathController::class);
 | |
|         $this->assertCount(1, $routes);
 | |
|         $route = $routes->get('action');
 | |
|         $this->assertEquals('/prefix/path', $route->getPath());
 | |
|         $this->assertEquals('lol=fun', $route->getCondition());
 | |
|         $this->assertEquals('frankdejonge.nl', $route->getHost());
 | |
|     }
 | |
| 
 | |
|     public function testLocalizedRouteWithPathWithPrefix()
 | |
|     {
 | |
|         $routes = $this->loader->load(PrefixedActionLocalizedRouteController::class);
 | |
|         $this->assertCount(2, $routes);
 | |
|         $this->assertEquals('/prefix/path', $routes->get('action.en')->getPath());
 | |
|         $this->assertEquals('/prefix/pad', $routes->get('action.nl')->getPath());
 | |
|     }
 | |
| 
 | |
|     public function testLocalizedPrefixLocalizedRoute()
 | |
|     {
 | |
|         $routes = $this->loader->load(LocalizedPrefixLocalizedActionController::class);
 | |
|         $this->assertCount(2, $routes);
 | |
|         $this->assertEquals('/nl/actie', $routes->get('action.nl')->getPath());
 | |
|         $this->assertEquals('/en/action', $routes->get('action.en')->getPath());
 | |
|     }
 | |
| 
 | |
|     public function testInvokableClassMultipleRouteLoad()
 | |
|     {
 | |
|         $classRouteData1 = array(
 | |
|             'name' => 'route1',
 | |
|             'path' => '/1',
 | |
|             'schemes' => array('https'),
 | |
|             'methods' => array('GET'),
 | |
|         );
 | |
| 
 | |
|         $classRouteData2 = array(
 | |
|             'name' => 'route2',
 | |
|             'path' => '/2',
 | |
|             'schemes' => array('https'),
 | |
|             'methods' => array('GET'),
 | |
|         );
 | |
| 
 | |
|         $reader = $this->getReader();
 | |
|         $reader
 | |
|             ->expects($this->exactly(1))
 | |
|             ->method('getClassAnnotations')
 | |
|             ->will($this->returnValue(array(new RouteAnnotation($classRouteData1), new RouteAnnotation($classRouteData2))))
 | |
|         ;
 | |
|         $reader
 | |
|             ->expects($this->once())
 | |
|             ->method('getMethodAnnotations')
 | |
|             ->will($this->returnValue(array()))
 | |
|         ;
 | |
|         $loader = new class($reader) extends AnnotationClassLoader {
 | |
|             protected function configureRoute(Route $route, \ReflectionClass $class, \ReflectionMethod $method, $annot)
 | |
|             {
 | |
|             }
 | |
|         };
 | |
| 
 | |
|         $routeCollection = $loader->load('Symfony\Component\Routing\Tests\Fixtures\AnnotatedClasses\BazClass');
 | |
|         $route = $routeCollection->get($classRouteData1['name']);
 | |
| 
 | |
|         $this->assertSame($classRouteData1['path'], $route->getPath(), '->load preserves class route path');
 | |
|         $this->assertEquals($classRouteData1['schemes'], $route->getSchemes(), '->load preserves class route schemes');
 | |
|         $this->assertEquals($classRouteData1['methods'], $route->getMethods(), '->load preserves class route methods');
 | |
| 
 | |
|         $route = $routeCollection->get($classRouteData2['name']);
 | |
| 
 | |
|         $this->assertSame($classRouteData2['path'], $route->getPath(), '->load preserves class route path');
 | |
|         $this->assertEquals($classRouteData2['schemes'], $route->getSchemes(), '->load preserves class route schemes');
 | |
|         $this->assertEquals($classRouteData2['methods'], $route->getMethods(), '->load preserves class route methods');
 | |
|     }
 | |
| 
 | |
|     public function testMissingPrefixLocale()
 | |
|     {
 | |
|         $this->expectException(\LogicException::class);
 | |
|         $this->loader->load(LocalizedPrefixMissingLocaleActionController::class);
 | |
|     }
 | |
| 
 | |
|     public function testMissingRouteLocale()
 | |
|     {
 | |
|         $this->expectException(\LogicException::class);
 | |
|         $this->loader->load(LocalizedPrefixMissingRouteLocaleActionController::class);
 | |
|     }
 | |
| 
 | |
|     public function testRouteWithoutName()
 | |
|     {
 | |
|         $routes = $this->loader->load(MissingRouteNameController::class)->all();
 | |
|         $this->assertCount(1, $routes);
 | |
|         $this->assertEquals('/path', reset($routes)->getPath());
 | |
|     }
 | |
| 
 | |
|     public function testNothingButName()
 | |
|     {
 | |
|         $routes = $this->loader->load(NothingButNameController::class)->all();
 | |
|         $this->assertCount(1, $routes);
 | |
|         $this->assertEquals('/', reset($routes)->getPath());
 | |
|     }
 | |
| 
 | |
|     public function testNonExistingClass()
 | |
|     {
 | |
|         $this->expectException(\LogicException::class);
 | |
|         $this->loader->load('ClassThatDoesNotExist');
 | |
|     }
 | |
| 
 | |
|     public function testLoadingAbstractClass()
 | |
|     {
 | |
|         $this->expectException(\LogicException::class);
 | |
|         $this->loader->load(AbstractClassController::class);
 | |
|     }
 | |
| 
 | |
|     public function testLocalizedPrefixWithoutRouteLocale()
 | |
|     {
 | |
|         $routes = $this->loader->load(LocalizedPrefixWithRouteWithoutLocale::class);
 | |
|         $this->assertCount(2, $routes);
 | |
|         $this->assertEquals('/en/suffix', $routes->get('action.en')->getPath());
 | |
|         $this->assertEquals('/nl/suffix', $routes->get('action.nl')->getPath());
 | |
|     }
 | |
| 
 | |
|     public function testLoadingRouteWithPrefix()
 | |
|     {
 | |
|         $routes = $this->loader->load(RouteWithPrefixController::class);
 | |
|         $this->assertCount(1, $routes);
 | |
|         $this->assertEquals('/prefix/path', $routes->get('action')->getPath());
 | |
|     }
 | |
| }
 |