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 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
|
# -*- Mode: Perl; -*-
=head1 NAME
00_uri_encode.t - Test the uri_encode funcionality
=cut
use strict;
use Test::More tests => 104;
use_ok("Data::URIEncode", qw(flat_to_complex complex_to_flat query_to_complex complex_to_query));
my $data;
my $out;
$data = {
"foo:2" => "bar",
"foo:5" => "bing",
};
ok(($out = flat_to_complex($data)), 'Ran flat_to_complex');
ok($out->{"foo"}->[2] eq "bar", "foo.2");
ok($out->{"foo"}->[5] eq "bing", "foo.5");
ok(! defined $out->{"foo"}->[4], "foo.4");
ok(flat_to_complex({"foo" => "a"})->{"foo"} eq "a", "key: (foo)");
ok(flat_to_complex({"0" => "a"})->{"0"} eq "a", "key: (0)");
ok(flat_to_complex({"foo.bar.baz" => "a"})->{"foo"}{"bar"}{baz} eq "a", "key: (foo.bar.baz)");
ok(flat_to_complex({"foo:0" => "a"})->{"foo"}->[0] eq "a", "key: (foo:0)");
ok(flat_to_complex({"foo:0:2" => "a"})->{"foo"}->[0]->[2] eq "a", "key: (foo:0:2)");
ok(flat_to_complex({"foo.0" => "a"})->{"foo"}->{"0"} eq "a", "key: (foo.0)");
ok(flat_to_complex({"foo.0.2" => "a"})->{"foo"}->{"0"}{"2"} eq "a", "key: (foo.0.2)");
ok(flat_to_complex({"foo." => "a"})->{"foo"}->{""} eq "a", "key: (foo.)");
ok(flat_to_complex({"foo.''" => "a"})->{"foo"}->{""} eq "a", "key: (foo.'')");
ok(flat_to_complex({".foo" => "a"})->{"foo"} eq "a", "key: (.foo)");
ok(flat_to_complex({"''.foo" => "a"})->{""}->{"foo"} eq "a", "key: (''.foo)");
ok(flat_to_complex({"..foo" => "a"})->{""}->{"foo"} eq "a", "key: (..foo)");
ok(flat_to_complex({".''.foo" => "a"})->{""}->{"foo"} eq "a", "key: (.''.foo)");
ok(flat_to_complex({"foo..bar" => "a"})->{"foo"}{""}{"bar"} eq "a", "key: (foo..bar)");
ok(flat_to_complex({" " => "a"})->{" "} eq "a", "key: ( )");
ok(flat_to_complex({" . " => "a"})->{" "}->{" "} eq "a", "key: ( . )");
ok(flat_to_complex({" . . " => "a"})->{" "}->{" "}->{" "} eq "a", "key: ( . . )");
ok(flat_to_complex({"foo.'.'" => "a"})->{"foo"}->{"."} eq "a", "key: (foo.'.')");
ok(flat_to_complex({"'.'.foo" => "a"})->{"."}->{"foo"} eq "a", "key: ('.'.foo)");
ok(flat_to_complex({"'.'" => "a"})->{"."} eq "a", "key: ('.')");
ok(flat_to_complex({"'.'.'.'" => "a"})->{"."}->{"."} eq "a", "key: ('.'.'.')");
ok(flat_to_complex({"'.'.'.'.'.'" => "a"})->{"."}->{"."}->{"."} eq "a", "key: ('.'.'.'.'.')");
ok(flat_to_complex({"'\\'\\''" => "a"})->{"''"} eq "a", "key: ('\\'\\'')");
ok(flat_to_complex({"''" => "a"})->{""} eq "a", "key: ('')");
ok(flat_to_complex({"" => "a"})->{""} eq "a", "key: ()");
ok(flat_to_complex({":3" => "a"})->[3] eq "a", "key: (:3)");
ok(flat_to_complex({".foo" => "a"})->{"foo"} eq "a", "key: (.foo)");
ok(flat_to_complex({".foo.bar.baz" => "a"})->{"foo"}{"bar"}{baz} eq "a", "key: (.foo.bar.baz)");
ok(flat_to_complex({".foo:0" => "a"})->{"foo"}->[0] eq "a", "key: (.foo:0)");
ok(flat_to_complex({".foo:0:2" => "a"})->{"foo"}->[0]->[2] eq "a", "key: (.foo:0:2)");
ok(flat_to_complex({".foo.0" => "a"})->{"foo"}->{"0"} eq "a", "key: (.foo.0)");
ok(flat_to_complex({".foo.0.2" => "a"})->{"foo"}->{"0"}{"2"} eq "a", "key: (.foo.0.2)");
ok(flat_to_complex({".foo." => "a"})->{"foo"}->{""} eq "a", "key: (.foo.)");
ok(flat_to_complex({".''.foo" => "a"})->{""}->{"foo"} eq "a", "key: (.''.foo)");
ok(flat_to_complex({".foo..bar" => "a"})->{"foo"}{""}{"bar"} eq "a", "key: (.foo..bar)");
ok(flat_to_complex({". " => "a"})->{" "} eq "a", "key: (. )");
ok(flat_to_complex({". . " => "a"})->{" "}->{" "} eq "a", "key: (. . )");
ok(flat_to_complex({". . . " => "a"})->{" "}->{" "}->{" "} eq "a", "key: (. . . )");
ok(flat_to_complex({".foo.'.'" => "a"})->{"foo"}->{"."} eq "a", "key: (.foo.'.')");
ok(flat_to_complex({".'.'.foo" => "a"})->{"."}->{"foo"} eq "a", "key: (.'.'.foo)");
ok(flat_to_complex({"'.'.foo" => "a"})->{"."}->{"foo"} eq "a", "key: ('.'.foo)");
ok(flat_to_complex({".'.'" => "a"})->{"."} eq "a", "key: (.'.')");
ok(flat_to_complex({".'.'.'.'" => "a"})->{"."}->{"."} eq "a", "key: (.'.'.'.')");
ok(flat_to_complex({".'.'.'.'.'.'" => "a"})->{"."}->{"."}->{"."} eq "a", "key: (.'.'.'.'.'.')");
ok(flat_to_complex({".'\\'\\''" => "a"})->{"''"} eq "a", "key: (.'\\'\\'')");
ok(flat_to_complex({".'.:\\''" => "a"})->{".:'"} eq "a", "key: (.'.:\\'')");
ok(flat_to_complex({".''" => "a"})->{""} eq "a", "key: (.'')");
ok(flat_to_complex({"." => "a"})->{""} eq "a", "key: (.)");
ok(! eval { flat_to_complex({".1" => "a", ":1" => "a" }) }, "Can't coerce ($@)");
ok(! eval { flat_to_complex({"foo.1" => "a", "foo:1" => "a"}) }, "Can't coerce ($@)");
ok(! eval { flat_to_complex({"foo.1" => "a", "'foo':1"=>"a"}) }, "Can't coerce ($@)");
ok(! eval { flat_to_complex({"foo:10000" => "a"}) }, "Couldn't run - too big ($@)");
ok(! eval { flat_to_complex({"foo" => "a", "foo.a" => "a"}) }, "Couldn't run - overlap of keys ($@)");
ok(! eval { flat_to_complex({"foo:1" => "a", "foo:a" => "a"}) }, "Couldn't run - using a for index ($@)");
ok(! eval { flat_to_complex({"foo:a" => "a" }) }, "Couldn't run - using a for index ($@)");
ok(! eval { flat_to_complex({":a" => "a" }) }, "Couldn't run - using a for index ($@)");
ok(complex_to_flat({"foo" => "a" })->{"foo"} eq "a", "key: (foo)");
ok(complex_to_flat({"0" => "a" })->{"0"} eq "a", "key: (0)");
ok(complex_to_flat({"foo" => {"bar" => "a"} })->{"foo.bar"} eq "a", "key: (foo.bar)");
ok(complex_to_flat({"foo" => {bar=>{baz=>"a"}} })->{"foo.bar.baz"} eq "a", "key: (foo.bar.baz)");
ok(complex_to_flat({"foo" => ["a"] })->{"foo:0"} eq "a", "key: (foo:0)");
ok(complex_to_flat({"foo" => [[0,1,"a"]] })->{"foo:0:2"} eq "a", "key: (foo:0:2)");
ok(complex_to_flat({"foo" => {"0" => "a"} })->{"foo.0"} eq "a", "key: (foo.0)");
ok(complex_to_flat({"foo" => {"0"=>{"2"=>"a"}} })->{"foo.0.2"} eq "a", "key: (foo.0.2)");
ok(complex_to_flat({"foo" => {"" => "a"} })->{"foo.''"} eq "a", "key: (foo.'')");
ok(complex_to_flat({"" => {"foo" => "a"} })->{"''.foo"} eq "a", "key: (''.foo)");
ok(complex_to_flat({"foo" => {""=>{"bar"=>"a"}}})->{"foo.''.bar"} eq "a", "key: (foo.''.bar)");
ok(complex_to_flat({" " => "a" })->{" "} eq "a", "key: ( )");
ok(complex_to_flat({" " => {" " => "a"} })->{" . "} eq "a", "key: ( . )");
ok(complex_to_flat({" " => {" " =>{" "=>"a"}}})->{" . . "} eq "a", "key: ( . . )");
ok(complex_to_flat({"foo" => {"." => "a"} })->{"foo.'.'"} eq "a", "key: (foo.'.')");
ok(complex_to_flat({"." => {"foo" => "a"} })->{"'.'.foo"} eq "a", "key: ('.'.foo)");
ok(complex_to_flat({"." => "a" })->{"'.'"} eq "a", "key: ('.')");
ok(complex_to_flat({"." => {"." => "a"} })->{"'.'.'.'"} eq "a", "key: ('.'.'.')");
ok(complex_to_flat({"." => {"."=>{"."=> "a"}}})->{"'.'.'.'.'.'"} eq "a", "key: ('.'.'.'.'.')");
ok(complex_to_flat({"''" => "a" })->{"'\\'\\''"} eq "a", "key: ('\\'\\'')");
ok(complex_to_flat({"" => "a" })->{"''"} eq "a", "key: ('')");
ok(complex_to_flat([0, 1, 2, "a" ])->{":3"} eq "a", "key: (:3)");
Foo: {
local $Data::URIEncode::DUMP_BLESSED_DATA;
$Data::URIEncode::DUMP_BLESSED_DATA = 0;
ok(! eval { complex_to_flat(bless [], "main") }, 'Couldn"t flatten: ($@)');
ok(! eval { complex_to_flat(bless {}, "main") }, 'Couldn"t flatten: ($@)');
};
ok(! eval { complex_to_flat(sub {}) }, 'Couldn"t flatten: ($@)');
ok(! eval { complex_to_flat(undef) }, 'Couldn"t flatten: ($@)');
ok(! eval { complex_to_flat("undef") }, 'Couldn"t flatten: ($@)');
ok(complex_to_query(["a","b"]) eq ":0=a&:1=b", ":0=a&:1=b");
ok(complex_to_query({"a","b"}) eq "a=b", "a=b");
ok(complex_to_query({x => {y => ["a","b"], z => 1}}) eq "x.y:0=a&x.y:1=b&x.z=1", "x.y:0=a&x.y:1=b&x.z=1");
SKIP: {
skip('No CGI found', 9) if ! eval { require CGI };
ok(query_to_complex(":0=a&:1=b" )->[1] eq "b", "str: :0=a&:1=b");
ok(query_to_complex("a=b" )->{"a"} eq "b", "str: a=b");
ok(query_to_complex("x.y:0=a&x.y:1=b&x.z=1")->{"x"}->{"y"}->[1] eq "b", "str: x.y:0=a&x.y:1=b&x.z=1");
ok(query_to_complex(\ ":0=a&:1=b" )->[1] eq "b", "str ref: :0=a&:1=b");
ok(query_to_complex(\ "a=b" )->{"a"} eq "b", "str ref: a=b");
ok(query_to_complex(\ "x.y:0=a&x.y:1=b&x.z=1")->{"x"}->{"y"}->[1] eq "b", "str ref: x.y:0=a&x.y:1=b&x.z=1");
ok(query_to_complex(CGI->new(\ ":0=a&:1=b" ))->[1] eq "b", "CGI->new: :0=a&:1=b");
ok(query_to_complex(CGI->new(\ "a=b" ))->{"a"} eq "b", "CGI->new: a=b");
ok(query_to_complex(CGI->new(\ "x.y:0=a&x.y:1=b&x.z=1"))->{"x"}->{"y"}->[1] eq "b", "CGI->new: x.y:0=a&x.y:1=b&x.z=1");
};
ok(query_to_complex({":0" => "a", ":1" => "b"} )->[1] eq "b", "hashref: :0=a&:1=b");
ok(query_to_complex({"a" => "b"} )->{"a"} eq "b", "hashref: a=b");
ok(query_to_complex({"x.y:0" =>"a", "x.y:1" => "b", "x.z" => "1"})->{"x"}->{"y"}->[1] eq "b", "hashref: x.y:0=a&x.y:1=b&x.z=1");
ok(! eval { query_to_complex([]) }, 'Blew up - not a known type to deal with');
|