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;