1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
use strict;
use Test::More;
use Plack::Test;
use Plack::Builder;
my @json = ('{"foo":', '"bar"}');
my $json = join '', @json;
my @tests = (
{
callback_key => 'json.p',
app => sub {
return [ 200, [ 'Content-Type' => 'application/json' ], [@json] ];
},
},
{
app => sub {
return sub {
my $respond = shift;
$respond->(
[ 200, [ 'Content-Type' => 'application/json' ], [$json] ]
);
};
},
}
);
for my $test ( @tests ) {
my $app = $test->{app};
if ( exists $test->{callback_key} ) {
$app = builder {
enable "Plack::Middleware::JSONP", callback_key => $test->{callback_key};
$app;
};
}
else {
$app = builder {
enable "Plack::Middleware::JSONP";
$app;
};
}
my $callback_key = $test->{callback_key} || 'callback';
test_psgi app => $app, client => sub {
my $cb = shift;
my $res = $cb->(HTTP::Request->new(GET => 'http://localhost/'));
is $res->content_type, 'application/json';
is $res->content, $json;
$res = $cb->(HTTP::Request->new(GET => 'http://localhost/?'.$callback_key.'=foo'));
is $res->content_type, 'text/javascript';
is $res->content, "foo($json)";
};
}
done_testing;
|