xref: /openbsd-src/gnu/usr.bin/perl/cpan/Test-Simple/t/Legacy/subtest/fork.t (revision 5759b3d249badf144a6240f7eec4dcf9df003e6b)
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