Exemplo n.º 1
0
 /**
  * This tests that routes with required parameters will not match uris without them present
  * 
  * @test
  * @covers Route
  */
 function testRequiredParametersAreNeeded()
 {
     $route = new Route('admin(/<controller>(/<action>(/<id>)))');
     $this->assertFalse($route->matches(''));
     $matches = $route->matches('admin');
     $this->assertType('array', $matches);
     $matches = $route->matches('admin/users/add');
     $this->assertType('array', $matches);
     $this->assertSame(2, count($matches));
     $this->assertArrayHasKey('controller', $matches);
     $this->assertArrayHasKey('action', $matches);
 }
Exemplo n.º 2
0
 public function matches($data)
 {
     if (parent::matches($data)) {
         if ($data->request->method() === $this->method) {
             return true;
         } else {
             $data->available_methods[] = $this->method;
         }
     }
     return false;
 }
Exemplo n.º 3
0
 private static function getParametersName()
 {
     $arr = [];
     preg_match_all('#{[\\w]+?}#', self::$route, $matches);
     if (count($matches) == 0) {
         return self::$matches = [];
     }
     foreach ($matches[0] as $match) {
         $arr[] = str_replace(' ', '', trim(trim($match, '{'), '}'));
     }
     return self::$matches = $arr;
 }
 /**
  * This tests that routes with required parameters will not match uris without them present
  *
  * @dataProvider provider_required_parameters_are_needed
  *
  * @test
  * @covers Route::matches
  */
 public function test_required_parameters_are_needed($uri, $matches_route1, $matches_route2)
 {
     $route = new Route($uri);
     // Mock a request class that will return empty uri
     $request = $this->get_request_mock('');
     $this->assertFalse($route->matches($request));
     // Mock a request class that will return route1
     $request = $this->get_request_mock($matches_route1);
     $matches = $route->matches($request);
     $this->assertInternalType('array', $matches);
     // Mock a request class that will return route2 uri
     $request = $this->get_request_mock($matches_route2);
     $matches = $route->matches($request);
     $this->assertInternalType('array', $matches);
     // $this->assertSame(5, count($matches));
     $this->assertArrayHasKey('controller', $matches);
     $this->assertArrayHasKey('action', $matches);
 }
Exemplo n.º 5
0
 /**
  *
  */
 private function addStaticRoute($routeData, Route $route)
 {
     $handler = $route->getHandler();
     $routeStr = $routeData[0];
     foreach ($route->getMethod() as $method) {
         if (isset($this->staticRoutes[$method][$routeStr])) {
             throw new Exception("Cannot register two routes matching \"{$routeStr}\" for method \"{$method}\"");
         }
         if (isset($this->dynamicRoutes[$method])) {
             foreach ($this->dynamicRoutes[$method] as $route) {
                 if ($route->matches($routeStr)) {
                     throw new Exception("Static route \"{$routeStr}\" is shadowed by previously defined variable route \"{$route->getPath()}\" for method \"{$method}\"");
                 }
             }
         }
         $this->staticRoutes[$method][$routeStr] = $handler;
     }
 }
Exemplo n.º 6
0
 /**
  * This tests that routes with required parameters will not match uris without them present
  *
  * @dataProvider provider_required_parameters_are_needed
  *
  * @test
  * @covers Route::matches
  */
 public function test_required_parameters_are_needed($uri, $matches_route1, $matches_route2)
 {
     $route = new Route($uri);
     $this->assertFalse($route->matches(''));
     $matches = $route->matches($matches_route1);
     $this->assertInternalType('array', $matches);
     $matches = $route->matches($matches_route2);
     $this->assertInternalType('array', $matches);
     // $this->assertSame(5, count($matches));
     $this->assertArrayHasKey('controller', $matches);
     $this->assertArrayHasKey('action', $matches);
 }
Exemplo n.º 7
0
 public function testRouteMatchesResourceWithUnreservedMarks()
 {
     $marks = "-_.!~*'()";
     $resource = 'marks/' . $marks;
     $route = new Route('/marks/:marks', function () {
     });
     $result = $route->matches($resource);
     $this->assertTrue($result);
     $this->assertEquals($route->params(), array('marks' => $marks));
 }
Exemplo n.º 8
0
 /**
  * This tests that routes with required parameters will not match uris without them present
  *
  * @dataProvider provider_required_parameters_are_needed
  *
  * @test
  * @covers Route::matches
  */
 public function test_required_parameters_are_needed($uri, $matches_route1, $matches_route2)
 {
     $route = new Route($uri);
     // Mock a request class that will return empty uri
     $request = $this->getMock('Request', array('uri'), array(''));
     $request->expects($this->any())->method('uri')->will($this->returnValue(''));
     $this->assertFalse($route->matches($request));
     // Mock a request class that will return route1
     $request = $this->getMock('Request', array('uri'), array($matches_route1));
     $request->expects($this->any())->method('uri')->will($this->returnValue($matches_route1));
     $matches = $route->matches($request);
     $this->assertInternalType('array', $matches);
     // Mock a request class that will return route2 uri
     $request = $this->getMock('Request', array('uri'), array($matches_route2));
     $request->expects($this->any())->method('uri')->will($this->returnValue($matches_route2));
     $matches = $route->matches($request);
     $this->assertInternalType('array', $matches);
     // $this->assertSame(5, count($matches));
     $this->assertArrayHasKey('controller', $matches);
     $this->assertArrayHasKey('action', $matches);
 }
Exemplo n.º 9
0
 /**
  * Route does not match URI with conditions
  */
 public function testRouteDoesNotMatchResourceWithConditions()
 {
     $resource = 'hello/Josh/and/John';
     $route = new Route('/hello/:first/and/:second', function () {
     });
     $route->conditions(array('first' => '[a-z]{3,}'));
     $result = $route->matches($resource);
     $this->assertFalse($result);
     $this->assertEquals($route->params(), array());
 }
Exemplo n.º 10
0
 public function testMatchesWithoutHttpMethodShouldReturnFalseForNonMatchingPaths()
 {
     $route = new Route('GET', '/test', function () {
     });
     $request = Request::create(false, 'localhost', '/unknown-route', null, 'POST');
     $this->assertFalse($route->matches($request));
     $this->assertFalse($route->matchesWithoutHttpMethod($request));
 }