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