示例#1
0
 /**
  * @param $url
  * @dataProvider outOfMatchUrlProvider
  * @expectedException \ReRoute\Exceptions\MatchNotFoundException
  */
 public function testOutOfMatch($url)
 {
     $router = new Router();
     $urlTemplate = new UrlTemplate();
     $urlTemplate->setScheme('http')->setPathTemplate('/')->setHostTemplate('example.com');
     $router->addRoute(new FinalRoute('homepageResult', $urlTemplate));
     $router->doMatch(RequestContextFactory::createFromUrl($url));
 }
示例#2
0
 /**
  * @dataProvider templateRequestsProvider
  *
  * @param $url
  * @param $method
  * @param $result
  */
 public function testTemplateMatch($url, $method, $result)
 {
     $route = new FinalRoute('testResult');
     $route->setUrlTemplate(new UrlTemplate(['host' => '{subdomain:[a-z]{2,5}}.example.com', 'path' => '/item/{itemId:\\d+}/', 'scheme' => 'http', 'method' => 'get|post']));
     $requestContext = RequestContextFactory::createFromUrl($url, $method);
     $routeMatch = $route->doMatch($requestContext);
     if (empty($result)) {
         $this->assertEmpty($routeMatch, $method . ':' . $url . " should not match");
     } else {
         $this->assertNotEmpty($routeMatch, $method . ':' . $url . " should match");
         $this->assertInstanceOf('\\ReRoute\\RouteMatch', $routeMatch);
     }
 }
示例#3
0
 /**
  *
  */
 public function testIsMatched()
 {
     $urlTemplate = new UrlTemplate(['host' => 'example.com']);
     $this->assertTrue($urlTemplate->isMatched(RequestContextFactory::createFromUrl('http://example.com/', 'get')));
     $urlTemplate->setScheme('https');
     $this->assertFalse($urlTemplate->isMatched(RequestContextFactory::createFromUrl('http://example.com/', 'get')));
     $this->assertTrue($urlTemplate->isMatched(RequestContextFactory::createFromUrl('https://example.com/category/123/', 'get')));
     $urlTemplate->setPathTemplate('/category/{categoryId:[0-9]+:}/');
     $this->assertFalse($urlTemplate->isMatched(RequestContextFactory::createFromUrl('https://example.com/', 'get')));
     $this->assertTrue($urlTemplate->isMatched(RequestContextFactory::createFromUrl('https://example.com/category/123/', 'get')));
     $urlTemplate->setMethod('post');
     $this->assertFalse($urlTemplate->isMatched(RequestContextFactory::createFromUrl('https://example.com/', 'get')));
     $this->assertTrue($urlTemplate->isMatched(RequestContextFactory::createFromUrl('https://example.com/category/123/', 'post')));
 }
示例#4
0
 /**
  * 
  */
 public function testRoutesMatchTest()
 {
     $routeGroup = new RouteGroup();
     $routeGroup->addRoute(new FinalRoute('routeResult1', new UrlTemplate(['host' => 'example.com', 'path' => '/list/'])));
     $routeGroup->addRoute(new FinalRoute('routeResult2', new UrlTemplate(['host' => 'example.com'])));
     $routeGroup->addRoute(new FinalRoute('routeResult3', new UrlTemplate(['host' => 'example.ua', 'path' => '/list/'])));
     $routeMatch1 = $routeGroup->doMatch(RequestContextFactory::createFromUrl('http://example.com/list/'));
     $this->assertNotEmpty($routeMatch1);
     $this->assertEquals('routeResult1', $routeMatch1->getRouteResult());
     $routeMatch2 = $routeGroup->doMatch(RequestContextFactory::createFromUrl('http://example.com/'));
     $this->assertNotEmpty($routeMatch2);
     $this->assertEquals('routeResult2', $routeMatch2->getRouteResult());
     $routeMatch3 = $routeGroup->doMatch(RequestContextFactory::createFromUrl('http://example.ua/list/'));
     $this->assertNotEmpty($routeMatch3);
     $this->assertEquals('routeResult3', $routeMatch3->getRouteResult());
 }
