X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fop%2Fmagic.t;h=056ded406813fff641bc1ff46560de5106ae14e5;hb=9661b5442a5f8dacc64d54eb1de98575f21de5f2;hp=70f2bec2c3a00040461f1044d3c4faafed9edf4b;hpb=b971f6e4f6780f32fa16abecd87989a37436a193;p=p5sagit%2Fp5-mst-13.2.git diff --git a/t/op/magic.t b/t/op/magic.t index 70f2bec..056ded4 100755 --- a/t/op/magic.t +++ b/t/op/magic.t @@ -19,10 +19,16 @@ sub ok { } } -print "1..28\n"; +$Is_MSWin32 = $^O eq 'MSWin32'; +$Is_VMS = $^O eq 'VMS'; +$Is_Dos = $^O eq 'dos'; +$PERL = ($Is_MSWin32 ? '.\perl' : './perl'); -eval '$ENV{"foo"} = "hi there";'; # check that ENV is inited inside eval -ok 1, `echo \$foo` eq "hi there\n"; +print "1..35\n"; + +eval '$ENV{"FOO"} = "hi there";'; # check that ENV is inited inside eval +if ($Is_MSWin32) { ok 1, `cmd /x /c set FOO` eq "FOO=hi there\n"; } +else { ok 1, `echo \$FOO` eq "hi there\n"; } unlink 'ajslkdfpqjsjfk'; $! = 0; @@ -30,16 +36,20 @@ open(FOO,'ajslkdfpqjsjfk'); ok 2, $!, $!; close FOO; # just mention it, squelch used-only-once -# the next tests are embedded inside system simply because sh spits out -# a newline onto stderr when a child process kills itself with SIGINT. - -system './perl', '-e', <<'END'; +if ($Is_MSWin32 || $Is_Dos) { + ok "3 # skipped",1; + ok "4 # skipped",1; +} +else { + # the next tests are embedded inside system simply because sh spits out + # a newline onto stderr when a child process kills itself with SIGINT. + system './perl', '-e', <<'END'; $| = 1; # command buffering - $SIG{"INT"} = "ok3"; kill "INT",$$; - $SIG{"INT"} = "IGNORE"; kill 2,$$; print "ok 4\n"; - $SIG{"INT"} = "DEFAULT"; kill 2,$$; print "not ok\n"; + $SIG{"INT"} = "ok3"; kill "INT",$$; sleep 1; + $SIG{"INT"} = "IGNORE"; kill "INT",$$; sleep 1; print "ok 4\n"; + $SIG{"INT"} = "DEFAULT"; kill "INT",$$; sleep 1; print "not ok\n"; sub ok3 { if (($x = pop(@_)) eq "INT") { @@ -51,8 +61,10 @@ system './perl', '-e', <<'END'; } END +} -@val1 = @ENV{keys(%ENV)}; # can we slice ENV? +# can we slice ENV? +@val1 = @ENV{keys(%ENV)}; @val2 = values(%ENV); ok 5, join(':',@val1) eq join(':',@val2); ok 6, @val1 > 1; @@ -84,9 +96,9 @@ ok 13, (keys %h)[0] eq "foo\034bar", (keys %h)[0]; } # $?, $@, $$ -system 'true'; +system qq[$PERL -e "exit(0)"]; ok 15, $? == 0, $?; -system 'false'; +system qq[$PERL -e "exit(1)"]; ok 16, $? != 0, $?; eval { die "foo\n" }; @@ -95,35 +107,103 @@ ok 17, $@ eq "foo\n", $@; ok 18, $$ > 0, $$; # $^X and $0 -if ($^O eq 'qnx' || $^O eq 'amigaos') { - chomp($wd = `pwd`); -} -else { - $wd = '.'; -} -$script = "$wd/show-shebang"; -$s1 = $s2 = "\$^X is $wd/perl, \$0 is $script\n"; -if ($^O eq 'os2') { - # Started by ksh, which adds suffixes '.exe' and '.' to perl and script - $s2 = "\$^X is $wd/perl.exe, \$0 is $script.\n"; -} -ok 19, open(SCRIPT, ">$script"), $!; -ok 20, print(SCRIPT <$script"), $!; + ok 20, print(SCRIPT $headmaybe . <= 5.00319, $]; ok 27, $^O; ok 28, $^T > 850000000, $^T; + +if ($Is_VMS || $Is_Dos) { + ok "29 # skipped", 1; + ok "30 # skipped", 1; +} +else { + $PATH = $ENV{PATH}; + $ENV{foo} = "bar"; + %ENV = (); + $ENV{PATH} = $PATH; + ok 29, ($Is_MSWin32 ? (`cmd /x /c set foo 2>NUL` eq "") + : (`echo \$foo` eq "\n") ); + + $ENV{NoNeSuCh} = "foo"; + $0 = "bar"; + ok 30, ($Is_MSWin32 ? (`cmd /x /c set NoNeSuCh` eq "NoNeSuCh=foo\n") + : (`echo \$NoNeSuCh` eq "foo\n") ); +} + +{ + local $SIG{'__WARN__'} = sub { print "# @_\nnot " }; + $! = undef; + print "ok 31\n"; +} + +# test case-insignificance of %ENV (these tests must be enabled only +# when perl is compiled with -DENV_IS_CASELESS) +if ($Is_MSWin32) { + %ENV = (); + $ENV{'Foo'} = 'bar'; + $ENV{'fOo'} = 'baz'; + ok 32, (scalar(keys(%ENV)) == 1); + ok 33, exists($ENV{'FOo'}); + ok 34, (delete($ENV{'foO'}) eq 'baz'); + ok 35, (scalar(keys(%ENV)) == 0); +} +else { + ok "32 # skipped",1; + ok "33 # skipped",1; + ok "34 # skipped",1; + ok "35 # skipped",1; +}