* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Tests\Component\Routing; use Symfony\Component\Routing\Route; require __DIR__.'/RouteCompiler.php'; class RouteCompilerTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider provideCompileData */ public function testCompile($name, $arguments, $prefix, $regex, $variables, $tokens) { $r = new \ReflectionClass('Symfony\\Component\\Routing\\Route'); $route = $r->newInstanceArgs($arguments); $compiled = $route->compile(); $this->assertEquals($prefix, $compiled->getStaticPrefix(), $name.' (static prefix)'); $this->assertEquals($regex, $compiled->getRegex(), $name.' (regex)'); $this->assertEquals($variables, $compiled->getVariables(), $name.' (variables)'); $this->assertEquals($tokens, $compiled->getTokens(), $name.' (tokens)'); } public function provideCompileData() { return array( array( 'Static route', array('/foo'), '/foo', '#^/foo$#x', array(), array( array('text', '/', 'foo', null), )), array( 'Route with a variable', array('/foo/{bar}'), '/foo', '#^/foo/(?P[^/\.]+?)$#x', array('bar' => '{bar}'), array( array('variable', '/', '{bar}', 'bar'), array('text', '/', 'foo', null), )), array( 'Route with a variable that has a default value', array('/foo/{bar}', array('bar' => 'bar')), '/foo', '#^/foo(?:/(?P[^/\.]+?))?$#x', array('bar' => '{bar}'), array( array('variable', '/', '{bar}', 'bar'), array('text', '/', 'foo', null), )), array( 'Route with several variables', array('/foo/{bar}/{foobar}'), '/foo', '#^/foo/(?P[^/\.]+?)/(?P[^/\.]+?)$#x', array('bar' => '{bar}', 'foobar' => '{foobar}'), array( array('variable', '/', '{foobar}', 'foobar'), array('variable', '/', '{bar}', 'bar'), array('text', '/', 'foo', null), )), array( 'Route with several variables that have default values', array('/foo/{bar}/{foobar}', array('bar' => 'bar', 'foobar' => 'foobar')), '/foo', '#^/foo(?:/(?P[^/\.]+?) (?:/(?P[^/\.]+?) )?)?$#x', array('bar' => '{bar}', 'foobar' => '{foobar}'), array( array('variable', '/', '{foobar}', 'foobar'), array('variable', '/', '{bar}', 'bar'), array('text', '/', 'foo', null), )), array( 'Route with several variables but some of them have no default values', array('/foo/{bar}/{foobar}', array('bar' => 'bar')), '/foo', '#^/foo/(?P[^/\.]+?)/(?P[^/\.]+?)$#x', array('bar' => '{bar}', 'foobar' => '{foobar}'), array( array('variable', '/', '{foobar}', 'foobar'), array('variable', '/', '{bar}', 'bar'), array('text', '/', 'foo', null), )), array( 'Route with a custom token', array('/=foo', array(), array(), array('compiler_class' => 'Symfony\\Tests\\Component\\Routing\\RouteCompiler')), '', '#^/foo/(?P[^/\.]+?)$#x', array('foo' => '=foo'), array( array('label', '/', '=foo', 'foo'), )), ); } }