| #!/usr/bin/perl -w |
| |
| BEGIN { |
| if( $ENV{PERL_CORE} ) { |
| chdir 't'; |
| @INC = ( '../lib', 'lib' ); |
| } |
| else { |
| unshift @INC, 't/lib'; |
| } |
| } |
| |
| use strict; |
| use warnings; |
| |
| use Test::Builder::NoOutput; |
| |
| use Test::More tests => 19; |
| |
| # Formatting may change if we're running under Test::Harness. |
| $ENV{HARNESS_ACTIVE} = 0; |
| |
| { |
| my $tb = Test::Builder::NoOutput->create; |
| |
| $tb->plan( tests => 7 ); |
| for( 1 .. 3 ) { |
| $tb->ok( $_, "We're on $_" ); |
| $tb->diag("We ran $_"); |
| } |
| { |
| my $indented = $tb->child; |
| $indented->plan('no_plan'); |
| $indented->ok( 1, "We're on 1" ); |
| $indented->ok( 1, "We're on 2" ); |
| $indented->ok( 1, "We're on 3" ); |
| $indented->finalize; |
| } |
| for( 7, 8, 9 ) { |
| $tb->ok( $_, "We're on $_" ); |
| } |
| |
| $tb->reset_outputs; |
| is $tb->read, <<"END", 'Output should nest properly'; |
| 1..7 |
| ok 1 - We're on 1 |
| # We ran 1 |
| ok 2 - We're on 2 |
| # We ran 2 |
| ok 3 - We're on 3 |
| # We ran 3 |
| ok 1 - We're on 1 |
| ok 2 - We're on 2 |
| ok 3 - We're on 3 |
| 1..3 |
| ok 4 - Child of $0 |
| ok 5 - We're on 7 |
| ok 6 - We're on 8 |
| ok 7 - We're on 9 |
| END |
| } |
| { |
| my $tb = Test::Builder::NoOutput->create; |
| |
| $tb->plan('no_plan'); |
| for( 1 .. 1 ) { |
| $tb->ok( $_, "We're on $_" ); |
| $tb->diag("We ran $_"); |
| } |
| { |
| my $indented = $tb->child; |
| $indented->plan('no_plan'); |
| $indented->ok( 1, "We're on 1" ); |
| { |
| my $indented2 = $indented->child('with name'); |
| $indented2->plan( tests => 2 ); |
| $indented2->ok( 1, "We're on 2.1" ); |
| $indented2->ok( 1, "We're on 2.1" ); |
| $indented2->finalize; |
| } |
| $indented->ok( 1, 'after child' ); |
| $indented->finalize; |
| } |
| for(7) { |
| $tb->ok( $_, "We're on $_" ); |
| } |
| |
| $tb->_ending; |
| $tb->reset_outputs; |
| is $tb->read, <<"END", 'We should allow arbitrary nesting'; |
| ok 1 - We're on 1 |
| # We ran 1 |
| ok 1 - We're on 1 |
| 1..2 |
| ok 1 - We're on 2.1 |
| ok 2 - We're on 2.1 |
| ok 2 - with name |
| ok 3 - after child |
| 1..3 |
| ok 2 - Child of $0 |
| ok 3 - We're on 7 |
| 1..3 |
| END |
| } |
| |
| { |
| #line 108 |
| my $tb = Test::Builder::NoOutput->create; |
| |
| { |
| my $child = $tb->child('expected to fail'); |
| $child->plan( tests => 3 ); |
| $child->ok(1); |
| $child->ok(0); |
| $child->ok(3); |
| $child->finalize; |
| } |
| |
| { |
| my $child = $tb->child('expected to pass'); |
| $child->plan( tests => 3 ); |
| $child->ok(1); |
| $child->ok(2); |
| $child->ok(3); |
| $child->finalize; |
| } |
| $tb->reset_outputs; |
| is $tb->read, <<"END", 'Previous child failures should not force subsequent failures'; |
| 1..3 |
| ok 1 |
| not ok 2 |
| # Failed test at $0 line 114. |
| ok 3 |
| # Looks like you failed 1 test of 3. |
| not ok 1 - expected to fail |
| # Failed test 'expected to fail' |
| # at $0 line 116. |
| 1..3 |
| ok 1 |
| ok 2 |
| ok 3 |
| ok 2 - expected to pass |
| END |
| } |
| { |
| my $tb = Test::Builder::NoOutput->create; |
| my $child = $tb->child('one'); |
| is $child->{$_}, $tb->{$_}, "The child should copy the ($_) filehandle" |
| foreach qw{Out_FH Todo_FH Fail_FH}; |
| $child->finalize; |
| } |
| { |
| my $tb = Test::Builder::NoOutput->create; |
| my $child = $tb->child('one'); |
| can_ok $child, 'parent'; |
| is $child->parent, $tb, '... and it should return the parent of the child'; |
| ok !defined $tb->parent, '... but top level builders should not have parents'; |
| |
| can_ok $tb, 'name'; |
| is $tb->name, $0, 'The top level name should be $0'; |
| is $child->name, 'one', '... but child names should be whatever we set them to'; |
| $child->finalize; |
| $child = $tb->child; |
| is $child->name, 'Child of '.$tb->name, '... or at least have a sensible default'; |
| $child->finalize; |
| } |
| # Skip all subtests |
| { |
| my $tb = Test::Builder::NoOutput->create; |
| |
| { |
| my $child = $tb->child('skippy says he loves you'); |
| eval { $child->plan( skip_all => 'cuz I said so' ) }; |
| ok my $error = $@, 'A child which does a "skip_all" should throw an exception'; |
| isa_ok $error, 'Test::Builder::Exception', '... and the exception it throws'; |
| } |
| subtest 'skip all', sub { |
| plan skip_all => 'subtest with skip_all'; |
| ok 0, 'This should never be run'; |
| }; |
| is +Test::Builder->new->{Test_Results}[-1]{type}, 'skip', |
| 'Subtests which "skip_all" are reported as skipped tests'; |
| } |
| |
| # to do tests |
| { |
| #line 204 |
| my $tb = Test::Builder::NoOutput->create; |
| $tb->plan( tests => 1 ); |
| my $child = $tb->child; |
| $child->plan( tests => 1 ); |
| $child->todo_start( 'message' ); |
| $child->ok( 0 ); |
| $child->todo_end; |
| $child->finalize; |
| $tb->_ending; |
| $tb->reset_outputs; |
| is $tb->read, <<"END", 'TODO tests should not make the parent test fail'; |
| 1..1 |
| 1..1 |
| not ok 1 # TODO message |
| # Failed (TODO) test at $0 line 209. |
| ok 1 - Child of $0 |
| END |
| } |
| { |
| my $tb = Test::Builder::NoOutput->create; |
| $tb->plan( tests => 1 ); |
| my $child = $tb->child; |
| $child->finalize; |
| $tb->_ending; |
| $tb->reset_outputs; |
| my $expected = <<"END"; |
| 1..1 |
| not ok 1 - No tests run for subtest "Child of $0" |
| END |
| like $tb->read, qr/\Q$expected/, |
| 'Not running subtests should make the parent test fail'; |
| } |