From: Mischa POSLAWSKY Date: Mon, 20 Feb 2012 07:57:31 +0000 (+0100) Subject: t/50-cgi: %post data parse tests X-Git-Tag: 3.24~9 X-Git-Url: http://git.shiar.net/perl/plp/.git/commitdiff_plain/f68c371e4a046df0602f2e27997d311b76ea66ac t/50-cgi: %post data parse tests Test user input handling by optionally reading from matching *.txt files. --- diff --git a/t/50-cgi.t b/t/50-cgi.t index 6b0661a..f58566f 100644 --- a/t/50-cgi.t +++ b/t/50-cgi.t @@ -23,7 +23,7 @@ eval { eval { require PerlIO::scalar }; plan skip_all => "PerlIO required (perl 5.8) to test PLP" if $@; -plan tests => 21; +plan tests => 24; require_ok('PLP::Backend::CGI') or BAIL_OUT(); @@ -36,7 +36,7 @@ my $ORGDIR = Cwd::getcwd(); open ORGOUT, '>&', *STDOUT; sub plp_is { - my ($test, $src, $expect, $env) = @_; + my ($test, $src, $expect, $env, $in) = @_; local $Test::Builder::Level = $Test::Builder::Level + 1; %ENV = ( @@ -54,6 +54,13 @@ sub plp_is { $env ? %{$env} : (), ); # Apache/2.2.4 CGI environment + if (defined $in) { + $ENV{CONTENT_LENGTH} = length $in; + $ENV{CONTENT_TYPE} = 'application/x-www-form-urlencoded'; + close STDIN; + open STDIN, '<', $in; + } + close STDOUT; open STDOUT, '>', \my $output; # STDOUT buffered to scalar select STDOUT; # output before start() (which selects PLPOUT) @@ -96,6 +103,7 @@ sub plp_ok { (my $name = $file) =~ s/[.][^.]+$//; $file = "$name.html"; my $infile = delete $replace{-input} // "$name.plp"; + my $addin = -e "$name.txt" && "$name.txt"; $name =~ s/^(\d*)-// and $name .= " ($1)"; my $out = eval { @@ -121,7 +129,7 @@ sub plp_ok { (.*?) }{ getwarning($2, $1, $infile) }msxge; - plp_is($name, $infile, $out, $env); + plp_is($name, $infile, $out, $env, $addin); } # 0*: permission checks using generated dummy files @@ -169,7 +177,6 @@ SKIP: { # 4*-7*: apache environment (default) plp_ok($_) for glob '[4-7]*.html'; -#TODO: %post #TODO: %fields #TODO: %cookie diff --git a/t/50-cgi/60-empty %post.html b/t/50-cgi/60-empty %post.html new file mode 100644 index 0000000..713860d --- /dev/null +++ b/t/50-cgi/60-empty %post.html @@ -0,0 +1,3 @@ +$HEAD +PLPdummy +0 diff --git a/t/50-cgi/60-empty %post.plp b/t/50-cgi/60-empty %post.plp new file mode 100644 index 0000000..8dc76c4 --- /dev/null +++ b/t/50-cgi/60-empty %post.plp @@ -0,0 +1,3 @@ +<: +print join "\n", %post; # expect dummy key on first access +print scalar keys %post; # empty now diff --git a/t/50-cgi/61-%post set.html b/t/50-cgi/61-%post set.html new file mode 100644 index 0000000..33727f2 --- /dev/null +++ b/t/50-cgi/61-%post set.html @@ -0,0 +1,4 @@ +$HEAD +ok + +1 diff --git a/t/50-cgi/61-%post set.plp b/t/50-cgi/61-%post set.plp new file mode 100644 index 0000000..147d6c4 --- /dev/null +++ b/t/50-cgi/61-%post set.plp @@ -0,0 +1,4 @@ +<: +%post = (Foo => 'ok'); +print join "\n", @post{'Foo', 'foo', '@Foo'}; +print scalar keys %post; diff --git a/t/50-cgi/62-%post data.html b/t/50-cgi/62-%post data.html new file mode 100644 index 0000000..3ca132a --- /dev/null +++ b/t/50-cgi/62-%post data.html @@ -0,0 +1,2 @@ +$HEAD +3{'foo' => 'b a r','@foo' => ['','b a r']} diff --git a/t/50-cgi/62-%post data.plp b/t/50-cgi/62-%post data.plp new file mode 100644 index 0000000..1fc42b5 --- /dev/null +++ b/t/50-cgi/62-%post data.plp @@ -0,0 +1,5 @@ +<: +print scalar keys %post; + +require Data::Dumper; +print Data::Dumper->new([\%post])->Indent(0)->Terse(1)->Dump; diff --git a/t/50-cgi/62-%post data.txt b/t/50-cgi/62-%post data.txt new file mode 100644 index 0000000..82ccf07 --- /dev/null +++ b/t/50-cgi/62-%post data.txt @@ -0,0 +1 @@ +foo=&foo=b+a%20r \ No newline at end of file