X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fjaph%2Fabigail.t;h=9981502608769ca17f1367c8633d69731cba78a0;hb=d2a0f284b32a9deb0ebffbb06cf667a0ea1ea610;hp=b4c4c8d1596e7157d24539b973e09ac49fc21713;hpb=760807ca899e05b0dc1f0587134d12343e864983;p=p5sagit%2Fp5-mst-13.2.git diff --git a/t/japh/abigail.t b/t/japh/abigail.t index b4c4c8d..9981502 100644 --- a/t/japh/abigail.t +++ b/t/japh/abigail.t @@ -3,6 +3,25 @@ # # Tests derived from Japhs. # +# These test use obscure features of Perl, or surprising combinations +# of features. The tests were added because in the past, they have +# exposed several bugs in Perl. +# +# Some of these tests may actually (mis)use bugs or use undefined behaviour. +# These tests are still useful - behavioural changes or bugfixes will be +# noted, and a remark can be put in the documentation. (Don't forget to +# disable the test!) +# +# Getting everything to run well on the myriad of platforms Perl runs on +# is unfortunately not a trivial task. +# +# WARNING: these tests are obfuscated. Do not get frustrated. +# Ask Abigail , or use the Deparse or Concise +# modules (the former parses Perl to Perl, the latter shows the +# op syntax tree) like this: +# ./perl -Ilib -MO=Deparse foo.pl +# ./perl -Ilib -MO=Concise foo.pl +# BEGIN { if (ord("A") == 193) { @@ -15,6 +34,8 @@ BEGIN { undef &skip; } +skip_all "Unhappy on MacOS" if $^O eq 'MacOS'; + # # ./test.pl does real evilness by jumping to a label. # This function copies the skip from ./test, omitting the goto. @@ -121,7 +142,7 @@ plan tests => 130; { my $datafile = "datatmp000"; 1 while -f ++ $datafile; - END {unlink_all $datafile} + END {unlink_all $datafile if $datafile} open MY_DATA, "> $datafile" or die "Failed to open $datafile: $!"; print MY_DATA << " --"; @@ -201,24 +222,24 @@ plan tests => 130; { my $progfile = "progtmp000"; 1 while -f ++ $progfile; - END {unlink_all $progfile} + END {unlink_all $progfile if $progfile} my @programs = (<< ' --', << ' --'); -#!./perl -- # No trailing newline after the last line! +#!./perl BEGIN{$|=$SIG{__WARN__}=sub{$_=$_[0];y-_- -;print/(.)"$/;seek _,-open(_ ,"+<$0"),2;truncate _,tell _;close _;exec$0}}//rekcaH_lreP_rehtona_tsuJ -- -#!./perl -- # Remove trailing newline! +#!./perl BEGIN{$SIG{__WARN__}=sub{$_=pop;y-_- -;print/".*(.)"/; truncate$0,-1+-s$0;exec$0;}}//rekcaH_lreP_rehtona_tsuJ -- chomp @programs; - if ($^O eq 'VMS') { + if ($^O eq 'VMS' or $^O eq 'MSWin32') { # VMS needs extensions for files to be executable, # but the Japhs above rely on $0 being exactly the # filename of the program. - skip "VMS", 2 * @programs; + skip $^O, 2 * @programs; last } @@ -397,7 +418,7 @@ EXPECT: 6 SWITCHES -Mstrict='}); print "Just another Perl Hacker"; ({' -l -SKIP_OS: VMS +SKIP: No longer works in 5.8.2 and beyond. MSWin32 NetWare @@ -456,27 +477,32 @@ SKIP: Abuses a fixed bug. ####### Prototype fun 2 print prototype sub "Just another Perl Hacker" {}; +SKIP: Abuses a fixed bug. ####### Prototype fun 3 sub _ "Just another Perl Hacker"; print prototype \&_ +SKIP: Abuses a fixed bug. ####### Split 1 split // => '"'; ${"@_"} = "/"; split // => eval join "+" => 1 .. 7; *{"@_"} = sub {foreach (sort keys %_) {print "$_ $_{$_} "}}; %{"@_"} = %_ = (Just => another => Perl => Hacker); &{%{%_}}; +SKIP: Hashes are now randomized. EXPECT: $JaPH_s ####### Split 2 $" = "/"; split // => eval join "+" => 1 .. 7; *{"@_"} = sub {foreach (sort keys %_) {print "$_ $_{$_} "}}; %_ = (Just => another => Perl => Hacker); &{%_}; +SKIP: Hashes are now randomized. EXPECT: $JaPH_s ####### Split 3 $" = "/"; split $, => eval join "+" => 1 .. 7; *{"@_"} = sub {foreach (sort keys %_) {print "$_ $_{$_} "}}; %{"@_"} = %_ = (Just => another => Perl => Hacker); &{%{%_}}; +SKIP: Hashes are now randomized. EXPECT: $JaPH_s ####### Here documents 1