File: jsonp.t

package info (click to toggle)
libplack-perl 0.9989-1%2Bdeb7u1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 1,556 kB
  • sloc: perl: 6,890; python: 6; makefile: 2
file content (58 lines) | stat: -rw-r--r-- 1,414 bytes parent folder | download | duplicates (2)
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;