X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fdispatch_parser.t;h=a001b4195c0d361220ead78437730305a986e903;hb=a5917caa09171b2db73a60a458368f22ecbbeeeb;hp=28da3b81ec0d3d0776117c4c53ebb9f2bca668ed;hpb=da8429c93d5e013a72456da945681cb2a84aaf80;p=catagits%2FWeb-Simple.git diff --git a/t/dispatch_parser.t b/t/dispatch_parser.t index 28da3b8..a001b41 100644 --- a/t/dispatch_parser.t +++ b/t/dispatch_parser.t @@ -220,3 +220,53 @@ is_deeply( [], '/foo/*/... does not match /foo/1 (no trailing /)' ); + +my $q = 'foo=FOO&bar=BAR1&baz=one+two&quux=QUUX1&quux=QUUX2' + .'&bar=BAR2&quux=QUUX3&evil=%2F'; + +my %all_single = ( + foo => 'FOO', + bar => 'BAR2', + baz => 'one two', + quux => 'QUUX3', + evil => '/', +); + +my %all_multi = ( + foo => [ 'FOO' ], + bar => [ qw(BAR1 BAR2) ], + baz => [ 'one two' ], + quux => [ qw(QUUX1 QUUX2 QUUX3) ], + evil => [ '/' ], +); + +my $foo = $dp->parse_dispatch_specification('?foo='); + +is_deeply( + [ $foo->({ QUERY_STRING => '' }) ], + [], + '?foo= fails with no query' +); + +foreach my $win ( + [ '?foo=' => { foo => 'FOO' } ], + [ '?spoo~' => { } ], + [ '?@spoo~' => { spoo => [] } ], + [ '?bar=' => { bar => 'BAR2' } ], + [ '?@bar=' => { bar => [ qw(BAR1 BAR2) ] } ], + [ '?foo=&@bar=' => { foo => 'FOO', bar => [ qw(BAR1 BAR2) ] } ], + [ '?baz=&evil=' => { baz => 'one two', evil => '/' } ], + [ '?*' => \%all_single ], + [ '?@*' => \%all_multi ], + [ '?foo=&@*' => { %all_multi, foo => 'FOO' } ], + [ '?@bar=&*' => { %all_single, bar => [ qw(BAR1 BAR2) ] } ], +) { + my ($spec, $res) = @$win; + my $match = $dp->parse_dispatch_specification($spec); +#use Data::Dump::Streamer; warn Dump($match); + is_deeply( + [ $match->({ QUERY_STRING => $q }) ], + [ {}, $res ], + "${spec} matches correctly" + ); +}