[ExceptionHandlerFirst::class, ExceptionHandlerSecond::class]], function () use ($stack) { TestRouter::group(['exceptionHandler' => ExceptionHandlerThird::class], function () use ($stack) { TestRouter::get('/my-path', 'DummyController@method1'); }); }); try { TestRouter::debug('/my-non-existing-path', 'get'); } catch (\ResponseException $e) { } $expectedStack = [ ExceptionHandlerFirst::class, ExceptionHandlerSecond::class, ExceptionHandlerThird::class, ]; $this->assertEquals($expectedStack, $stack); } public function testRewriteExceptionMessage() { $this->setExpectedException(\Pecee\SimpleRouter\Exceptions\NotFoundHttpException::class); TestRouter::error(function (\Pecee\Http\Request $request, \Exception $error) { if (strtolower($request->getUrl()->getPath()) === '/my/test/') { $request->setRewriteUrl('/another-non-existing'); } }); TestRouter::debug('/my/test', 'get'); } public function testRewriteUrlFromRoute() { TestRouter::get('/old', function () { TestRouter::request()->setRewriteUrl('/new'); }); TestRouter::get('/new', function () { echo 'ok'; }); TestRouter::get('/new1', function () { echo 'ok'; }); TestRouter::get('/new2', function () { echo 'ok'; }); $output = TestRouter::debugOutput('/old'); $this->assertEquals('ok', $output); } public function testRewriteCallbackFromRoute() { TestRouter::get('/old', function () { TestRouter::request()->setRewriteUrl('/new'); }); TestRouter::get('/new', function () { return 'ok'; }); TestRouter::get('/new1', function () { return 'fail'; }); TestRouter::get('/new/2', function () { return 'fail'; }); $output = TestRouter::debugOutput('/old'); TestRouter::router()->reset(); $this->assertEquals('ok', $output); } public function testRewriteRouteFromRoute() { TestRouter::get('/match', function () { TestRouter::request()->setRewriteRoute(new \Pecee\SimpleRouter\Route\RouteUrl('/match', function () { return 'ok'; })); }); TestRouter::get('/old1', function () { return 'fail'; }); TestRouter::get('/old/2', function () { return 'fail'; }); TestRouter::get('/new2', function () { return 'fail'; }); $output = TestRouter::debugOutput('/match'); TestRouter::router()->reset(); $this->assertEquals('ok', $output); } public function testMiddlewareRewrite() { TestRouter::group(['middleware' => 'RewriteMiddleware'], function () { TestRouter::get('/', function () { return 'fail'; }); TestRouter::get('no/match', function () { return 'fail'; }); }); $output = TestRouter::debugOutput('/'); $this->assertEquals('ok', $output); } }