1*5759b3d2Safresh1#!/usr/bin/perl -w 2*5759b3d2Safresh1use strict; 3*5759b3d2Safresh1use warnings; 4*5759b3d2Safresh1# HARNESS-NO-STREAM 5*5759b3d2Safresh1# HARNESS-NO-PRELOAD 6*5759b3d2Safresh1 7*5759b3d2Safresh1use Test2::Util qw/CAN_FORK/; 8*5759b3d2Safresh1BEGIN { 9*5759b3d2Safresh1 unless(CAN_FORK) { 10*5759b3d2Safresh1 require Test::More; 11*5759b3d2Safresh1 Test::More->import(skip_all => "fork is not supported"); 12*5759b3d2Safresh1 } 13*5759b3d2Safresh1} 14*5759b3d2Safresh1 15*5759b3d2Safresh1use IO::Pipe; 16*5759b3d2Safresh1use Test::Builder; 17*5759b3d2Safresh1use Test::More; 18*5759b3d2Safresh1 19*5759b3d2Safresh1plan 'skip_all' => "This test cannot be run with the current formatter" 20*5759b3d2Safresh1 unless Test::Builder->new->{Stack}->top->format->isa('Test::Builder::Formatter'); 21*5759b3d2Safresh1 22*5759b3d2Safresh1plan 'tests' => 1; 23*5759b3d2Safresh1 24*5759b3d2Safresh1subtest 'fork within subtest' => sub { 25*5759b3d2Safresh1 plan tests => 2; 26*5759b3d2Safresh1 27*5759b3d2Safresh1 my $pipe = IO::Pipe->new; 28*5759b3d2Safresh1 my $pid = fork; 29*5759b3d2Safresh1 defined $pid or plan skip_all => "Fork not working"; 30*5759b3d2Safresh1 31*5759b3d2Safresh1 if ($pid) { 32*5759b3d2Safresh1 $pipe->reader; 33*5759b3d2Safresh1 my $child_output = do { local $/ ; <$pipe> }; 34*5759b3d2Safresh1 waitpid $pid, 0; 35*5759b3d2Safresh1 36*5759b3d2Safresh1 is $?, 0, 'child exit status'; 37*5759b3d2Safresh1 like $child_output, qr/^[\s#]+Child Done\s*\z/, 'child output'; 38*5759b3d2Safresh1 } 39*5759b3d2Safresh1 else { 40*5759b3d2Safresh1 $pipe->writer; 41*5759b3d2Safresh1 42*5759b3d2Safresh1 # Force all T::B output into the pipe, for the parent 43*5759b3d2Safresh1 # builder as well as the current subtest builder. 44*5759b3d2Safresh1 my $tb = Test::Builder->new; 45*5759b3d2Safresh1 $tb->output($pipe); 46*5759b3d2Safresh1 $tb->failure_output($pipe); 47*5759b3d2Safresh1 $tb->todo_output($pipe); 48*5759b3d2Safresh1 49*5759b3d2Safresh1 diag 'Child Done'; 50*5759b3d2Safresh1 exit 0; 51*5759b3d2Safresh1 } 52*5759b3d2Safresh1}; 53*5759b3d2Safresh1 54