2010-06-24 07:46:50 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
/*
|
|
|
|
* This file is part of the Symfony package.
|
|
|
|
*
|
|
|
|
* (c) Fabien Potencier <fabien.potencier@symfony-project.com>
|
|
|
|
*
|
|
|
|
* 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\Matcher;
|
2010-06-24 07:46:50 +01:00
|
|
|
|
2010-08-20 22:09:55 +01:00
|
|
|
use Symfony\Component\Routing\Matcher\UrlMatcher;
|
|
|
|
use Symfony\Component\Routing\RouteCollection;
|
|
|
|
use Symfony\Component\Routing\Route;
|
2010-06-24 07:46:50 +01:00
|
|
|
|
|
|
|
class UrlMatcherTest extends \PHPUnit_Framework_TestCase
|
|
|
|
{
|
|
|
|
public function testNormalizeUrl()
|
|
|
|
{
|
|
|
|
$collection = new RouteCollection();
|
2010-11-23 08:42:19 +00:00
|
|
|
$collection->add('foo', new Route('/:foo'));
|
2010-06-24 07:46:50 +01:00
|
|
|
|
|
|
|
$matcher = new UrlMatcherForTests($collection, array(), array());
|
|
|
|
|
|
|
|
$this->assertEquals('/', $matcher->normalizeUrl(''), '->normalizeUrl() adds a / at the beginning of the URL if needed');
|
|
|
|
$this->assertEquals('/foo', $matcher->normalizeUrl('foo'), '->normalizeUrl() adds a / at the beginning of the URL if needed');
|
|
|
|
$this->assertEquals('/foo', $matcher->normalizeUrl('/foo?foo=bar'), '->normalizeUrl() removes the query string');
|
|
|
|
$this->assertEquals('/foo/bar', $matcher->normalizeUrl('/foo//bar'), '->normalizeUrl() removes duplicated /');
|
|
|
|
}
|
2010-11-25 02:50:21 +00:00
|
|
|
|
|
|
|
public function testMatch()
|
|
|
|
{
|
|
|
|
// test the patterns are matched are parameters are returned
|
|
|
|
$collection = new RouteCollection();
|
2010-11-25 14:49:33 +00:00
|
|
|
$collection->add('foo', new Route('/foo/:bar'));
|
2010-11-25 02:50:21 +00:00
|
|
|
$matcher = new UrlMatcher($collection, array(), array());
|
|
|
|
$this->assertEquals(false, $matcher->match('/no-match'));
|
|
|
|
$this->assertEquals(array('_route' => 'foo', 'bar' => 'baz'), $matcher->match('/foo/baz'));
|
|
|
|
|
|
|
|
// test that defaults are merged
|
|
|
|
$collection = new RouteCollection();
|
2010-11-25 14:49:33 +00:00
|
|
|
$collection->add('foo', new Route('/foo/:bar', array('def' => 'test')));
|
2010-11-25 02:50:21 +00:00
|
|
|
$matcher = new UrlMatcher($collection, array(), array());
|
|
|
|
$this->assertEquals(array('_route' => 'foo', 'bar' => 'baz', 'def' => 'test'), $matcher->match('/foo/baz'));
|
|
|
|
|
|
|
|
// test that route "metod" is ignore if no method is given in the context
|
|
|
|
$collection = new RouteCollection();
|
2010-11-25 14:49:33 +00:00
|
|
|
$collection->add('foo', new Route('/foo', array(), array('_method' => 'GET|head')));
|
2010-11-25 02:50:21 +00:00
|
|
|
|
|
|
|
// route matches with no context
|
|
|
|
$matcher = new UrlMatcher($collection, array(), array());
|
|
|
|
$this->assertNotEquals(false, $matcher->match('/foo'));
|
|
|
|
|
|
|
|
// route does not match with POST method context
|
|
|
|
$matcher = new UrlMatcher($collection, array('method' => 'POST'), array());
|
|
|
|
$this->assertEquals(false, $matcher->match('/foo'));
|
|
|
|
|
|
|
|
// route does match with GET or HEAD method context
|
|
|
|
$matcher = new UrlMatcher($collection, array('method' => 'GET'), array());
|
|
|
|
$this->assertNotEquals(false, $matcher->match('/foo'));
|
|
|
|
$matcher = new UrlMatcher($collection, array('method' => 'HEAD'), array());
|
|
|
|
$this->assertNotEquals(false, $matcher->match('/foo'));
|
|
|
|
}
|
2010-06-24 07:46:50 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
class UrlMatcherForTests extends UrlMatcher
|
|
|
|
{
|
|
|
|
public function normalizeUrl($url)
|
|
|
|
{
|
|
|
|
return parent::normalizeUrl($url);
|
|
|
|
}
|
|
|
|
}
|