/** * 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); }
public function matches($data) { if (parent::matches($data)) { if ($data->request->method() === $this->method) { return true; } else { $data->available_methods[] = $this->method; } } return false; }
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); }
/** * */ 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; } }
/** * 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); }
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)); }
/** * 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); }
/** * 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()); }
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)); }