File: unicode_plugin_nested_params.t

package info (click to toggle)
libcatalyst-perl 5.90124-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 2,992 kB
  • sloc: perl: 11,123; makefile: 7
file content (69 lines) | stat: -rw-r--r-- 2,287 bytes parent folder | download
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
59
60
61
62
63
64
65
66
67
68
69
use strict;
use warnings;
use Test::More;
use utf8;

# setup library path
use FindBin qw($Bin);
use lib "$Bin/../../t/lib";

BEGIN { eval { require Catalyst::Plugin::Params::Nested; 1; } ||
    plan skip_all => 'Need Catalyst::Plugin::Params::Nested' }

use Catalyst::Test 'TestApp2';
use Encode;
use HTTP::Request::Common;
use URI::Escape qw/uri_escape_utf8/;
use HTTP::Status 'is_server_error';

my $encode_str = "\x{e3}\x{81}\x{82}"; # e38182 is japanese 'あ'
my $decode_str = Encode::decode('utf-8' => $encode_str);
my $escape_str = uri_escape_utf8($decode_str);

BEGIN {
    eval 'require Catalyst::Plugin::Params::Nested';
    plan skip_all => 'Catalyst::Plugin::Params::Nested is required' if $@;
}

{
    my ($res, $c) = ctx_request("/?foo.1=bar&foo.2=$escape_str");
    is( $c->res->output, '<h1>It works</h1>', 'Content displayed' );

    my $got = $c->request->parameters;
    my $expected = {
        'foo.1' => 'bar',
        'foo.2' => $decode_str,
        'foo'   => [undef, 'bar', $decode_str],
    };

    is( $got->{foo}->[0], undef, '{foo}->[0] is undef' );
    is( $got->{foo}->[1], 'bar', '{foo}->[1] is bar' );
    ok( utf8::is_utf8( $got->{'foo.2'}       ), '{foo.2} is utf8' );
    ok( utf8::is_utf8( $got->{foo}->[2]      ), '{foo}->[2] is utf8' );
    is_deeply($got, $expected, 'nested params' );
}

{
    my ($res, $c) = ctx_request("/?foo.1=bar&foo.2=$escape_str&bar.baz=$escape_str&baz.bar.foo=$escape_str&&arr.0.1=$escape_str");

    my $got = $c->request->parameters;
    my $expected = {
        'foo.1'       => 'bar',
        'foo.2'       => $decode_str,
        'bar.baz'     => $decode_str,
        'baz.bar.foo' => $decode_str,
        'arr.0.1'     => $decode_str,
        'arr'         => [ [undef, $decode_str] ],
        'foo'         => [undef, 'bar', $decode_str],
        'bar'         => { baz => $decode_str },
        'baz'         => { bar => { foo => $decode_str } },
    };

    is( ref $got->{arr}->[0], 'ARRAY', '{arr}->[0] is ARRAY' );
    ok( utf8::is_utf8( $got->{arr}->[0]->[1] ), '{arr}->[0]->[1] is utf8' );
    ok( utf8::is_utf8( $got->{bar}{baz}      ), '{bar}{baz} is utf8' );
    ok( utf8::is_utf8( $got->{baz}{bar}{foo} ), '{baz}{bar}{foo} is utf8' );
    is_deeply($got, $expected, 'nested params' );
}

done_testing();