X-Git-Url: http://www.aleph1.co.uk/gitweb/?a=blobdiff_plain;ds=sidebyside;f=vendor%2Fsymfony-cmf%2Frouting%2FTests%2FRouting%2FDynamicRouterTest.php;fp=vendor%2Fsymfony-cmf%2Frouting%2FTests%2FRouting%2FDynamicRouterTest.php;h=1204b03b6b778a21c297fcafd7538e885960c227;hb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;hp=0000000000000000000000000000000000000000;hpb=57c063afa3f66b07c4bbddc2d6129a96d90f0aad;p=yaffs-website diff --git a/vendor/symfony-cmf/routing/Tests/Routing/DynamicRouterTest.php b/vendor/symfony-cmf/routing/Tests/Routing/DynamicRouterTest.php new file mode 100644 index 000000000..1204b03b6 --- /dev/null +++ b/vendor/symfony-cmf/routing/Tests/Routing/DynamicRouterTest.php @@ -0,0 +1,379 @@ +routeDocument = $this->buildMock('Symfony\Cmf\Component\Routing\Tests\Routing\RouteMock', array('getDefaults')); + + $this->matcher = $this->buildMock('Symfony\Component\Routing\Matcher\UrlMatcherInterface'); + $this->generator = $this->buildMock('Symfony\Cmf\Component\Routing\VersatileGeneratorInterface', array('supports', 'generate', 'setContext', 'getContext', 'getRouteDebugMessage')); + $this->enhancer = $this->buildMock('Symfony\Cmf\Component\Routing\Enhancer\RouteEnhancerInterface', array('enhance')); + + $this->context = $this->buildMock('Symfony\Component\Routing\RequestContext'); + $this->request = Request::create($this->url); + + $this->router = new DynamicRouter($this->context, $this->matcher, $this->generator); + $this->router->addRouteEnhancer($this->enhancer); + } + + /** + * rather trivial, but we want 100% coverage. + */ + public function testContext() + { + $this->router->setContext($this->context); + $this->assertSame($this->context, $this->router->getContext()); + } + + public function testRouteCollectionEmpty() + { + $collection = $this->router->getRouteCollection(); + $this->assertInstanceOf('Symfony\Component\Routing\RouteCollection', $collection); + } + + public function testRouteCollectionLazy() + { + $provider = $this->getMock('Symfony\Cmf\Component\Routing\RouteProviderInterface'); + $router = new DynamicRouter($this->context, $this->matcher, $this->generator, '', null, $provider); + + $collection = $router->getRouteCollection(); + $this->assertInstanceOf('Symfony\Cmf\Component\Routing\LazyRouteCollection', $collection); + } + + /// generator tests /// + + public function testGetGenerator() + { + $this->generator->expects($this->once()) + ->method('setContext') + ->with($this->equalTo($this->context)); + + $generator = $this->router->getGenerator(); + $this->assertInstanceOf('Symfony\Component\Routing\Generator\UrlGeneratorInterface', $generator); + $this->assertSame($this->generator, $generator); + } + + public function testGenerate() + { + $name = 'my_route_name'; + $parameters = array('foo' => 'bar'); + $absolute = UrlGeneratorInterface::ABSOLUTE_PATH; + + $this->generator->expects($this->once()) + ->method('generate') + ->with($name, $parameters, $absolute) + ->will($this->returnValue('http://test')) + ; + + $url = $this->router->generate($name, $parameters, $absolute); + $this->assertEquals('http://test', $url); + } + + public function testSupports() + { + $name = 'foo/bar'; + $this->generator->expects($this->once()) + ->method('supports') + ->with($this->equalTo($name)) + ->will($this->returnValue(true)) + ; + + $this->assertTrue($this->router->supports($name)); + } + + public function testSupportsNonversatile() + { + $generator = $this->buildMock('Symfony\Component\Routing\Generator\UrlGeneratorInterface', array('generate', 'setContext', 'getContext')); + $router = new DynamicRouter($this->context, $this->matcher, $generator); + $this->assertInternalType('string', $router->getRouteDebugMessage('test')); + + $this->assertTrue($router->supports('some string')); + $this->assertFalse($router->supports($this)); + } + + /// match tests /// + + public function testGetMatcher() + { + $this->matcher->expects($this->once()) + ->method('setContext') + ->with($this->equalTo($this->context)); + + $matcher = $this->router->getMatcher(); + $this->assertInstanceOf('Symfony\Component\Routing\Matcher\UrlMatcherInterface', $matcher); + $this->assertSame($this->matcher, $matcher); + } + + /** + * @group legacy + */ + public function testMatchUrl() + { + $routeDefaults = array('foo' => 'bar'); + $this->matcher->expects($this->once()) + ->method('match') + ->with($this->url) + ->will($this->returnValue($routeDefaults)) + ; + + $expected = array('this' => 'that'); + $this->enhancer->expects($this->once()) + ->method('enhance') + ->with($this->equalTo($routeDefaults), $this->equalTo($this->request)) + ->will($this->returnValue($expected)) + ; + + $results = $this->router->match($this->url); + + $this->assertEquals($expected, $results); + } + + public function testMatchRequestWithUrlMatcher() + { + $routeDefaults = array('foo' => 'bar'); + + $this->matcher->expects($this->once()) + ->method('match') + ->with($this->url) + ->will($this->returnValue($routeDefaults)) + ; + + $expected = array('this' => 'that'); + $this->enhancer->expects($this->once()) + ->method('enhance') + // somehow request object gets confused, check on instance only + ->with($this->equalTo($routeDefaults), $this->isInstanceOf('Symfony\Component\HttpFoundation\Request')) + ->will($this->returnValue($expected)) + ; + + $results = $this->router->matchRequest($this->request); + + $this->assertEquals($expected, $results); + } + + public function testMatchRequest() + { + $routeDefaults = array('foo' => 'bar'); + + $matcher = $this->buildMock('Symfony\Component\Routing\Matcher\RequestMatcherInterface', array('matchRequest', 'setContext', 'getContext')); + $router = new DynamicRouter($this->context, $matcher, $this->generator); + + $matcher->expects($this->once()) + ->method('matchRequest') + ->with($this->request) + ->will($this->returnValue($routeDefaults)) + ; + + $expected = array('this' => 'that'); + $this->enhancer->expects($this->once()) + ->method('enhance') + ->with($this->equalTo($routeDefaults), $this->equalTo($this->request)) + ->will($this->returnValue($expected)) + ; + + $router->addRouteEnhancer($this->enhancer); + + $this->assertEquals($expected, $router->matchRequest($this->request)); + } + + /** + * @expectedException \Symfony\Component\Routing\Exception\ResourceNotFoundException + * @group legacy + */ + public function testMatchFilter() + { + $router = new DynamicRouter($this->context, $this->matcher, $this->generator, '#/different/prefix.*#'); + $router->addRouteEnhancer($this->enhancer); + + $this->matcher->expects($this->never()) + ->method('match') + ; + + $this->enhancer->expects($this->never()) + ->method('enhance') + ; + + $router->match($this->url); + } + + /** + * @expectedException \Symfony\Component\Routing\Exception\ResourceNotFoundException + */ + public function testMatchRequestFilter() + { + $matcher = $this->buildMock('Symfony\Component\Routing\Matcher\RequestMatcherInterface', array('matchRequest', 'setContext', 'getContext')); + + $router = new DynamicRouter($this->context, $matcher, $this->generator, '#/different/prefix.*#'); + $router->addRouteEnhancer($this->enhancer); + + $matcher->expects($this->never()) + ->method('matchRequest') + ; + + $this->enhancer->expects($this->never()) + ->method('enhance') + ; + + $router->matchRequest($this->request); + } + + /** + * @expectedException \InvalidArgumentException + * @group legacy + */ + public function testMatchUrlWithRequestMatcher() + { + $matcher = $this->buildMock('Symfony\Component\Routing\Matcher\RequestMatcherInterface', array('matchRequest', 'setContext', 'getContext')); + $router = new DynamicRouter($this->context, $matcher, $this->generator); + + $router->match($this->url); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testInvalidMatcher() + { + new DynamicRouter($this->context, $this, $this->generator); + } + + public function testRouteDebugMessage() + { + $this->generator->expects($this->once()) + ->method('getRouteDebugMessage') + ->with($this->equalTo('test'), $this->equalTo(array())) + ->will($this->returnValue('debug message')) + ; + + $this->assertEquals('debug message', $this->router->getRouteDebugMessage('test')); + } + + public function testRouteDebugMessageNonversatile() + { + $generator = $this->buildMock('Symfony\Component\Routing\Generator\UrlGeneratorInterface', array('generate', 'setContext', 'getContext')); + $router = new DynamicRouter($this->context, $this->matcher, $generator); + $this->assertInternalType('string', $router->getRouteDebugMessage('test')); + } + + /** + * @group legacy + */ + public function testEventHandler() + { + $eventDispatcher = $this->buildMock('Symfony\Component\EventDispatcher\EventDispatcherInterface'); + $router = new DynamicRouter($this->context, $this->matcher, $this->generator, '', $eventDispatcher); + + $eventDispatcher->expects($this->once()) + ->method('dispatch') + ->with(Events::PRE_DYNAMIC_MATCH, $this->equalTo(new RouterMatchEvent())) + ; + + $routeDefaults = array('foo' => 'bar'); + $this->matcher->expects($this->once()) + ->method('match') + ->with($this->url) + ->will($this->returnValue($routeDefaults)) + ; + + $this->assertEquals($routeDefaults, $router->match($this->url)); + } + + public function testEventHandlerRequest() + { + $eventDispatcher = $this->buildMock('Symfony\Component\EventDispatcher\EventDispatcherInterface'); + $router = new DynamicRouter($this->context, $this->matcher, $this->generator, '', $eventDispatcher); + + $that = $this; + $eventDispatcher->expects($this->once()) + ->method('dispatch') + ->with(Events::PRE_DYNAMIC_MATCH_REQUEST, $this->callback(function ($event) use ($that) { + $that->assertInstanceOf('Symfony\Cmf\Component\Routing\Event\RouterMatchEvent', $event); + $that->assertEquals($that->request, $event->getRequest()); + + return true; + })) + ; + + $routeDefaults = array('foo' => 'bar'); + $this->matcher->expects($this->once()) + ->method('match') + ->with($this->url) + ->will($this->returnValue($routeDefaults)) + ; + + $this->assertEquals($routeDefaults, $router->matchRequest($this->request)); + } + + public function testEventHandlerGenerate() + { + $eventDispatcher = $this->buildMock('Symfony\Component\EventDispatcher\EventDispatcherInterface'); + $router = new DynamicRouter($this->context, $this->matcher, $this->generator, '', $eventDispatcher); + + $oldname = 'old_route_name'; + $newname = 'new_route_name'; + $oldparameters = array('foo' => 'bar'); + $newparameters = array('a' => 'b'); + $oldReferenceType = false; + $newReferenceType = true; + + $that = $this; + $eventDispatcher->expects($this->once()) + ->method('dispatch') + ->with(Events::PRE_DYNAMIC_GENERATE, $this->callback(function ($event) use ($that, $oldname, $newname, $oldparameters, $newparameters, $oldReferenceType, $newReferenceType) { + $that->assertInstanceOf('Symfony\Cmf\Component\Routing\Event\RouterGenerateEvent', $event); + if (empty($that->seen)) { + // phpunit is calling the callback twice, and because we update the event the second time fails + $that->seen = true; + } else { + return true; + } + $that->assertEquals($oldname, $event->getRoute()); + $that->assertEquals($oldparameters, $event->getParameters()); + $that->assertEquals($oldReferenceType, $event->getReferenceType()); + $event->setRoute($newname); + $event->setParameters($newparameters); + $event->setReferenceType($newReferenceType); + + return true; + })) + ; + + $this->generator->expects($this->once()) + ->method('generate') + ->with($newname, $newparameters, $newReferenceType) + ->will($this->returnValue('http://test')) + ; + + $this->assertEquals('http://test', $router->generate($oldname, $oldparameters, $oldReferenceType)); + } +}