X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Ftest.pl;h=90e7ed5275047fb42cd35a64683a5cce8fa2599c;hb=f93a5f0713380ffacfb1cc418ab7b0f313757306;hp=87cb51a6f0b6822d4ea9c85956f5c7e3d6e0df15;hpb=7d932aad28c4908d05dbf4a2f3482f7c2445c3bf;p=p5sagit%2Fp5-mst-13.2.git diff --git a/t/test.pl b/t/test.pl index 87cb51a..90e7ed5 100644 --- a/t/test.pl +++ b/t/test.pl @@ -72,12 +72,20 @@ sub ok { _ok($pass, _where(), $name, @mess); } +sub _q { + my $x = shift; + return 'undef' unless defined $x; + my $q = $x; + $q =~ s/'/\\'/; + return "'$q'"; +} + sub is { my ($got, $expected, $name, @mess) = @_; my $pass = $got eq $expected; unless ($pass) { - unshift(@mess, "# got '$got'\n", - "# expected '$expected'\n"); + unshift(@mess, "# got "._q($got)."\n", + "# expected "._q($expected)."\n"); } _ok($pass, _where(), $name, @mess); } @@ -86,7 +94,7 @@ sub isnt { my ($got, $isnt, $name, @mess) = @_; my $pass = $got ne $isnt; unless( $pass ) { - unshift(@mess, "# it should not be $got\n", + unshift(@mess, "# it should not be "._q($got)."\n", "# but it is.\n"); } _ok($pass, _where(), $name, @mess); @@ -129,7 +137,8 @@ sub skip { my $why = shift; my $n = @_ ? shift : 1; for (1..$n) { - ok(1, "# skip:", $why); + print "ok $test # skip: $why\n"; + $test++; } local $^W = 0; last SKIP; @@ -160,4 +169,82 @@ USE_OK _ok(!$@, _where(), "use $use"); } +# runperl - Runs a separate perl interpreter. +# Arguments : +# switches => [ command-line switches ] +# nolib => 1 # don't use -I../lib (included by default) +# prog => one-liner (avoid quotes) +# progfile => perl script +# stdin => string to feed the stdin +# stderr => redirect stderr to stdout +# args => [ command-line arguments to the perl program ] +# verbose => print the command line + +my $is_mswin = $^O eq 'MSWin32'; +my $is_netware = $^O eq 'NetWare'; +my $is_macos = $^O eq 'MacOS'; +my $is_vms = $^O eq 'VMS'; + +sub _quote_args { + my ($runperl, $args) = @_; + + foreach (@$args) { + # In VMS protect with doublequotes because otherwise + # DCL will lowercase -- unless already doublequoted. + $_ = q(").$_.q(") if $is_vms && !/^\"/; + $$runperl .= ' ' . $_; + } +} + +sub runperl { + my %args = @_; + my $runperl = $^X; + if ($args{switches}) { + _quote_args(\$runperl, $args{switches}); + } + unless ($args{nolib}) { + if ($is_macos) { + $runperl .= ' -I::lib'; + # Use UNIX style error messages instead of MPW style. + $runperl .= ' -MMac::err=unix' if $args{stderr}; + } + else { + $runperl .= ' "-I../lib"'; # doublequotes because of VMS + } + } + if (defined $args{prog}) { + if ($is_mswin || $is_netware || $is_vms) { + $runperl .= qq( -e ") . $args{prog} . qq("); + } + else { + $runperl .= qq( -e ') . $args{prog} . qq('); + } + } elsif (defined $args{progfile}) { + $runperl .= qq( "$args{progfile}"); + } + if (defined $args{stdin}) { + if ($is_mswin || $is_netware || $is_vms) { + $runperl = qq{$^X -e "print qq(} . + $args{stdin} . q{)" | } . $runperl; + } + else { + $runperl = qq{$^X -e 'print qq(} . + $args{stdin} . q{)' | } . $runperl; + } + } + if (defined $args{args}) { + _quote_args(\$runperl, $args{args}); + } + $runperl .= ' 2>&1' if $args{stderr} && !$is_macos; + $runperl .= " \xB3 Dev:Null" if !$args{stderr} && $is_macos; + if ($args{verbose}) { + my $runperldisplay = $runperl; + $runperldisplay =~ s/\n/\n\#/g; + print "# $runperldisplay\n"; + } + my $result = `$runperl`; + $result =~ s/\n\n/\n/ if $is_vms; # XXX pipes sometimes double these + return $result; +} + 1;