Upgrade to Test::Harness 2.21.
[p5sagit/p5-mst-13.2.git] / lib / Test / Harness / t / strap-analyze.t
CommitLineData
13287dd5 1#!/usr/bin/perl -w
2
3BEGIN {
4 if( $ENV{PERL_CORE} ) {
5 chdir 't';
6 @INC = ('../lib', 'lib');
7 }
8 else {
9 unshift @INC, 't/lib';
10 }
11}
12
13my $SAMPLE_TESTS = $ENV{PERL_CORE} ? 'lib/sample-tests' : 't/sample-tests';
14
15use strict;
16
356733da 17use Test::More tests => 35;
13287dd5 18
19use_ok('Test::Harness::Straps');
20
21my $IsVMS = $^O eq 'VMS';
22
f0008e52 23# VMS uses native, not POSIX, exit codes.
24my $die_exit = $IsVMS ? 44 : 1;
25my $die_wait = $IsVMS ? 1024 : 256;
26
13287dd5 27my %samples = (
28 combined => {
29 passing => 0,
30
356733da 31 'exit' => 0,
32 'wait' => 0,
33
13287dd5 34 max => 10,
35 seen => 10,
36
37 'ok' => 8,
38 'todo' => 2,
39 'skip' => 1,
40 bonus => 1,
41
42 details => [ { 'ok' => 1, actual_ok => 1 },
43 { 'ok' => 1, actual_ok => 1,
44 name => 'basset hounds got long ears',
45 },
46 { 'ok' => 0, actual_ok => 0,
47 name => 'all hell broke lose',
48 },
49 { 'ok' => 1, actual_ok => 1,
50 type => 'todo'
51 },
52 { 'ok' => 1, actual_ok => 1 },
53 { 'ok' => 1, actual_ok => 1 },
54 { 'ok' => 1, actual_ok => 1,
55 type => 'skip',
56 reason => 'contract negociations'
57 },
58 { 'ok' => 1, actual_ok => 1 },
59 { 'ok' => 0, actual_ok => 0 },
60 { 'ok' => 1, actual_ok => 0,
61 type => 'todo'
62 },
63 ]
64 },
65
66 descriptive => {
67 passing => 1,
68
356733da 69 'wait' => 0,
70 'exit' => 0,
71
13287dd5 72 max => 5,
73 seen => 5,
74
75 'ok' => 5,
76 'todo' => 0,
77 'skip' => 0,
78 bonus => 0,
79
80 details => [ { 'ok' => 1, actual_ok => 1,
81 name => 'Interlock activated'
82 },
83 { 'ok' => 1, actual_ok => 1,
84 name => 'Megathrusters are go',
85 },
86 { 'ok' => 1, actual_ok => 1,
87 name => 'Head formed',
88 },
89 { 'ok' => 1, actual_ok => 1,
90 name => 'Blazing sword formed'
91 },
92 { 'ok' => 1, actual_ok => 1,
93 name => 'Robeast destroyed'
94 },
95 ],
96 },
97
98 duplicates => {
99 passing => 0,
100
356733da 101 'exit' => 0,
102 'wait' => 0,
103
13287dd5 104 max => 10,
105 seen => 11,
106
107 'ok' => 11,
108 'todo' => 0,
109 'skip' => 0,
110 bonus => 0,
111
112 details => [ ({ 'ok' => 1, actual_ok => 1 }) x 10
113 ],
114 },
115
116 head_end => {
117 passing => 1,
118
356733da 119 'exit' => 0,
120 'wait' => 0,
121
13287dd5 122 max => 4,
123 seen => 4,
124
125 'ok' => 4,
126 'todo' => 0,
127 'skip' => 0,
128 bonus => 0,
129
130 details => [ ({ 'ok' => 1, actual_ok => 1 }) x 4
131 ],
132 },
133
134 lone_not_bug => {
135 passing => 1,
136
356733da 137 'exit' => 0,
138 'wait' => 0,
139
13287dd5 140 max => 4,
141 seen => 4,
142
143 'ok' => 4,
144 'todo' => 0,
145 'skip' => 0,
146 bonus => 0,
147
148 details => [ ({ 'ok' => 1, actual_ok => 1 }) x 4
149 ],
150 },
151
152 head_fail => {
153 passing => 0,
154
356733da 155 'exit' => 0,
156 'wait' => 0,
157
13287dd5 158 max => 4,
159 seen => 4,
160
161 'ok' => 3,
162 'todo' => 0,
163 'skip' => 0,
164 bonus => 0,
165
166 details => [ { 'ok' => 1, actual_ok => 1 },
167 { 'ok' => 0, actual_ok => 0 },
168 ({ 'ok'=> 1, actual_ok => 1 }) x 2
169 ],
170 },
308957f5 171
13287dd5 172 simple => {
173 passing => 1,
174
356733da 175 'exit' => 0,
176 'wait' => 0,
177
13287dd5 178 max => 5,
179 seen => 5,
308957f5 180
13287dd5 181 'ok' => 5,
182 'todo' => 0,
183 'skip' => 0,
184 bonus => 0,
308957f5 185
13287dd5 186 details => [ ({ 'ok' => 1, actual_ok => 1 }) x 5
187 ]
188 },
189
190 simple_fail => {
191 passing => 0,
192
356733da 193 'exit' => 0,
194 'wait' => 0,
195
13287dd5 196 max => 5,
197 seen => 5,
308957f5 198
13287dd5 199 'ok' => 3,
200 'todo' => 0,
201 'skip' => 0,
202 bonus => 0,
308957f5 203
13287dd5 204 details => [ { 'ok' => 1, actual_ok => 1 },
205 { 'ok' => 0, actual_ok => 0 },
206 { 'ok' => 1, actual_ok => 1 },
207 { 'ok' => 1, actual_ok => 1 },
208 { 'ok' => 0, actual_ok => 0 },
209 ]
210 },
211
212 'skip' => {
213 passing => 1,
214
356733da 215 'exit' => 0,
216 'wait' => 0,
217
13287dd5 218 max => 5,
219 seen => 5,
220
221 'ok' => 5,
222 'todo' => 0,
223 'skip' => 1,
224 bonus => 0,
308957f5 225
13287dd5 226 details => [ { 'ok' => 1, actual_ok => 1 },
227 { 'ok' => 1, actual_ok => 1,
228 type => 'skip',
229 reason => 'rain delay',
230 },
231 ({ 'ok' => 1, actual_ok => 1 }) x 3
232 ]
233 },
234
235 skip_all => {
236 passing => 1,
237
356733da 238 'exit' => 0,
239 'wait' => 0,
240
13287dd5 241 max => 0,
242 seen => 0,
243 skip_all => 'rope',
244
245 'ok' => 0,
246 'todo' => 0,
247 'skip' => 0,
248 bonus => 0,
308957f5 249
13287dd5 250 details => [],
251 },
252
253 'todo' => {
254 passing => 1,
255
356733da 256 'exit' => 0,
257 'wait' => 0,
258
13287dd5 259 max => 5,
260 seen => 5,
308957f5 261
13287dd5 262 'ok' => 5,
263 'todo' => 2,
264 'skip' => 0,
265 bonus => 1,
266
267 details => [ { 'ok' => 1, actual_ok => 1 },
268 { 'ok' => 1, actual_ok => 1,
269 type => 'todo' },
270 { 'ok' => 1, actual_ok => 0,
271 type => 'todo' },
272 ({ 'ok' => 1, actual_ok => 1 }) x 2
273 ],
274 },
275 taint => {
276 passing => 1,
277
356733da 278 'exit' => 0,
279 'wait' => 0,
280
13287dd5 281 max => 1,
282 seen => 1,
283
284 'ok' => 1,
285 'todo' => 0,
286 'skip' => 0,
287 bonus => 0,
288
289 details => [ { 'ok' => 1, actual_ok => 1,
290 name => '- -T honored'
291 },
292 ],
293 },
294 vms_nit => {
295 passing => 0,
296
356733da 297 'exit' => 0,
298 'wait' => 0,
299
13287dd5 300 max => 2,
301 seen => 2,
302
303 'ok' => 1,
304 'todo' => 0,
305 'skip' => 0,
306 bonus => 0,
307
308 details => [ { 'ok' => 0, actual_ok => 0 },
309 { 'ok' => 1, actual_ok => 1 },
310 ],
356733da 311 },
312 'die' => {
313 passing => 0,
314
f0008e52 315 'exit' => $die_exit,
316 'wait' => $die_wait,
356733da 317
318 max => 0,
319 seen => 0,
320
321 'ok' => 0,
322 'todo' => 0,
323 'skip' => 0,
324 bonus => 0,
325
326 details => []
327 },
328
329 die_head_end => {
330 passing => 0,
331
f0008e52 332 'exit' => $die_exit,
333 'wait' => $die_wait,
356733da 334
335 max => 0,
336 seen => 4,
337
338 'ok' => 4,
339 'todo' => 0,
340 'skip' => 0,
341 bonus => 0,
342
343 details => [ ({ 'ok' => 1, actual_ok => 1 }) x 4
344 ],
345 },
346
347 die_last_minute => {
348 passing => 0,
349
f0008e52 350 'exit' => $die_exit,
351 'wait' => $die_wait,
356733da 352
353 max => 4,
354 seen => 4,
355
356 'ok' => 4,
357 'todo' => 0,
358 'skip' => 0,
359 bonus => 0,
360
361 details => [ ({ 'ok' => 1, actual_ok => 1 }) x 4
362 ],
363 },
364
365 bignum => {
366 passing => 0,
367
368 'exit' => 0,
369 'wait' => 0,
370
371 max => 2,
372 seen => 4,
308957f5 373
356733da 374 'ok' => 4,
375 'todo' => 0,
376 'skip' => 0,
377 bonus => 0,
308957f5 378
356733da 379 details => [ { 'ok' => 1, actual_ok => 1 },
380 { 'ok' => 1, actual_ok => 1 },
381 ]
382 },
13287dd5 383);
384
356733da 385$SIG{__WARN__} = sub {
386 warn @_ unless $_[0] =~ /^Enourmous test number/ ||
387 $_[0] =~ /^Can't detailize/
388};
13287dd5 389while( my($test, $expect) = each %samples ) {
308957f5 390 for (0..$#{$expect->{details}}) {
391 $expect->{details}[$_]{type} = ''
392 unless exists $expect->{details}[$_]{type};
393 $expect->{details}[$_]{name} = ''
394 unless exists $expect->{details}[$_]{name};
395 $expect->{details}[$_]{reason} = ''
396 unless exists $expect->{details}[$_]{reason};
397 }
398
13287dd5 399 my $strap = Test::Harness::Straps->new;
400 my %results = $strap->analyze_file("$SAMPLE_TESTS/$test");
308957f5 401
356733da 402 is_deeply($results{details}, $expect->{details}, "$test details" );
13287dd5 403
404 delete $expect->{details};
405 delete $results{details};
f0008e52 406 is_deeply(\%results, $expect, " the rest $test" );
13287dd5 407}