xref: /openbsd-src/gnu/usr.bin/perl/cpan/Test-Simple/t/Legacy/subtest/basic.t (revision 5759b3d249badf144a6240f7eec4dcf9df003e6b)
1*5759b3d2Safresh1#!/usr/bin/perl -w
2*5759b3d2Safresh1
3*5759b3d2Safresh1BEGIN {
4*5759b3d2Safresh1    if( $ENV{PERL_CORE} ) {
5*5759b3d2Safresh1        chdir 't';
6*5759b3d2Safresh1        @INC = ( '../lib', 'lib' );
7*5759b3d2Safresh1    }
8*5759b3d2Safresh1    else {
9*5759b3d2Safresh1        unshift @INC, 't/lib';
10*5759b3d2Safresh1    }
11*5759b3d2Safresh1}
12*5759b3d2Safresh1
13*5759b3d2Safresh1use strict;
14*5759b3d2Safresh1use warnings;
15*5759b3d2Safresh1
16*5759b3d2Safresh1use Test::Builder::NoOutput;
17*5759b3d2Safresh1
18*5759b3d2Safresh1use Test::More tests => 12;
19*5759b3d2Safresh1
20*5759b3d2Safresh1# TB Methods expect to be wrapped.
21*5759b3d2Safresh1my $ok   = sub { shift->ok(@_) };
22*5759b3d2Safresh1my $plan = sub { shift->plan(@_) };
23*5759b3d2Safresh1my $diag = sub { shift->diag(@_) };
24*5759b3d2Safresh1my $finalize = sub { shift->finalize(@_) };
25*5759b3d2Safresh1
26*5759b3d2Safresh1# Formatting may change if we're running under Test::Harness.
27*5759b3d2Safresh1$ENV{HARNESS_ACTIVE} = 0;
28*5759b3d2Safresh1
29*5759b3d2Safresh1{
30*5759b3d2Safresh1    my $tb = Test::Builder::NoOutput->create;
31*5759b3d2Safresh1
32*5759b3d2Safresh1    $tb->$plan( tests => 7 );
33*5759b3d2Safresh1    for( 1 .. 3 ) {
34*5759b3d2Safresh1        $tb->$ok( $_, "We're on $_" );
35*5759b3d2Safresh1        $tb->$diag("We ran $_");
36*5759b3d2Safresh1    }
37*5759b3d2Safresh1    {
38*5759b3d2Safresh1        my $indented = $tb->child;
39*5759b3d2Safresh1        $indented->$plan('no_plan');
40*5759b3d2Safresh1        $indented->$ok( 1, "We're on 1" );
41*5759b3d2Safresh1        $indented->$ok( 1, "We're on 2" );
42*5759b3d2Safresh1        $indented->$ok( 1, "We're on 3" );
43*5759b3d2Safresh1        $indented->$finalize;
44*5759b3d2Safresh1    }
45*5759b3d2Safresh1    for( 7, 8, 9 ) {
46*5759b3d2Safresh1        $tb->$ok( $_, "We're on $_" );
47*5759b3d2Safresh1    }
48*5759b3d2Safresh1
49*5759b3d2Safresh1    is $tb->read, <<"END", 'Output should nest properly';
50*5759b3d2Safresh11..7
51*5759b3d2Safresh1ok 1 - We're on 1
52*5759b3d2Safresh1# We ran 1
53*5759b3d2Safresh1ok 2 - We're on 2
54*5759b3d2Safresh1# We ran 2
55*5759b3d2Safresh1ok 3 - We're on 3
56*5759b3d2Safresh1# We ran 3
57*5759b3d2Safresh1    ok 1 - We're on 1
58*5759b3d2Safresh1    ok 2 - We're on 2
59*5759b3d2Safresh1    ok 3 - We're on 3
60*5759b3d2Safresh1    1..3
61*5759b3d2Safresh1ok 4 - Child of $0
62*5759b3d2Safresh1ok 5 - We're on 7
63*5759b3d2Safresh1ok 6 - We're on 8
64*5759b3d2Safresh1ok 7 - We're on 9
65*5759b3d2Safresh1END
66*5759b3d2Safresh1}
67*5759b3d2Safresh1{
68*5759b3d2Safresh1    my $tb = Test::Builder::NoOutput->create;
69*5759b3d2Safresh1
70*5759b3d2Safresh1    $tb->$plan('no_plan');
71*5759b3d2Safresh1    for( 1 .. 1 ) {
72*5759b3d2Safresh1        $tb->$ok( $_, "We're on $_" );
73*5759b3d2Safresh1        $tb->$diag("We ran $_");
74*5759b3d2Safresh1    }
75*5759b3d2Safresh1    {
76*5759b3d2Safresh1        my $indented = $tb->child;
77*5759b3d2Safresh1        $indented->$plan('no_plan');
78*5759b3d2Safresh1        $indented->$ok( 1, "We're on 1" );
79*5759b3d2Safresh1        {
80*5759b3d2Safresh1            my $indented2 = $indented->child('with name');
81*5759b3d2Safresh1            $indented2->$plan( tests => 2 );
82*5759b3d2Safresh1            $indented2->$ok( 1, "We're on 2.1" );
83*5759b3d2Safresh1            $indented2->$ok( 1, "We're on 2.1" );
84*5759b3d2Safresh1            $indented2->$finalize;
85*5759b3d2Safresh1        }
86*5759b3d2Safresh1        $indented->$ok( 1, 'after child' );
87*5759b3d2Safresh1        $indented->$finalize;
88*5759b3d2Safresh1    }
89*5759b3d2Safresh1    for(7) {
90*5759b3d2Safresh1        $tb->$ok( $_, "We're on $_" );
91*5759b3d2Safresh1    }
92*5759b3d2Safresh1
93*5759b3d2Safresh1    $tb->_ending;
94*5759b3d2Safresh1    is $tb->read, <<"END", 'We should allow arbitrary nesting';
95*5759b3d2Safresh1ok 1 - We're on 1
96*5759b3d2Safresh1# We ran 1
97*5759b3d2Safresh1    ok 1 - We're on 1
98*5759b3d2Safresh1        1..2
99*5759b3d2Safresh1        ok 1 - We're on 2.1
100*5759b3d2Safresh1        ok 2 - We're on 2.1
101*5759b3d2Safresh1    ok 2 - with name
102*5759b3d2Safresh1    ok 3 - after child
103*5759b3d2Safresh1    1..3
104*5759b3d2Safresh1ok 2 - Child of $0
105*5759b3d2Safresh1ok 3 - We're on 7
106*5759b3d2Safresh11..3
107*5759b3d2Safresh1END
108*5759b3d2Safresh1}
109*5759b3d2Safresh1
110*5759b3d2Safresh1{
111*5759b3d2Safresh1#line 108
112*5759b3d2Safresh1    my $tb = Test::Builder::NoOutput->create;
113*5759b3d2Safresh1
114*5759b3d2Safresh1    {
115*5759b3d2Safresh1        my $child = $tb->child('expected to fail');
116*5759b3d2Safresh1        $child->$plan( tests => 3 );
117*5759b3d2Safresh1        $child->$ok(1);
118*5759b3d2Safresh1        $child->$ok(0);
119*5759b3d2Safresh1        $child->$ok(3);
120*5759b3d2Safresh1        $child->$finalize;
121*5759b3d2Safresh1    }
122*5759b3d2Safresh1
123*5759b3d2Safresh1    {
124*5759b3d2Safresh1        my $child = $tb->child('expected to pass');
125*5759b3d2Safresh1        $child->$plan( tests => 3 );
126*5759b3d2Safresh1        $child->$ok(1);
127*5759b3d2Safresh1        $child->$ok(2);
128*5759b3d2Safresh1        $child->$ok(3);
129*5759b3d2Safresh1        $child->$finalize;
130*5759b3d2Safresh1    }
131*5759b3d2Safresh1    is $tb->read, <<"END", 'Previous child failures should not force subsequent failures';
132*5759b3d2Safresh1    1..3
133*5759b3d2Safresh1    ok 1
134*5759b3d2Safresh1    not ok 2
135*5759b3d2Safresh1    #   Failed test at $0 line 114.
136*5759b3d2Safresh1    ok 3
137*5759b3d2Safresh1    # Looks like you failed 1 test of 3.
138*5759b3d2Safresh1not ok 1 - expected to fail
139*5759b3d2Safresh1#   Failed test 'expected to fail'
140*5759b3d2Safresh1#   at $0 line 116.
141*5759b3d2Safresh1    1..3
142*5759b3d2Safresh1    ok 1
143*5759b3d2Safresh1    ok 2
144*5759b3d2Safresh1    ok 3
145*5759b3d2Safresh1ok 2 - expected to pass
146*5759b3d2Safresh1END
147*5759b3d2Safresh1}
148*5759b3d2Safresh1{
149*5759b3d2Safresh1    my $tb    = Test::Builder::NoOutput->create;
150*5759b3d2Safresh1    my $child = $tb->child('one');
151*5759b3d2Safresh1    is $child->{$_}, $tb->{$_}, "The child should copy the ($_) filehandle"
152*5759b3d2Safresh1        foreach qw{Out_FH Todo_FH Fail_FH};
153*5759b3d2Safresh1    $child->$finalize;
154*5759b3d2Safresh1}
155*5759b3d2Safresh1{
156*5759b3d2Safresh1    my $tb    = Test::Builder::NoOutput->create;
157*5759b3d2Safresh1    my $child = $tb->child('one');
158*5759b3d2Safresh1    can_ok $child, 'parent';
159*5759b3d2Safresh1
160*5759b3d2Safresh1    can_ok $tb, 'name';
161*5759b3d2Safresh1    is $child->name, 'one', '... but child names should be whatever we set them to';
162*5759b3d2Safresh1    $child->$finalize;
163*5759b3d2Safresh1    $child = $tb->child;
164*5759b3d2Safresh1    $child->$finalize;
165*5759b3d2Safresh1}
166*5759b3d2Safresh1# Skip all subtests
167*5759b3d2Safresh1{
168*5759b3d2Safresh1    my $tb = Test::Builder::NoOutput->create;
169*5759b3d2Safresh1
170*5759b3d2Safresh1    {
171*5759b3d2Safresh1        my $child = $tb->child('skippy says he loves you');
172*5759b3d2Safresh1        eval { $child->$plan( skip_all => 'cuz I said so' ) };
173*5759b3d2Safresh1    }
174*5759b3d2Safresh1    subtest 'skip all', sub {
175*5759b3d2Safresh1        plan skip_all => 'subtest with skip_all';
176*5759b3d2Safresh1        ok 0, 'This should never be run';
177*5759b3d2Safresh1    };
178*5759b3d2Safresh1}
179*5759b3d2Safresh1
180*5759b3d2Safresh1# to do tests
181*5759b3d2Safresh1{
182*5759b3d2Safresh1#line 204
183*5759b3d2Safresh1    my $tb = Test::Builder::NoOutput->create;
184*5759b3d2Safresh1    $tb->$plan( tests => 1 );
185*5759b3d2Safresh1    my $child = $tb->child;
186*5759b3d2Safresh1    $child->$plan( tests => 1 );
187*5759b3d2Safresh1    $child->todo_start( 'message' );
188*5759b3d2Safresh1    $child->$ok( 0 );
189*5759b3d2Safresh1    $child->todo_end;
190*5759b3d2Safresh1    $child->$finalize;
191*5759b3d2Safresh1    $tb->_ending;
192*5759b3d2Safresh1    is $tb->read, <<"END", 'TODO tests should not make the parent test fail';
193*5759b3d2Safresh11..1
194*5759b3d2Safresh1    1..1
195*5759b3d2Safresh1    not ok 1 # TODO message
196*5759b3d2Safresh1    #   Failed (TODO) test at $0 line 209.
197*5759b3d2Safresh1ok 1 - Child of $0
198*5759b3d2Safresh1END
199*5759b3d2Safresh1}
200*5759b3d2Safresh1{
201*5759b3d2Safresh1    my $tb = Test::Builder::NoOutput->create;
202*5759b3d2Safresh1    $tb->$plan( tests => 1 );
203*5759b3d2Safresh1    my $child = $tb->child;
204*5759b3d2Safresh1    $child->$finalize;
205*5759b3d2Safresh1    $tb->_ending;
206*5759b3d2Safresh1    my $expected = <<"END";
207*5759b3d2Safresh11..1
208*5759b3d2Safresh1not ok 1 - No tests run for subtest "Child of $0"
209*5759b3d2Safresh1END
210*5759b3d2Safresh1    like $tb->read, qr/\Q$expected\E/,
211*5759b3d2Safresh1        'Not running subtests should make the parent test fail';
212*5759b3d2Safresh1}
213