X-Git-Url: http://git.shiar.net/perl/plp/.git/blobdiff_plain/0f7b5b7aeb4d224aa1de019d5c8815669f5b0dec..fe22802045bae19ea53858a20b4752eb9e9bcac8:/lib/Test/PLP.pm diff --git a/lib/Test/PLP.pm b/lib/Test/PLP.pm index c030742..519faca 100644 --- a/lib/Test/PLP.pm +++ b/lib/Test/PLP.pm @@ -41,7 +41,7 @@ eval { } or 1; sub _plp_run { - my ($src, $env, $in) = @_; + my ($src, $env, $input) = @_; %ENV = ( REQUEST_METHOD => 'GET', @@ -58,11 +58,11 @@ sub _plp_run { $env ? %{$env} : (), ); # Apache/2.2.4 CGI environment - if (defined $in) { - $ENV{CONTENT_LENGTH} //= length $in; + if (defined $input) { + $ENV{CONTENT_LENGTH} //= length $input; $ENV{CONTENT_TYPE} //= 'application/x-www-form-urlencoded'; close STDIN; - open STDIN, '<', $in; + open STDIN, '<', $input; } close STDOUT; @@ -79,23 +79,30 @@ sub _plp_run { }; my $failure = $@; select ORGOUT; # return to original STDOUT + die $failure if $failure; - return ($output, $failure); + return $output; } sub plp_is { - my ($name, $src, $expect, $env, $in) = @_; + my ($src, $env, $input, $expect, $name) = @_; my $tb = __PACKAGE__->builder; local $Test::Builder::Level = $Test::Builder::Level + 1; - my ($output, $failure) = _plp_run($src, $env, $in); - if ($failure) { + my $output = eval { _plp_run($src, $env, $input) }; + if (my $failure = $@) { $tb->ok(0, $name); $tb->diag(" Error: $failure"); return; } - $output =~ s{((?:.+\n)*)}{ join "", sort split /(?<=\n)/, $1 }e; # order headers - is_string($output, $expect, $name); + + if (defined $expect) { + $output =~ s{((?:.+\n)*)}{ join "", sort split /(?<=\n)/, $1 }e; # order headers + return is_string($output, $expect, $name); + } + + $tb->ok(defined $output, $name); + return $output; } sub _getwarning { @@ -110,41 +117,43 @@ sub _getwarning { return $res; } -sub plp_ok { +sub _getplp { my ($file, %replace) = @_; - my $tb = __PACKAGE__->builder; - local $Test::Builder::Level = $Test::Builder::Level + 1; (my $name = $file) =~ s/[.][^.]+$//; $file = "$name.html"; - my $infile = delete $replace{-input} // "$name.plp"; - my $addin = -e "$name.txt" && "$name.txt"; + my $src = delete $replace{-input} // "$name.plp"; + my $input = -e "$name.txt" && "$name.txt"; $name =~ s/^(\d*)-// and $name .= " ($1)"; DecodeURI($name); - my $out = eval { + my $env = delete $replace{-env}; + + my $output; + if (open my $fh, '<', $file) { local $/ = undef; # slurp - open my $fh, '<', $file or die "$!\n"; - return readline $fh; - }; - if (not defined $out) { - $tb->ok(0, $name); - $tb->diag("error reading output from $file: $@"); - return; + $output = readline $fh; + close $fh; } - my $env = delete $replace{-env}; - $replace{HEAD} //= "Content-Type: text/html\nX-PLP-Version: $PLP::VERSION\n"; - $replace{VERSION } //= $PLP::VERSION; - $replace{SCRIPT_NAME } //= $infile; - $replace{SCRIPT_FILENAME} //= "./$infile"; - - chomp $out; - $out =~ s/\$$_/$replace{$_}/g for keys %replace; - $out =~ s{ - (.*?) - }{ _getwarning($2, $1, $infile) }msxge; - - plp_is($name, $infile, $out, $env, $addin); + if ($output) { + $replace{HEAD} //= "Content-Type: text/html\nX-PLP-Version: $PLP::VERSION\n"; + $replace{VERSION } //= $PLP::VERSION; + $replace{SCRIPT_NAME } //= $src; + $replace{SCRIPT_FILENAME} //= "./$src"; + + chomp $output; + $output =~ s/\$$_/$replace{$_}/g for keys %replace; + $output =~ s{ + (.*?) + }{ _getwarning($2, $1, $src) }msxge; + } + + return ($src, $env, $input, $output, $name); +} + +sub plp_ok { + local $Test::Builder::Level = $Test::Builder::Level + 1; + plp_is(_getplp(@_)); }