示例#5
0
 /**
  *
  */
 public function testExtendRoute()
 {
     $router = new \ReRoute\Router();
     $siteRouteGroup = new SiteRouteGroup();
     $siteRouteGroup->addRoute(new FinalRoute('indexResult', new UrlTemplate(['path' => '/'])));
     $siteRouteGroup->addRoute(new FinalRoute('listResult', new UrlTemplate(['path' => '/list/'])));
     $router->addRoute($siteRouteGroup);
     $routeMatch = $router->doMatch(RequestContextFactory::createFromUrl('http://dev3.debug.m.site.ua/'));
     $this->assertEquals('site.ua', $routeMatch->get('_domain'));
     $this->assertTrue($routeMatch->get('_isMobile'));
     $this->assertEquals('dev3', $routeMatch->get('_devBranch'));
     $this->assertEquals('http://dev3.debug.m.site.ua/list/', $router->generateUrl('listResult'));
     $this->assertEquals('http://dev10.debug.m.site.ua/list/', $router->generateUrl('listResult', ['_devBranch' => 'dev10']));
     $this->assertEquals('http://dev3.debug.site.ua/list/', $router->generateUrl('listResult', ['_isMobile' => false]));
     $urlBuilder = $router->urlBuilder('indexResult');
     $urlBuilder->setParameter('_domain', 'site.com');
     $urlBuilder->setParameter('_isMobile', false);
     $urlBuilder->setParameter('_devBranch', false);
     $this->assertEquals('http://site.com/', $urlBuilder->assemble());
     $this->assertEquals('http://dev3.debug.m.site.ua/', $router->urlBuilder('indexResult')->assemble());
 }
示例#6
0
 /**
  *
  */
 public function testAdvancedModifiers()
 {
     $router = new Router();
     $siteRouteGroup = new RouteGroup(new UrlTemplate(['host' => 'site.com']));
     $siteRouteGroup->addModifier((new PrefixModifier())->setPrefix('/site/'));
     $siteMyRouteGroup = new RouteGroup();
     $siteMyRouteGroup->addModifier(new PrefixMyRouteModifier());
     $siteMyRouteGroup->addRoute(new FinalRoute('routeResult', new UrlTemplate(['path' => '/orders/'])));
     $siteRouteGroup->addRoute($siteMyRouteGroup);
     $router->addRoute($siteRouteGroup);
     $router->doMatch(RequestContextFactory::createFromUrl('http://site.com/site/my/orders/'));
     $this->assertEquals('http://site.com/site/my/orders/', $router->generateUrl('routeResult'));
 }
示例#7
0
 /**
  *
  */
 public function testComplexMatching()
 {
     $route = new TestRoute();
     $this->assertTrue($route->doMatch(RequestContextFactory::createFromUrl('http://example.com/')));
     $route->addModifier(new MobileHostRouteModifier());
     $this->assertTrue($route->doMatch(RequestContextFactory::createFromUrl('http://m.example.com/')));
     $route->setUrlTemplate(new UrlTemplate(['host' => 'example.net']));
     $this->assertFalse($route->doMatch(RequestContextFactory::createFromUrl('http://m.example.com/')));
     $route->setUrlTemplate(new UrlTemplate(['host' => 'example.com']));
     $this->assertTrue($route->doMatch(RequestContextFactory::createFromUrl('http://m.example.com/')));
 }
示例#8
0
 public function testFromRequestContet()
 {
     $requestContext = \ReRoute\Tests\Helper\RequestContextFactory::createFromUrl('https://example.com/somepath/?abc=1');
     $url = \ReRoute\Url::fromRequestContext($requestContext);
     $this->assertEquals('https://example.com/somepath/?abc=1', $url->getUrl());
 }
 /**
  * @expectedException \ReRoute\Exceptions\MatchNotFoundException
  */
 public function testFailMethod()
 {
     $this->getRouter()->doMatch(RequestContextFactory::createFromUrl('http://example.com/item/', 'get'));
 }
示例#10
0
 /**
  * @throws \ReRoute\Exceptions\MatchNotFoundException
  */
 public function testBuildAfterMatch()
 {
     $router = $this->getRouter();
     $router->doMatch(RequestContextFactory::createFromUrl('http://m.example.com/fr/'));
     $this->assertEquals('http://m.example.com/fr/', $router->getUrl('homepageResult')->assemble());
     $this->assertEquals('http://m.example.com/fr/items/123/', $router->getUrl('itemsResult')->setParameter('itemId', 123)->assemble());
     $this->assertEquals('http://m.example.com/items/123/', $router->getUrl('itemsResult')->setParameter('itemId', 123)->setParameter('lang', 'en')->assemble());
     $url = $router->getUrl('itemsResult')->setParameter('itemId', 123)->setParameter('lang', 'en')->setParameter('isMobile', false);
     $this->assertEquals('http://example.com/items/123/', $url->assemble());
     $this->assertEquals('http://example.com/items/123/', $url->assemble());
     $url->setParameter('isMobile', true);
     $this->assertEquals('http://m.example.com/items/123/', $url->assemble());
 }