register('laravel.routing.caller', function($c) { return new \Laravel\Routing\Caller($c, require TEST_BASE_PATH.'filters'.EXT, CONTROLLER_PATH); }); IoC::container()->register('laravel.routing.loader', function($c) { return new \Laravel\Routing\Loader(TEST_BASE_PATH,TEST_BASE_PATH . 'routes/'); }, true); } protected function setUp() { $_POST = array(); unset($_SERVER['REQUEST_URI'], $_SERVER['REQUEST_METHOD']); } /** * tests * GET /test/wildcard/(:num)/(:any) * GET /test/optwildcard/(:any+) */ public function testWildCards() { $response = $this->processRoute('/test/wildcard/123456/joe'); $this->assertEquals($response->content, '123456/joe'); $response = $this->processRoute('/test/wildcard/123456'); $this->assertEquals($response->content->view, 'error/404'); $response = $this->processRoute('/test/wildcard/abc123'); $this->assertEquals($response->content, 'abc123'); $response = $this->processRoute('/test/optwildcard/foo'); $this->assertEquals($response->content, 'foo'); $response = $this->processRoute('/test/optwildcard'); $this->assertEquals($response->content, ''); } /** * tests GET /test/direct */ public function testDirect() { $response = $this->processRoute('/test/direct'); $this->assertEquals($response->content, 'direct'); $response = $this->processRoute('/test/doesnt/exist'); $this->assertEquals($response->content->view, 'error/404'); } /** * tests GET /test/multi and GET /test/altmulti * both routes are the same */ public function testMultiRoutes() { $response = $this->processRoute('/test/multi'); $this->assertEquals($response->content, 'multi test'); $response = $this->processRoute('/test/altmulti'); $this->assertEquals($response->content, 'multi test'); } /** * tests post */ public function testPost() { $response = $this->processRoute('/test/postrequest', 'POST'); $this->assertEquals($response->content, 'POST request'); } /** * tests route spoofing */ public function testSpoofing() { $_POST['__spoofer'] = 'PUT'; $response = $this->processRoute('/test/putrequest'); $this->assertEquals($response->content, 'PUT request'); } /** * tests filters */ public function testFilters() { $response = $this->processRoute('/test/filter/before'); $this->assertEquals($response->content, 'filtered before'); $response = $this->processRoute('/test/filter/after'); $this->assertEquals($response->content, 'filtered after'); $response = $this->processRoute('/test/filter/multi'); $this->assertEquals($response->content, 'filtered after filtered after2'); } private function processRoute($uri, $method = 'GET') { $_SERVER['REQUEST_URI'] = $uri; $_SERVER['REQUEST_METHOD'] = $method; // not using container resolve because it is a singleton and that makes it so we can't change $_SERVER $request = new \Laravel\Request(new \Laravel\URI($_SERVER), $_SERVER, $_POST); $router = IoC::container()->resolve('laravel.routing.router'); list($method, $uri) = array($request->method(), $request->uri()); $route = $router->route($request, $method, $uri); if ( ! is_null($route)) { $response = IoC::container()->resolve('laravel.routing.caller')->call($route); } else { $response = Response::error('404'); } return $response; } }