Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?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\Matcher\Dumper;use Symfony\Component\Routing\Matcher\Dumper\PhpMatcherDumper;use Symfony\Component\Routing\Route;use Symfony\Component\Routing\RouteCollection;class PhpMatcherDumperTest extends \PHPUnit_Framework_TestCase{/*** @expectedException \LogicException*/public function testDumpWhenSchemeIsUsedWithoutAProperDumper(){$collection = new RouteCollection();$collection->add('secure', new Route('/secure',array(),array(),array(),'',array('https')));$dumper = new PhpMatcherDumper($collection);$dumper->dump();}/*** @dataProvider getRouteCollections*/public function testDump(RouteCollection $collection, $fixture, $options = array()){$basePath = __DIR__.'/../../Fixtures/dumper/';$dumper = new PhpMatcherDumper($collection);$this->assertStringEqualsFile($basePath.$fixture, $dumper->dump($options), '->dump() correctly dumps routes as optimized PHP code.');}public function getRouteCollections(){/* test case 1 */$collection = new RouteCollection();$collection->add('overridden', new Route('/overridden'));// defaults and requirements$collection->add('foo', new Route('/foo/{bar}',array('def' => 'test'),array('bar' => 'baz|symfony')));// method requirement$collection->add('bar', new Route('/bar/{foo}',array(),array(),array(),'',array(),array('GET', 'head')));// GET method requirement automatically adds HEAD as valid$collection->add('barhead', new Route('/barhead/{foo}',array(),array(),array(),'',array(),array('GET')));// simple$collection->add('baz', new Route('/test/baz'));// simple with extension$collection->add('baz2', new Route('/test/baz.html'));// trailing slash$collection->add('baz3', new Route('/test/baz3/'));// trailing slash with variable$collection->add('baz4', new Route('/test/{foo}/'));// trailing slash and method$collection->add('baz5', new Route('/test/{foo}/',array(),array(),array(),'',array(),array('post')));// complex name$collection->add('baz.baz6', new Route('/test/{foo}/',array(),array(),array(),'',array(),array('put')));// defaults without variable$collection->add('foofoo', new Route('/foofoo',array('def' => 'test')));// pattern with quotes$collection->add('quoter', new Route('/{quoter}',array(),array('quoter' => '[\']+')));// space in pattern$collection->add('space', new Route('/spa ce'));// prefixes$collection1 = new RouteCollection();$collection1->add('overridden', new Route('/overridden1'));$collection1->add('foo1', new Route('/{foo}'));$collection1->add('bar1', new Route('/{bar}'));$collection1->addPrefix('/b\'b');$collection2 = new RouteCollection();$collection2->addCollection($collection1);$collection2->add('overridden', new Route('/{var}', array(), array('var' => '.*')));$collection1 = new RouteCollection();$collection1->add('foo2', new Route('/{foo1}'));$collection1->add('bar2', new Route('/{bar1}'));$collection1->addPrefix('/b\'b');$collection2->addCollection($collection1);$collection2->addPrefix('/a');$collection->addCollection($collection2);// overridden through addCollection() and multiple sub-collections with no own prefix$collection1 = new RouteCollection();$collection1->add('overridden2', new Route('/old'));$collection1->add('helloWorld', new Route('/hello/{who}', array('who' => 'World!')));$collection2 = new RouteCollection();$collection3 = new RouteCollection();$collection3->add('overridden2', new Route('/new'));$collection3->add('hey', new Route('/hey/'));$collection2->addCollection($collection3);$collection1->addCollection($collection2);$collection1->addPrefix('/multi');$collection->addCollection($collection1);// "dynamic" prefix$collection1 = new RouteCollection();$collection1->add('foo3', new Route('/{foo}'));$collection1->add('bar3', new Route('/{bar}'));$collection1->addPrefix('/b');$collection1->addPrefix('{_locale}');$collection->addCollection($collection1);// route between collections$collection->add('ababa', new Route('/ababa'));// collection with static prefix but only one route$collection1 = new RouteCollection();$collection1->add('foo4', new Route('/{foo}'));$collection1->addPrefix('/aba');$collection->addCollection($collection1);// prefix and host$collection1 = new RouteCollection();$route1 = new Route('/route1', array(), array(), array(), 'a.example.com');$collection1->add('route1', $route1);$route2 = new Route('/c2/route2', array(), array(), array(), 'a.example.com');$collection1->add('route2', $route2);$route3 = new Route('/c2/route3', array(), array(), array(), 'b.example.com');$collection1->add('route3', $route3);$route4 = new Route('/route4', array(), array(), array(), 'a.example.com');$collection1->add('route4', $route4);$route5 = new Route('/route5', array(), array(), array(), 'c.example.com');$collection1->add('route5', $route5);$route6 = new Route('/route6', array(), array(), array(), null);$collection1->add('route6', $route6);$collection->addCollection($collection1);// host and variables$collection1 = new RouteCollection();$route11 = new Route('/route11', array(), array(), array(), '{var1}.example.com');$collection1->add('route11', $route11);$route12 = new Route('/route12', array('var1' => 'val'), array(), array(), '{var1}.example.com');$collection1->add('route12', $route12);$route13 = new Route('/route13/{name}', array(), array(), array(), '{var1}.example.com');$collection1->add('route13', $route13);$route14 = new Route('/route14/{name}', array('var1' => 'val'), array(), array(), '{var1}.example.com');$collection1->add('route14', $route14);$route15 = new Route('/route15/{name}', array(), array(), array(), 'c.example.com');$collection1->add('route15', $route15);$route16 = new Route('/route16/{name}', array('var1' => 'val'), array(), array(), null);$collection1->add('route16', $route16);$route17 = new Route('/route17', array(), array(), array(), null);$collection1->add('route17', $route17);$collection->addCollection($collection1);// multiple sub-collections with a single route and a prefix each$collection1 = new RouteCollection();$collection1->add('a', new Route('/a...'));$collection2 = new RouteCollection();$collection2->add('b', new Route('/{var}'));$collection3 = new RouteCollection();$collection3->add('c', new Route('/{var}'));$collection3->addPrefix('/c');$collection2->addCollection($collection3);$collection2->addPrefix('/b');$collection1->addCollection($collection2);$collection1->addPrefix('/a');$collection->addCollection($collection1);/* test case 2 */$redirectCollection = clone $collection;// force HTTPS redirection$redirectCollection->add('secure', new Route('/secure',array(),array(),array(),'',array('https')));// force HTTP redirection$redirectCollection->add('nonsecure', new Route('/nonsecure',array(),array(),array(),'',array('http')));/* test case 3 */$rootprefixCollection = new RouteCollection();$rootprefixCollection->add('static', new Route('/test'));$rootprefixCollection->add('dynamic', new Route('/{var}'));$rootprefixCollection->addPrefix('rootprefix');$route = new Route('/with-condition');$route->setCondition('context.getMethod() == "GET"');$rootprefixCollection->add('with-condition', $route);return array(array($collection, 'url_matcher1.php', array()),array($redirectCollection, 'url_matcher2.php', array('base_class' => 'Symfony\Component\Routing\Tests\Fixtures\RedirectableUrlMatcher')),array($rootprefixCollection, 'url_matcher3.php', array()),);}}