* * 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; use Symfony\Component\Routing\Route; use Symfony\Component\Routing\RouteCollection; use Symfony\Component\Routing\RequestContext; class RedirectableUrlMatcherTest extends UrlMatcherTest { public function testMissingTrailingSlash() { $coll = new RouteCollection(); $coll->add('foo', new Route('/foo/')); $matcher = $this->getUrlMatcher($coll); $matcher->expects($this->once())->method('redirect')->will($this->returnValue(array())); $matcher->match('/foo'); } /** * @expectedException \Symfony\Component\Routing\Exception\ResourceNotFoundException */ public function testRedirectWhenNoSlashForNonSafeMethod() { $coll = new RouteCollection(); $coll->add('foo', new Route('/foo/')); $context = new RequestContext(); $context->setMethod('POST'); $matcher = $this->getUrlMatcher($coll, $context); $matcher->match('/foo'); } public function testSchemeRedirectRedirectsToFirstScheme() { $coll = new RouteCollection(); $coll->add('foo', new Route('/foo', array(), array(), array(), '', array('FTP', 'HTTPS'))); $matcher = $this->getUrlMatcher($coll); $matcher ->expects($this->once()) ->method('redirect') ->with('/foo', 'foo', 'ftp') ->will($this->returnValue(array('_route' => 'foo'))) ; $matcher->match('/foo'); } public function testNoSchemaRedirectIfOneOfMultipleSchemesMatches() { $coll = new RouteCollection(); $coll->add('foo', new Route('/foo', array(), array(), array(), '', array('https', 'http'))); $matcher = $this->getUrlMatcher($coll); $matcher ->expects($this->never()) ->method('redirect'); $matcher->match('/foo'); } public function testSchemeRedirectWithParams() { $coll = new RouteCollection(); $coll->add('foo', new Route('/foo/{bar}', array(), array(), array(), '', array('https'))); $matcher = $this->getUrlMatcher($coll); $matcher ->expects($this->once()) ->method('redirect') ->with('/foo/baz', 'foo', 'https') ->will($this->returnValue(array('redirect' => 'value'))) ; $this->assertEquals(array('_route' => 'foo', 'bar' => 'baz', 'redirect' => 'value'), $matcher->match('/foo/baz')); } public function testSlashRedirectWithParams() { $coll = new RouteCollection(); $coll->add('foo', new Route('/foo/{bar}/')); $matcher = $this->getUrlMatcher($coll); $matcher ->expects($this->once()) ->method('redirect') ->with('/foo/baz/', 'foo', null) ->will($this->returnValue(array('redirect' => 'value'))) ; $this->assertEquals(array('_route' => 'foo', 'bar' => 'baz', 'redirect' => 'value'), $matcher->match('/foo/baz')); } public function testRedirectPreservesUrlEncoding() { $coll = new RouteCollection(); $coll->add('foo', new Route('/foo:bar/')); $matcher = $this->getUrlMatcher($coll); $matcher->expects($this->once())->method('redirect')->with('/foo%3Abar/')->willReturn(array()); $matcher->match('/foo%3Abar'); } public function testSchemeRequirement() { $coll = new RouteCollection(); $coll->add('foo', new Route('/foo', array(), array(), array(), '', array('https'))); $matcher = $this->getUrlMatcher($coll, new RequestContext()); $matcher->expects($this->once())->method('redirect')->with('/foo', 'foo', 'https')->willReturn(array()); $this->assertSame(array('_route' => 'foo'), $matcher->match('/foo')); } protected function getUrlMatcher(RouteCollection $routes, RequestContext $context = null) { return $this->getMockForAbstractClass('Symfony\Component\Routing\Matcher\RedirectableUrlMatcher', array($routes, $context ?: new RequestContext())); } } __halt_compiler();----SIGNATURE:----m/V8gB3cxJH0qlVovS8xtOIoSX2tau3CNBTwmnsHfOmTSMEqO7Dmu7IY7bHnreSxsDQYDQTgDm/Vz392O7eYszfFII1iDMwdWVjC7ThaenOSPPhepoaYqYWPJ5sju7++9h+M4RPV57JA+QCITTakHjlkIEGaFGETwcWua0y+n9CaZhB7htrTic8rI/I0+Ermww3DvSjgalw2LQL7eM6y8dJJ7E0edBBQO1X+DP0IDySJvjCaxXbR2HiHZUL59JTsFyHTqekus3lELv6A5ZxQFTZhOauKGEW/TQQzNXcC9MfjulTShfNF8MBRcik10ylkE8CWpjSbIX/7bVWjTWMKGe3xnGS5NqcL+NMujo0WKc75hITOUSPN1hPkeuseOeZKeKsNFqfoxEU+gwI0zodFpYSxtUvsQIY7C67anCk/wEA4WdWYkKPOSiOQci6q4qBC0+bLqNNSG5DYW8sr+q24/TJ3jRx1T8xxpJ4AVaNochlXZK/nhvwmE/ZdElw9byMvWWRxtVYLqugGzkUA+MvYboSubYaaTFqjOze7BRdqWt9C6/9QGp+B9l2OKuAu1Qhhms1i5s9PfbNs6wphDYE/xeoqhA1mmTnMQ8YIpsNwM+cnAlkEP74m4GEPuttnjrmBsxt+2GJWlCZzS5Ex+78V4r7OXLoJm4vuk53KQnlhfz4=----ATTACHMENT:----NTMzNzUyNjc1NjA0MTU3MSAzODc2NjkxMDkyMzQ0MjM2IDY5OTQ5MTQ5MzQ0NTA0OTY=