Upgrade to Test::Harness 2.21.
[p5sagit/p5-mst-13.2.git] / lib / Test / Harness / t / strap-analyze.t
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
17 use Test::More tests => 35;
18
19 use_ok('Test::Harness::Straps');
20
21 my $IsVMS = $^O eq 'VMS';
22
23 # VMS uses native, not POSIX, exit codes.
24 my $die_exit = $IsVMS ? 44 : 1;
25 my $die_wait = $IsVMS ? 1024 : 256;
26
27 my %samples = (
28    combined   => {
29                   passing     => 0,
30
31                   'exit'      => 0,
32                   'wait'      => 0,
33
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
69                         'wait'      => 0,
70                         'exit'      => 0,
71
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
101                         'exit'      => 0,
102                         'wait'      => 0,
103
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
119                         'exit'      => 0,
120                         'wait'      => 0,
121
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
137                         'exit'      => 0,
138                         'wait'      => 0,
139
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
155                            'exit'   => 0,
156                            'wait'   => 0,
157
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                           },
171
172    simple           => {
173                         passing     => 1,
174
175                         'exit'      => 0,
176                         'wait'      => 0,
177
178                         max         => 5,
179                         seen        => 5,
180
181                         'ok'          => 5,
182                         'todo'        => 0,
183                         'skip'        => 0,
184                         bonus       => 0,
185
186                         details     => [ ({ 'ok' => 1, actual_ok => 1 }) x 5
187                                        ]
188                        },
189
190    simple_fail      => {
191                         passing     => 0,
192
193                         'exit'      => 0,
194                         'wait'      => 0,
195
196                         max         => 5,
197                         seen        => 5,
198
199                         'ok'          => 3,
200                         'todo'        => 0,
201                         'skip'        => 0,
202                         bonus       => 0,
203
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
215                         'exit'      => 0,
216                         'wait'      => 0,
217
218                         max         => 5,
219                         seen        => 5,
220
221                         'ok'          => 5,
222                         'todo'        => 0,
223                         'skip'        => 1,
224                         bonus       => 0,
225
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
238                           'exit'    => 0,
239                           'wait'    => 0,
240
241                           max       => 0,
242                           seen      => 0,
243                           skip_all  => 'rope',
244
245                           'ok'      => 0,
246                           'todo'    => 0,
247                           'skip'    => 0,
248                           bonus     => 0,
249
250                           details   => [],
251                          },
252
253    'todo'             => {
254                         passing     => 1,
255
256                         'exit'      => 0,
257                         'wait'      => 0,
258
259                         max         => 5,
260                         seen        => 5,
261
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
278                         'exit'      => 0,
279                         'wait'      => 0,
280
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
297                         'exit'      => 0,
298                         'wait'      => 0,
299
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                                        ],
311                        },
312    'die'            => {
313                         passing     => 0,
314
315                         'exit'      => $die_exit,
316                         'wait'      => $die_wait,
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
332                         'exit'      => $die_exit,
333                         'wait'      => $die_wait,
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
350                         'exit'      => $die_exit,
351                         'wait'      => $die_wait,
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,
373
374                         'ok'          => 4,
375                         'todo'        => 0,
376                         'skip'        => 0,
377                         bonus       => 0,
378
379                         details     => [ { 'ok' => 1, actual_ok => 1 },
380                                          { 'ok' => 1, actual_ok => 1 },
381                                        ]
382                        },
383 );
384
385 $SIG{__WARN__} = sub { 
386     warn @_ unless $_[0] =~ /^Enourmous test number/ ||
387                    $_[0] =~ /^Can't detailize/
388 };
389 while( my($test, $expect) = each %samples ) {
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
399     my $strap = Test::Harness::Straps->new;
400     my %results = $strap->analyze_file("$SAMPLE_TESTS/$test");
401
402     is_deeply($results{details}, $expect->{details}, "$test details" );
403
404     delete $expect->{details};
405     delete $results{details};
406     is_deeply(\%results, $expect, "  the rest $test" );
407 }