use strict;
use warnings;
-use Cwd qw(cwd);
+use File::Spec;
use Test::More;
eval { require PerlIO::scalar };
$PLP::use_cache = 0 if $PLP::use_cache;
#TODO: caching on (change file names)
-my $base = -w '/tmp' ? '/tmp' : cwd();
+my $base = File::Spec->tmpdir || File::Spec->curdir;
+-w $base or BAIL_OUT("$base not writable");
my $testfile = 'testfile.plp';
not -f "$base/$testfile" or BAIL_OUT("$testfile exists");
-open ORGOUT, '>&', STDOUT;
+open ORGOUT, '>&', *STDOUT;
sub plp_is {
my ($test, $plp, $expect) = @_;
select ORGOUT; # return to original STDOUT
not $@ or fail($test), diag(" Error: $@"), return;
+ $output =~ s{((?:.+\n)*)}{ join "", sort split /(?<=\n)/, $1 }e; # order headers
is($output, $expect, $test);
}
); # Apache/2.2.4 CGI environment
my $HEAD = <<EOT; # common header output
-X-PLP-Version: $PLP::VERSION
Content-Type: text/html
+X-PLP-Version: $PLP::VERSION
EOT
plp_is('print', '0<: print print 2 :>3', "$HEAD\n0213");
plp_is('%get array', '<:= @{$get{q/@test/}}', "$HEAD\n12\n");
plp_is('%header',
- '<: $headers{x_test}=2; print $header{x_PLP_version}; BEGIN { $header{"X-tesT"}=1 }',
- "X-tesT: 2\n$HEAD\n$PLP::VERSION"
+ '<: $headers{_test}=2; print $header{x_PLP_version}; BEGIN { $header{"-tesT"}=1 }',
+ "-tesT: 2\n$HEAD\n$PLP::VERSION"
);
-plp_is('%header', '.<: BEGIN{$header{x}="1\n2"} $header{x}=3', <<TEST);
-${HEAD}x: 1
-x: 2
-
+plp_is('%header repetition', '.<: BEGIN{$header{A}="1\n2"} $header{A}=3', <<TEST);
+A: 1
+A: 2
+$HEAD
.<table border=1 class="PLPerror"><tr><td><b>Debug information:</b><br>Can't set headers after sending them at testfile.plp line 1.
(Output started at testfile.plp line 1.)
</td></tr></table>
</td></tr></table>
TEST
+SKIP: {
+
+my $INCFILE = File::Spec->rel2abs("$base/missinginclude");
+if (open my $dummy, "<", $INCFILE) { # like PLP::source will
+ fail("file missinginclude shouldn't exist");
+ skip("missinginclude tests", 2);
+}
+my $INCWARN = qq{Can't open "$INCFILE" ($!)};
+
plp_is('warnings', split /\n\n/, <<TEST, 2);
1
<: use warnings :>
warning at $testfile line 6.
4
-<table border=1 class="PLPerror"><tr><td><b>Debug information:</b><br>Can't open "$base/missinginclude" (No such file or directory) at $testfile line 8.
+<table border=1 class="PLPerror"><tr><td><b>Debug information:</b><br>$INCWARN at $testfile line 8.
</td></tr></table>
5
-<table border=1 class="PLPerror"><tr><td><b>Debug information:</b><br>Can't open "$base/missinginclude" (No such file or directory) at $testfile line 10.
+<table border=1 class="PLPerror"><tr><td><b>Debug information:</b><br>$INCWARN at $testfile line 10.
</td></tr></table>
TEST
plp_is('$PLP::ERROR',
'<: $PLP::ERROR = sub {print "Oh no: $_[0]"} :> <(missinginclude)>.',
- qq{$HEAD\n Oh no: Can't open "$base/missinginclude" (No such file or directory) at $testfile line 1.\n\n}
+ qq{$HEAD\n Oh no: $INCWARN at $testfile line 1.\n\n}
);
#TODO: 404
#TODO: 403
plp_is('$PLP::DEBUG',
- '<: $PLP::DEBUG = 2 :>1<(missinginclude)>2',
- "Content-Type: text/plain\n\n$HEAD\n1"
+ '<: $PLP::DEBUG = 2; delete $header{x_plp_version} :>1<(missinginclude)>2',
+ "Content-Type: text/plain\n\nContent-Type: text/html\n\n1"
);
+}
+
plp_is('utf8', '<: use open qw/:std :utf8/; print chr 191', <<TEST);
-X-PLP-Version: $PLP::VERSION
Content-Type: text/html; charset=utf-8
+X-PLP-Version: $PLP::VERSION
\302\277
TEST