| #!/usr/bin/perl -w |
| |
| # check nofork logic on systems which *can* fork() |
| # NOTE maybe a good candidate for xt/author or something. |
| |
| BEGIN { |
| use lib 't/lib'; |
| } |
| |
| use strict; |
| |
| use Config; |
| use Test::More ( |
| $Config{d_fork} |
| ? 'no_plan' |
| : ( 'skip_all' => 'your system already has no fork' ) |
| ); |
| use IO::c55Capture; # for util |
| |
| use TAP::Harness; |
| |
| sub backticks { |
| my (@args) = @_; |
| |
| util::stdout_of( sub { system(@args) and die "error $?" } ); |
| } |
| |
| my @libs = map "-I$_", @INC; |
| my @perl = ( $^X, @libs ); |
| my $mod = 'TAP::Parser::Iterator::Process'; |
| |
| { # just check the introspective method to start... |
| my $code = qq(print $mod->_use_open3 ? 1 : 2); |
| { |
| my $ans = backticks( @perl, '-MNoFork', "-M$mod", '-e', $code ); |
| is( $ans, 2, 'says not to fork' ); |
| } |
| { |
| local $ENV{PERL5OPT}; # punt: prevent propogating -MNoFork |
| my $ans = backticks( @perl, "-M$mod", '-e', $code ); |
| is( $ans, 1, 'says to fork' ); |
| } |
| } |
| |
| { # and make sure we can run a test |
| my $capture = IO::c55Capture->new_handle; |
| local *STDERR; |
| my $harness = TAP::Harness->new( |
| { verbosity => -2, |
| switches => [ @libs, "-MNoFork" ], |
| stdout => $capture, |
| } |
| ); |
| $harness->runtests('t/sample-tests/simple'); |
| my @output = tied($$capture)->dump; |
| is pop @output, "Result: PASS\n", 'status OK'; |
| pop @output; # get rid of summary line |
| is( $output[-1], "All tests successful.\n", 'ran with no fork' ); |
| } |
| |
| # vim:ts=4:sw=4:et:sta |