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