xref: /openbsd-src/gnu/usr.bin/perl/cpan/Test-Simple/t/Legacy/subtest/predicate.t (revision 5759b3d249badf144a6240f7eec4dcf9df003e6b)
1*5759b3d2Safresh1#!/usr/bin/perl -w
2*5759b3d2Safresh1
3*5759b3d2Safresh1# Test the use of subtest() to define new test predicates that combine
4*5759b3d2Safresh1# multiple existing predicates.
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# Define a new test predicate with Test::More::subtest(), using
29*5759b3d2Safresh1# Test::More predicates as building blocks...
30*5759b3d2Safresh1
31*5759b3d2Safresh1sub foobar_ok ($;$) {
32*5759b3d2Safresh1    my ($value, $name) = @_;
33*5759b3d2Safresh1    $name ||= "foobar_ok";
34*5759b3d2Safresh1
35*5759b3d2Safresh1    local $Test::Builder::Level = $Test::Builder::Level + 1;
36*5759b3d2Safresh1    subtest $name => sub {
37*5759b3d2Safresh1        plan tests => 2;
38*5759b3d2Safresh1        ok $value =~ /foo/, "foo";
39*5759b3d2Safresh1        ok $value =~ /bar/, "bar"; BEGIN{ $line{foobar_ok_bar} = __LINE__ }
40*5759b3d2Safresh1    };
41*5759b3d2Safresh1}
42*5759b3d2Safresh1{
43*5759b3d2Safresh1    test_out("# Subtest: namehere");
44*5759b3d2Safresh1    test_out("    1..2");
45*5759b3d2Safresh1    test_out("    ok 1 - foo");
46*5759b3d2Safresh1    test_out("    not ok 2 - bar");
47*5759b3d2Safresh1    test_err("    #   Failed test 'bar'");
48*5759b3d2Safresh1    test_err("    #   at $0 line $line{foobar_ok_bar}.");
49*5759b3d2Safresh1    test_err("    # Looks like you failed 1 test of 2.");
50*5759b3d2Safresh1    test_out("not ok 1 - namehere");
51*5759b3d2Safresh1    test_err("#   Failed test 'namehere'");
52*5759b3d2Safresh1    test_err("#   at $0 line ".(__LINE__+2).".");
53*5759b3d2Safresh1
54*5759b3d2Safresh1    foobar_ok "foot", "namehere";
55*5759b3d2Safresh1
56*5759b3d2Safresh1    test_test("foobar_ok failing line numbers");
57*5759b3d2Safresh1}
58*5759b3d2Safresh1
59*5759b3d2Safresh1# Wrap foobar_ok() to make another new predicate...
60*5759b3d2Safresh1
61*5759b3d2Safresh1sub foobar_ok_2 ($;$) {
62*5759b3d2Safresh1    my ($value, $name) = @_;
63*5759b3d2Safresh1
64*5759b3d2Safresh1    local $Test::Builder::Level = $Test::Builder::Level + 1;
65*5759b3d2Safresh1    foobar_ok($value, $name);
66*5759b3d2Safresh1}
67*5759b3d2Safresh1{
68*5759b3d2Safresh1    test_out("# Subtest: namehere");
69*5759b3d2Safresh1    test_out("    1..2");
70*5759b3d2Safresh1    test_out("    ok 1 - foo");
71*5759b3d2Safresh1    test_out("    not ok 2 - bar");
72*5759b3d2Safresh1    test_err("    #   Failed test 'bar'");
73*5759b3d2Safresh1    test_err("    #   at $0 line $line{foobar_ok_bar}.");
74*5759b3d2Safresh1    test_err("    # Looks like you failed 1 test of 2.");
75*5759b3d2Safresh1    test_out("not ok 1 - namehere");
76*5759b3d2Safresh1    test_err("#   Failed test 'namehere'");
77*5759b3d2Safresh1    test_err("#   at $0 line ".(__LINE__+2).".");
78*5759b3d2Safresh1
79*5759b3d2Safresh1    foobar_ok_2 "foot", "namehere";
80*5759b3d2Safresh1
81*5759b3d2Safresh1    test_test("foobar_ok_2 failing line numbers");
82*5759b3d2Safresh1}
83*5759b3d2Safresh1
84*5759b3d2Safresh1# Define another new test predicate, this time using
85*5759b3d2Safresh1# Test::Builder::subtest() rather than Test::More::subtest()...
86*5759b3d2Safresh1
87*5759b3d2Safresh1sub barfoo_ok ($;$) {
88*5759b3d2Safresh1    my ($value, $name) = @_;
89*5759b3d2Safresh1    $name ||= "barfoo_ok";
90*5759b3d2Safresh1
91*5759b3d2Safresh1    Test::Builder->new->subtest($name => sub {
92*5759b3d2Safresh1        plan tests => 2;
93*5759b3d2Safresh1        ok $value =~ /foo/, "foo";
94*5759b3d2Safresh1        ok $value =~ /bar/, "bar"; BEGIN{ $line{barfoo_ok_bar} = __LINE__ }
95*5759b3d2Safresh1    });
96*5759b3d2Safresh1}
97*5759b3d2Safresh1{
98*5759b3d2Safresh1    test_out("# Subtest: namehere");
99*5759b3d2Safresh1    test_out("    1..2");
100*5759b3d2Safresh1    test_out("    ok 1 - foo");
101*5759b3d2Safresh1    test_out("    not ok 2 - bar");
102*5759b3d2Safresh1    test_err("    #   Failed test 'bar'");
103*5759b3d2Safresh1    test_err("    #   at $0 line $line{barfoo_ok_bar}.");
104*5759b3d2Safresh1    test_err("    # Looks like you failed 1 test of 2.");
105*5759b3d2Safresh1    test_out("not ok 1 - namehere");
106*5759b3d2Safresh1    test_err("#   Failed test 'namehere'");
107*5759b3d2Safresh1    test_err("#   at $0 line ".(__LINE__+2).".");
108*5759b3d2Safresh1
109*5759b3d2Safresh1    barfoo_ok "foot", "namehere";
110*5759b3d2Safresh1
111*5759b3d2Safresh1    test_test("barfoo_ok failing line numbers");
112*5759b3d2Safresh1}
113*5759b3d2Safresh1
114*5759b3d2Safresh1# Wrap barfoo_ok() to make another new predicate...
115*5759b3d2Safresh1
116*5759b3d2Safresh1sub barfoo_ok_2 ($;$) {
117*5759b3d2Safresh1    my ($value, $name) = @_;
118*5759b3d2Safresh1
119*5759b3d2Safresh1    local $Test::Builder::Level = $Test::Builder::Level + 1;
120*5759b3d2Safresh1    barfoo_ok($value, $name);
121*5759b3d2Safresh1}
122*5759b3d2Safresh1{
123*5759b3d2Safresh1    test_out("# Subtest: namehere");
124*5759b3d2Safresh1    test_out("    1..2");
125*5759b3d2Safresh1    test_out("    ok 1 - foo");
126*5759b3d2Safresh1    test_out("    not ok 2 - bar");
127*5759b3d2Safresh1    test_err("    #   Failed test 'bar'");
128*5759b3d2Safresh1    test_err("    #   at $0 line $line{barfoo_ok_bar}.");
129*5759b3d2Safresh1    test_err("    # Looks like you failed 1 test of 2.");
130*5759b3d2Safresh1    test_out("not ok 1 - namehere");
131*5759b3d2Safresh1    test_err("#   Failed test 'namehere'");
132*5759b3d2Safresh1    test_err("#   at $0 line ".(__LINE__+2).".");
133*5759b3d2Safresh1
134*5759b3d2Safresh1    barfoo_ok_2 "foot", "namehere";
135*5759b3d2Safresh1
136*5759b3d2Safresh1    test_test("barfoo_ok_2 failing line numbers");
137*5759b3d2Safresh1}
138*5759b3d2Safresh1
139*5759b3d2Safresh1# A subtest-based predicate called from within a subtest
140*5759b3d2Safresh1{
141*5759b3d2Safresh1    test_out("# Subtest: outergroup");
142*5759b3d2Safresh1    test_out("    1..2");
143*5759b3d2Safresh1    test_out("    ok 1 - this passes");
144*5759b3d2Safresh1    test_out("    # Subtest: namehere");
145*5759b3d2Safresh1    test_out("        1..2");
146*5759b3d2Safresh1    test_out("        ok 1 - foo");
147*5759b3d2Safresh1    test_out("        not ok 2 - bar");
148*5759b3d2Safresh1    test_err("        #   Failed test 'bar'");
149*5759b3d2Safresh1    test_err("        #   at $0 line $line{barfoo_ok_bar}.");
150*5759b3d2Safresh1    test_err("        # Looks like you failed 1 test of 2.");
151*5759b3d2Safresh1    test_out("    not ok 2 - namehere");
152*5759b3d2Safresh1    test_err("    #   Failed test 'namehere'");
153*5759b3d2Safresh1    test_err("    #   at $0 line $line{ipredcall}.");
154*5759b3d2Safresh1    test_err("    # Looks like you failed 1 test of 2.");
155*5759b3d2Safresh1    test_out("not ok 1 - outergroup");
156*5759b3d2Safresh1    test_err("#   Failed test 'outergroup'");
157*5759b3d2Safresh1    test_err("#   at $0 line $line{outercall}.");
158*5759b3d2Safresh1
159*5759b3d2Safresh1    subtest outergroup => sub {
160*5759b3d2Safresh1        plan tests => 2;
161*5759b3d2Safresh1        ok 1, "this passes";
162*5759b3d2Safresh1        barfoo_ok_2 "foot", "namehere"; BEGIN{ $line{ipredcall} = __LINE__ }
163*5759b3d2Safresh1    }; BEGIN{ $line{outercall} = __LINE__ }
164*5759b3d2Safresh1
165*5759b3d2Safresh1    test_test("outergroup with internal barfoo_ok_2 failing line numbers");
166*5759b3d2Safresh1}
167