xref: /openbsd-src/gnu/usr.bin/perl/cpan/Test-Harness/t/errors.t (revision 91f110e064cd7c194e59e019b83bb7496c1c84d4)
1#!/usr/bin/perl -wT
2
3use strict;
4use lib 't/lib';
5
6use Test::More tests => 23;
7
8use TAP::Parser;
9
10my $plan_line = 'TAP::Parser::Result::Plan';
11my $test_line = 'TAP::Parser::Result::Test';
12
13sub _parser {
14    my $parser = TAP::Parser->new( { tap => shift } );
15    $parser->run;
16    return $parser;
17}
18
19# validate that plan!
20
21my $parser = _parser(<<'END_TAP');
22ok 1 - input file opened
23not ok 2 - first line of the input valid # todo some data
24ok 3 - read the rest of the file
251..3
26# comments are allowed after an ending plan
27END_TAP
28
29can_ok $parser, 'parse_errors';
30ok !$parser->parse_errors,
31  '... comments should be allowed after a terminating plan';
32
33$parser = _parser(<<'END_TAP');
34ok 1 - input file opened
35not ok 2 - first line of the input valid # todo some data
36ok 3 - read the rest of the file
371..3
38# yeah, yeah, I know.
39ok
40END_TAP
41
42can_ok $parser, 'parse_errors';
43is scalar $parser->parse_errors, 2, '... and we should have two parse errors';
44
45is [ $parser->parse_errors ]->[0],
46  'Plan (1..3) must be at the beginning or end of the TAP output',
47  '... telling us that our plan was misplaced';
48is [ $parser->parse_errors ]->[1],
49  'Bad plan.  You planned 3 tests but ran 4.',
50  '... and telling us we ran the wrong number of tests.';
51
52$parser = _parser(<<'END_TAP');
53ok 1 - input file opened
54not ok 2 - first line of the input valid # todo some data
55ok 3 - read the rest of the file
56#1..3
57# yo quiero tests!
581..3
59END_TAP
60ok !$parser->parse_errors, '... but test plan-like data can be in a comment';
61
62$parser = _parser(<<'END_TAP');
63ok 1 - input file opened
64not ok 2 - first line of the input valid # todo some data
65ok 3 - read the rest of the file 1..5
66# yo quiero tests!
671..3
68END_TAP
69ok !$parser->parse_errors, '... or a description';
70
71$parser = _parser(<<'END_TAP');
72ok 1 - input file opened
73not ok 2 - first line of the input valid # todo 1..4
74ok 3 - read the rest of the file
75# yo quiero tests!
761..3
77END_TAP
78ok !$parser->parse_errors, '... or a directive';
79
80# test numbers included?
81
82$parser = _parser(<<'END_TAP');
831..3
84ok 1 - input file opened
85not ok 2 - first line of the input valid # todo some data
86ok read the rest of the file
87# this is ...
88END_TAP
89eval { $parser->run };
90ok !$@, 'We can mix and match the presence of test numbers';
91
92$parser = _parser(<<'END_TAP');
931..3
94ok 1 - input file opened
95not ok 2 - first line of the input valid # todo some data
96ok 2 read the rest of the file
97END_TAP
98
99is + ( $parser->parse_errors )[0],
100  'Tests out of sequence.  Found (2) but expected (3)',
101  '... and if the numbers are there, they cannot be out of sequence';
102
103$parser = _parser(<<'END_TAP');
104ok 1 - input file opened
105not ok 2 - first line of the input valid # todo some data
106ok 2 read the rest of the file
107END_TAP
108
109is $parser->parse_errors, 2,
110  'Having two errors in the TAP should result in two errors (duh)';
111my $expected = [
112    'Tests out of sequence.  Found (2) but expected (3)',
113    'No plan found in TAP output'
114];
115is_deeply [ $parser->parse_errors ], $expected,
116  '... and they should be the correct errors';
117
118$parser = _parser(<<'END_TAP');
119ok 1 - input file opened
120not ok 2 - first line of the input valid # todo some data
121ok 3 read the rest of the file
122END_TAP
123
124is $parser->parse_errors, 1, 'Having no plan should cause an error';
125is + ( $parser->parse_errors )[0], 'No plan found in TAP output',
126  '... with a correct error message';
127
128$parser = _parser(<<'END_TAP');
1291..3
130ok 1 - input file opened
131not ok 2 - first line of the input valid # todo some data
132ok 3 read the rest of the file
1331..3
134END_TAP
135
136is $parser->parse_errors, 1,
137  'Having more than one plan should cause an error';
138is + ( $parser->parse_errors )[0], 'More than one plan found in TAP output',
139  '... with a correct error message';
140
141can_ok $parser, 'is_good_plan';
142$parser = _parser(<<'END_TAP');
1431..2
144ok 1 - input file opened
145not ok 2 - first line of the input valid # todo some data
146ok 3 read the rest of the file
147END_TAP
148
149is $parser->parse_errors, 1,
150  'Having the wrong number of planned tests is a parse error';
151is + ( $parser->parse_errors )[0],
152  'Bad plan.  You planned 2 tests but ran 3.',
153  '... with a correct error message';
154
155# XXX internals:  plan will not set to true if defined
156$parser->is_good_plan(undef);
157$parser = _parser(<<'END_TAP');
158ok 1 - input file opened
1591..1
160END_TAP
161
162ok $parser->is_good_plan,
163  '... and it should return true if the plan is correct';
164
165# TAP::Parser coverage tests
166{
167
168    # good_plan coverage
169
170    my @warn;
171
172    eval {
173        local $SIG{__WARN__} = sub { push @warn, @_ };
174
175        $parser->good_plan;
176    };
177
178    is @warn, 1, 'coverage testing of good_plan';
179
180    like pop @warn,
181      qr/good_plan[(][)] is deprecated.  Please use "is_good_plan[(][)]"/,
182      '...and it fell-back like we expected';
183}
184