use Dancer ':syntax';
use Dancer::Test;
use Test::More 'tests' => 8, import => ['!pass'];
use Dancer::Route;
my $r = Dancer::Route->new(
method => 'get',
pattern => '/:var',
code => sub {
params->{'var'};
},
);
isa_ok $r => 'Dancer::Route';
is $r->method => 'get', "method is 'get'";
is $r->pattern => '/:var', "pattern is '/:var'";
my $req = Dancer::Request->new_for_request(GET => '/42');
my $expected_match = { var => 42 };
my $match = $r->match($req);
is_deeply $match => $expected_match, "route matched GET /42";
$r->match_data($match);
Dancer::SharedData->request($req);
my $response = $r->run($req);
is $response->{content} => 42, "response looks good";
my $r2 = Dancer::Route->new(method => 'get',
pattern => '/pass/:var',
code => sub { pass;
# The next line is not executed, as 'pass' breaks the route workflow
die },
prev => $r);
my $r3 = Dancer::Route->new(method => 'get',
pattern => '/other/path',
code => sub { "this is r3" },
prev => $r2);
my $r4 = Dancer::Route->new(method => 'get',
pattern => '/pass/:var',
code => sub { "this is r4" },
prev => $r3);
$req = Dancer::Request->new_for_request(GET => '/pass/42');
$expected_match = { var => 42 };
$match = $r2->match($req);
is_deeply $match => $expected_match, "route matched GET /42";
$r2->match_data($match);
Dancer::SharedData->request($req);
$r2->run($req);
$response = Dancer::SharedData->response;
is $response->{content} => 'this is r4',
"route 2 passed, r3 skipped (dont match), r4 served the response";
setting 'public' => 't/03_route_handler/public';
my $r5 = Dancer::Route->new(
method => 'get',
pattern => '/error',
code => sub { send_error( "no", 404 ) }
);
$req = Dancer::Request->new_for_request( GET => '/error' );
my $res = $r5->run($req);
is( ( grep { /Content-Type/ } @{ $res->headers_to_array } ),
1, 'only one content-type' );