1*5759b3d2Safresh1#!/usr/bin/perl -w 2*5759b3d2Safresh1 3*5759b3d2Safresh1# Test Test::More::subtest(), focusing on correct line numbers in 4*5759b3d2Safresh1# failed test diagnostics. 5*5759b3d2Safresh1 6*5759b3d2Safresh1BEGIN { 7*5759b3d2Safresh1 if( $ENV{PERL_CORE} ) { 8*5759b3d2Safresh1 chdir 't'; 9*5759b3d2Safresh1 @INC = ( '../lib', 'lib' ); 10*5759b3d2Safresh1 } 11*5759b3d2Safresh1 else { 12*5759b3d2Safresh1 unshift @INC, 't/lib'; 13*5759b3d2Safresh1 } 14*5759b3d2Safresh1} 15*5759b3d2Safresh1 16*5759b3d2Safresh1use strict; 17*5759b3d2Safresh1use warnings; 18*5759b3d2Safresh1 19*5759b3d2Safresh1use Test::More tests => 5; 20*5759b3d2Safresh1use Test::Builder; 21*5759b3d2Safresh1use Test::Builder::Tester; 22*5759b3d2Safresh1 23*5759b3d2Safresh1# Formatting may change if we're running under Test::Harness. 24*5759b3d2Safresh1$ENV{HARNESS_ACTIVE} = 0; 25*5759b3d2Safresh1 26*5759b3d2Safresh1our %line; 27*5759b3d2Safresh1 28*5759b3d2Safresh1{ 29*5759b3d2Safresh1 test_out("# Subtest: namehere"); 30*5759b3d2Safresh1 test_out(" 1..3"); 31*5759b3d2Safresh1 test_out(" ok 1"); 32*5759b3d2Safresh1 test_out(" not ok 2"); 33*5759b3d2Safresh1 test_err(" # Failed test at $0 line $line{innerfail1}."); 34*5759b3d2Safresh1 test_out(" ok 3"); 35*5759b3d2Safresh1 test_err(" # Looks like you failed 1 test of 3."); 36*5759b3d2Safresh1 test_out("not ok 1 - namehere"); 37*5759b3d2Safresh1 test_err("# Failed test 'namehere'"); 38*5759b3d2Safresh1 test_err("# at $0 line $line{outerfail1}."); 39*5759b3d2Safresh1 40*5759b3d2Safresh1 subtest namehere => sub { 41*5759b3d2Safresh1 plan tests => 3; 42*5759b3d2Safresh1 ok 1; 43*5759b3d2Safresh1 ok 0; BEGIN{ $line{innerfail1} = __LINE__ } 44*5759b3d2Safresh1 ok 1; 45*5759b3d2Safresh1 }; BEGIN{ $line{outerfail1} = __LINE__ } 46*5759b3d2Safresh1 47*5759b3d2Safresh1 test_test("un-named inner tests"); 48*5759b3d2Safresh1} 49*5759b3d2Safresh1{ 50*5759b3d2Safresh1 test_out("# Subtest: namehere"); 51*5759b3d2Safresh1 test_out(" 1..3"); 52*5759b3d2Safresh1 test_out(" ok 1 - first is good"); 53*5759b3d2Safresh1 test_out(" not ok 2 - second is bad"); 54*5759b3d2Safresh1 test_err(" # Failed test 'second is bad'"); 55*5759b3d2Safresh1 test_err(" # at $0 line $line{innerfail2}."); 56*5759b3d2Safresh1 test_out(" ok 3 - third is good"); 57*5759b3d2Safresh1 test_err(" # Looks like you failed 1 test of 3."); 58*5759b3d2Safresh1 test_out("not ok 1 - namehere"); 59*5759b3d2Safresh1 test_err("# Failed test 'namehere'"); 60*5759b3d2Safresh1 test_err("# at $0 line $line{outerfail2}."); 61*5759b3d2Safresh1 62*5759b3d2Safresh1 subtest namehere => sub { 63*5759b3d2Safresh1 plan tests => 3; 64*5759b3d2Safresh1 ok 1, "first is good"; 65*5759b3d2Safresh1 ok 0, "second is bad"; BEGIN{ $line{innerfail2} = __LINE__ } 66*5759b3d2Safresh1 ok 1, "third is good"; 67*5759b3d2Safresh1 }; BEGIN{ $line{outerfail2} = __LINE__ } 68*5759b3d2Safresh1 69*5759b3d2Safresh1 test_test("named inner tests"); 70*5759b3d2Safresh1} 71*5759b3d2Safresh1 72*5759b3d2Safresh1sub run_the_subtest { 73*5759b3d2Safresh1 subtest namehere => sub { 74*5759b3d2Safresh1 plan tests => 3; 75*5759b3d2Safresh1 ok 1, "first is good"; 76*5759b3d2Safresh1 ok 0, "second is bad"; BEGIN{ $line{innerfail3} = __LINE__ } 77*5759b3d2Safresh1 ok 1, "third is good"; 78*5759b3d2Safresh1 }; BEGIN{ $line{outerfail3} = __LINE__ } 79*5759b3d2Safresh1} 80*5759b3d2Safresh1{ 81*5759b3d2Safresh1 test_out("# Subtest: namehere"); 82*5759b3d2Safresh1 test_out(" 1..3"); 83*5759b3d2Safresh1 test_out(" ok 1 - first is good"); 84*5759b3d2Safresh1 test_out(" not ok 2 - second is bad"); 85*5759b3d2Safresh1 test_err(" # Failed test 'second is bad'"); 86*5759b3d2Safresh1 test_err(" # at $0 line $line{innerfail3}."); 87*5759b3d2Safresh1 test_out(" ok 3 - third is good"); 88*5759b3d2Safresh1 test_err(" # Looks like you failed 1 test of 3."); 89*5759b3d2Safresh1 test_out("not ok 1 - namehere"); 90*5759b3d2Safresh1 test_err("# Failed test 'namehere'"); 91*5759b3d2Safresh1 test_err("# at $0 line $line{outerfail3}."); 92*5759b3d2Safresh1 93*5759b3d2Safresh1 run_the_subtest(); 94*5759b3d2Safresh1 95*5759b3d2Safresh1 test_test("subtest() called from a sub"); 96*5759b3d2Safresh1} 97*5759b3d2Safresh1{ 98*5759b3d2Safresh1 test_out( "# Subtest: namehere"); 99*5759b3d2Safresh1 test_out( " 1..0"); 100*5759b3d2Safresh1 test_err( " # No tests run!"); 101*5759b3d2Safresh1 test_out( 'not ok 1 - No tests run for subtest "namehere"'); 102*5759b3d2Safresh1 test_err(q{# Failed test 'No tests run for subtest "namehere"'}); 103*5759b3d2Safresh1 test_err( "# at $0 line $line{outerfail4}."); 104*5759b3d2Safresh1 105*5759b3d2Safresh1 subtest namehere => sub { 106*5759b3d2Safresh1 done_testing; 107*5759b3d2Safresh1 }; BEGIN{ $line{outerfail4} = __LINE__ } 108*5759b3d2Safresh1 109*5759b3d2Safresh1 test_test("lineno in 'No tests run' diagnostic"); 110*5759b3d2Safresh1} 111*5759b3d2Safresh1{ 112*5759b3d2Safresh1 test_out("# Subtest: namehere"); 113*5759b3d2Safresh1 test_out(" 1..1"); 114*5759b3d2Safresh1 test_out(" not ok 1 - foo is bar"); 115*5759b3d2Safresh1 test_err(" # Failed test 'foo is bar'"); 116*5759b3d2Safresh1 test_err(" # at $0 line $line{is_fail}."); 117*5759b3d2Safresh1 test_err(" # got: 'foo'"); 118*5759b3d2Safresh1 test_err(" # expected: 'bar'"); 119*5759b3d2Safresh1 test_err(" # Looks like you failed 1 test of 1."); 120*5759b3d2Safresh1 test_out('not ok 1 - namehere'); 121*5759b3d2Safresh1 test_err("# Failed test 'namehere'"); 122*5759b3d2Safresh1 test_err("# at $0 line $line{is_outer_fail}."); 123*5759b3d2Safresh1 124*5759b3d2Safresh1 subtest namehere => sub { 125*5759b3d2Safresh1 plan tests => 1; 126*5759b3d2Safresh1 is 'foo', 'bar', 'foo is bar'; BEGIN{ $line{is_fail} = __LINE__ } 127*5759b3d2Safresh1 }; BEGIN{ $line{is_outer_fail} = __LINE__ } 128*5759b3d2Safresh1 129*5759b3d2Safresh1 test_test("diag indent for is() in subtest"); 130*5759b3d2Safresh1} 131