2010-06-24 07:46:50 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
/*
|
|
|
|
* This file is part of the Symfony package.
|
|
|
|
*
|
2011-03-06 11:40:06 +00:00
|
|
|
* (c) Fabien Potencier <fabien@symfony.com>
|
2010-06-24 07:46:50 +01:00
|
|
|
*
|
|
|
|
* For the full copyright and license information, please view the LICENSE
|
|
|
|
* file that was distributed with this source code.
|
|
|
|
*/
|
|
|
|
|
2010-08-20 22:09:55 +01:00
|
|
|
namespace Symfony\Tests\Component\Routing;
|
2010-06-24 07:46:50 +01:00
|
|
|
|
2010-08-20 22:09:55 +01:00
|
|
|
use Symfony\Component\Routing\Route;
|
2010-06-24 07:46:50 +01:00
|
|
|
|
|
|
|
class RouteCompilerTest extends \PHPUnit_Framework_TestCase
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* @dataProvider provideCompileData
|
|
|
|
*/
|
|
|
|
public function testCompile($name, $arguments, $prefix, $regex, $variables, $tokens)
|
|
|
|
{
|
2010-08-20 22:09:55 +01:00
|
|
|
$r = new \ReflectionClass('Symfony\\Component\\Routing\\Route');
|
2010-06-24 07:46:50 +01:00
|
|
|
$route = $r->newInstanceArgs($arguments);
|
|
|
|
|
|
|
|
$compiled = $route->compile();
|
|
|
|
$this->assertEquals($prefix, $compiled->getStaticPrefix(), $name.' (static prefix)');
|
2011-04-25 11:03:41 +01:00
|
|
|
$this->assertEquals($regex, str_replace(array("\n", ' '), '', $compiled->getRegex()), $name.' (regex)');
|
2010-06-24 07:46:50 +01:00
|
|
|
$this->assertEquals($variables, $compiled->getVariables(), $name.' (variables)');
|
|
|
|
$this->assertEquals($tokens, $compiled->getTokens(), $name.' (tokens)');
|
|
|
|
}
|
|
|
|
|
|
|
|
public function provideCompileData()
|
|
|
|
{
|
|
|
|
return array(
|
|
|
|
array(
|
|
|
|
'Static route',
|
|
|
|
array('/foo'),
|
2011-09-23 15:53:06 +01:00
|
|
|
'/foo', '#^/foo$#xs', array(), array(
|
2011-04-25 11:03:41 +01:00
|
|
|
array('text', '/foo'),
|
2010-06-24 07:46:50 +01:00
|
|
|
)),
|
|
|
|
|
|
|
|
array(
|
|
|
|
'Route with a variable',
|
2010-11-23 14:11:28 +00:00
|
|
|
array('/foo/{bar}'),
|
2011-09-23 15:53:06 +01:00
|
|
|
'/foo', '#^/foo/(?P<bar>[^/]+?)$#xs', array('bar'), array(
|
2011-05-03 13:48:08 +01:00
|
|
|
array('variable', '/', '[^/]+?', 'bar'),
|
2011-04-25 11:03:41 +01:00
|
|
|
array('text', '/foo'),
|
2010-06-24 07:46:50 +01:00
|
|
|
)),
|
|
|
|
|
|
|
|
array(
|
|
|
|
'Route with a variable that has a default value',
|
2010-11-23 14:11:28 +00:00
|
|
|
array('/foo/{bar}', array('bar' => 'bar')),
|
2011-09-23 15:53:06 +01:00
|
|
|
'/foo', '#^/foo(?:/(?P<bar>[^/]+?))?$#xs', array('bar'), array(
|
2011-05-03 13:48:08 +01:00
|
|
|
array('variable', '/', '[^/]+?', 'bar'),
|
2011-04-25 11:03:41 +01:00
|
|
|
array('text', '/foo'),
|
2010-06-24 07:46:50 +01:00
|
|
|
)),
|
|
|
|
|
|
|
|
array(
|
|
|
|
'Route with several variables',
|
2010-11-23 14:11:28 +00:00
|
|
|
array('/foo/{bar}/{foobar}'),
|
2011-09-23 15:53:06 +01:00
|
|
|
'/foo', '#^/foo/(?P<bar>[^/]+?)/(?P<foobar>[^/]+?)$#xs', array('bar', 'foobar'), array(
|
2011-05-03 13:48:08 +01:00
|
|
|
array('variable', '/', '[^/]+?', 'foobar'),
|
|
|
|
array('variable', '/', '[^/]+?', 'bar'),
|
2011-04-25 11:03:41 +01:00
|
|
|
array('text', '/foo'),
|
2010-06-24 07:46:50 +01:00
|
|
|
)),
|
|
|
|
|
|
|
|
array(
|
|
|
|
'Route with several variables that have default values',
|
2011-03-13 17:13:41 +00:00
|
|
|
array('/foo/{bar}/{foobar}', array('bar' => 'bar', 'foobar' => '')),
|
2011-09-23 15:53:06 +01:00
|
|
|
'/foo', '#^/foo(?:/(?P<bar>[^/]+?)(?:/(?P<foobar>[^/]+?))?)?$#xs', array('bar', 'foobar'), array(
|
2011-05-03 13:48:08 +01:00
|
|
|
array('variable', '/', '[^/]+?', 'foobar'),
|
|
|
|
array('variable', '/', '[^/]+?', 'bar'),
|
2011-04-25 11:03:41 +01:00
|
|
|
array('text', '/foo'),
|
2010-06-24 07:46:50 +01:00
|
|
|
)),
|
|
|
|
|
|
|
|
array(
|
|
|
|
'Route with several variables but some of them have no default values',
|
2010-11-23 14:11:28 +00:00
|
|
|
array('/foo/{bar}/{foobar}', array('bar' => 'bar')),
|
2011-09-23 15:53:06 +01:00
|
|
|
'/foo', '#^/foo/(?P<bar>[^/]+?)/(?P<foobar>[^/]+?)$#xs', array('bar', 'foobar'), array(
|
2011-05-03 13:48:08 +01:00
|
|
|
array('variable', '/', '[^/]+?', 'foobar'),
|
|
|
|
array('variable', '/', '[^/]+?', 'bar'),
|
2011-04-25 11:03:41 +01:00
|
|
|
array('text', '/foo'),
|
2010-06-24 07:46:50 +01:00
|
|
|
)),
|
2011-05-03 07:54:33 +01:00
|
|
|
|
|
|
|
array(
|
|
|
|
'Route with an optional variable as the first segment',
|
|
|
|
array('/{bar}', array('bar' => 'bar')),
|
2011-09-23 15:53:06 +01:00
|
|
|
'', '#^/(?:(?P<bar>[^/]+?))?$#xs', array('bar'), array(
|
2011-05-03 13:48:08 +01:00
|
|
|
array('variable', '/', '[^/]+?', 'bar'),
|
2011-05-03 07:54:33 +01:00
|
|
|
)),
|
|
|
|
|
|
|
|
array(
|
|
|
|
'Route with an optional variable as the first segment with requirements',
|
|
|
|
array('/{bar}', array('bar' => 'bar'), array('bar' => '(foo|bar)')),
|
2011-09-23 15:53:06 +01:00
|
|
|
'', '#^/(?:(?P<bar>(foo|bar)))?$#xs', array('bar'), array(
|
2011-05-03 07:54:33 +01:00
|
|
|
array('variable', '/', '(foo|bar)', 'bar'),
|
|
|
|
)),
|
2010-06-24 07:46:50 +01:00
|
|
|
);
|
|
|
|
}
|
2012-02-14 10:41:45 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @expectedException \LogicException
|
|
|
|
*/
|
|
|
|
public function testRouteWithSameVariableTwice()
|
|
|
|
{
|
|
|
|
$route = new Route('/{name}/{name}');
|
|
|
|
|
|
|
|
$compiled = $route->compile();
|
|
|
|
}
|
2011-10-29 11:03:59 +01:00
|
|
|
}
|