Commit | Line | Data |
13287dd5 |
1 | #!/usr/bin/perl -w |
2 | |
3 | BEGIN { |
4 | if( $ENV{PERL_CORE} ) { |
5 | chdir 't'; |
6 | @INC = ('../lib', 'lib'); |
7 | } |
8 | else { |
9 | unshift @INC, 't/lib'; |
10 | } |
11 | } |
12 | |
13 | my $SAMPLE_TESTS = $ENV{PERL_CORE} ? 'lib/sample-tests' : 't/sample-tests'; |
14 | |
15 | use strict; |
16 | |
356733da |
17 | use Test::More tests => 35; |
13287dd5 |
18 | |
19 | use_ok('Test::Harness::Straps'); |
20 | |
21 | my $IsVMS = $^O eq 'VMS'; |
22 | |
f0008e52 |
23 | # VMS uses native, not POSIX, exit codes. |
24 | my $die_exit = $IsVMS ? 44 : 1; |
25 | my $die_wait = $IsVMS ? 1024 : 256; |
26 | |
13287dd5 |
27 | my %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 |
389 | while( 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 | } |