~ubuntu-branches/ubuntu/trusty/bioperl/trusty

« back to all changes in this revision

Viewing changes to t/lib/Test/Builder.pm

  • Committer: Package Import Robot
  • Author(s): Charles Plessy
  • Date: 2013-09-22 13:39:48 UTC
  • mfrom: (3.1.11 sid)
  • Revision ID: package-import@ubuntu.com-20130922133948-c6z62zegjyp7ztou
Tags: 1.6.922-1
* New upstream release.
* Replaces and Breaks grinder (<< 0.5.3-3~) because of overlaping contents.
  Closes: #722910
* Stop Replacing and Breaking bioperl ( << 1.6.9 ): not needed anymore. 

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
package Test::Builder;
2
 
 
3
 
use 5.004;
4
 
 
5
 
# $^C was only introduced in 5.005-ish.  We do this to prevent
6
 
# use of uninitialized value warnings in older perls.
7
 
$^C ||= 0;
8
 
 
9
 
use strict;
10
 
use vars qw($VERSION);
11
 
$VERSION = '0.33';
12
 
$VERSION = eval $VERSION;    # make the alpha version come out as a number
13
 
 
14
 
# Make Test::Builder thread-safe for ithreads.
15
 
BEGIN {
16
 
    use Config;
17
 
    # Load threads::shared when threads are turned on
18
 
    if( $] >= 5.008 && $Config{useithreads} && $INC{'threads.pm'}) {
19
 
        require threads::shared;
20
 
 
21
 
        # Hack around YET ANOTHER threads::shared bug.  It would 
22
 
        # occassionally forget the contents of the variable when sharing it.
23
 
        # So we first copy the data, then share, then put our copy back.
24
 
        *share = sub (\[$@%]) {
25
 
            my $type = ref $_[0];
26
 
            my $data;
27
 
 
28
 
            if( $type eq 'HASH' ) {
29
 
                %$data = %{$_[0]};
30
 
            }
31
 
            elsif( $type eq 'ARRAY' ) {
32
 
                @$data = @{$_[0]};
33
 
            }
34
 
            elsif( $type eq 'SCALAR' ) {
35
 
                $$data = ${$_[0]};
36
 
            }
37
 
            else {
38
 
                die "Unknown type: ".$type;
39
 
            }
40
 
 
41
 
            $_[0] = &threads::shared::share($_[0]);
42
 
 
43
 
            if( $type eq 'HASH' ) {
44
 
                %{$_[0]} = %$data;
45
 
            }
46
 
            elsif( $type eq 'ARRAY' ) {
47
 
                @{$_[0]} = @$data;
48
 
            }
49
 
            elsif( $type eq 'SCALAR' ) {
50
 
                ${$_[0]} = $$data;
51
 
            }
52
 
            else {
53
 
                die "Unknown type: ".$type;
54
 
            }
55
 
 
56
 
            return $_[0];
57
 
        };
58
 
    }
59
 
    # 5.8.0's threads::shared is busted when threads are off.
60
 
    # We emulate it here.
61
 
    else {
62
 
        *share = sub { return $_[0] };
63
 
        *lock  = sub { 0 };
64
 
    }
65
 
}
66
 
 
67
 
 
68
 
=head1 NAME
69
 
 
70
 
Test::Builder - Backend for building test libraries
71
 
 
72
 
=head1 SYNOPSIS
73
 
 
74
 
  package My::Test::Module;
75
 
  use Test::Builder;
76
 
  require Exporter;
77
 
  @ISA = qw(Exporter);
78
 
  @EXPORT = qw(ok);
79
 
 
80
 
  my $Test = Test::Builder->new;
81
 
  $Test->output('my_logfile');
82
 
 
83
 
  sub import {
84
 
      my($self) = shift;
85
 
      my $pack = caller;
86
 
 
87
 
      $Test->exported_to($pack);
88
 
      $Test->plan(@_);
89
 
 
90
 
      $self->export_to_level(1, $self, 'ok');
91
 
  }
92
 
 
93
 
  sub ok {
94
 
      my($test, $name) = @_;
95
 
 
96
 
      $Test->ok($test, $name);
97
 
  }
98
 
 
99
 
 
100
 
=head1 DESCRIPTION
101
 
 
102
 
Test::Simple and Test::More have proven to be popular testing modules,
103
 
but they're not always flexible enough.  Test::Builder provides the a
104
 
building block upon which to write your own test libraries I<which can
105
 
work together>.
106
 
 
107
 
=head2 Construction
108
 
 
109
 
=over 4
110
 
 
111
 
=item B<new>
112
 
 
113
 
  my $Test = Test::Builder->new;
114
 
 
115
 
Returns a Test::Builder object representing the current state of the
116
 
test.
117
 
 
118
 
Since you only run one test per program C<new> always returns the same
119
 
Test::Builder object.  No matter how many times you call new(), you're
120
 
getting the same object.  This is called a singleton.  This is done so that
121
 
multiple modules share such global information as the test counter and
122
 
where test output is going.
123
 
 
124
 
If you want a completely new Test::Builder object different from the
125
 
singleton, use C<create>.
126
 
 
127
 
=cut
128
 
 
129
 
my $Test = Test::Builder->new;
130
 
sub new {
131
 
    my($class) = shift;
132
 
    $Test ||= $class->create;
133
 
    return $Test;
134
 
}
135
 
 
136
 
 
137
 
=item B<create>
138
 
 
139
 
  my $Test = Test::Builder->create;
140
 
 
141
 
Ok, so there can be more than one Test::Builder object and this is how
142
 
you get it.  You might use this instead of C<new()> if you're testing
143
 
a Test::Builder based module, but otherwise you probably want C<new>.
144
 
 
145
 
B<NOTE>: the implementation is not complete.  C<level>, for example, is
146
 
still shared amongst B<all> Test::Builder objects, even ones created using
147
 
this method.  Also, the method name may change in the future.
148
 
 
149
 
=cut
150
 
 
151
 
sub create {
152
 
    my $class = shift;
153
 
 
154
 
    my $self = bless {}, $class;
155
 
    $self->reset;
156
 
 
157
 
    return $self;
158
 
}
159
 
 
160
 
=item B<reset>
161
 
 
162
 
  $Test->reset;
163
 
 
164
 
Reinitializes the Test::Builder singleton to its original state.
165
 
Mostly useful for tests run in persistent environments where the same
166
 
test might be run multiple times in the same process.
167
 
 
168
 
=cut
169
 
 
170
 
use vars qw($Level);
171
 
 
172
 
sub reset {
173
 
    my ($self) = @_;
174
 
 
175
 
    # We leave this a global because it has to be localized and localizing
176
 
    # hash keys is just asking for pain.  Also, it was documented.
177
 
    $Level = 1;
178
 
 
179
 
    $self->{Test_Died}    = 0;
180
 
    $self->{Have_Plan}    = 0;
181
 
    $self->{No_Plan}      = 0;
182
 
    $self->{Original_Pid} = $$;
183
 
 
184
 
    share($self->{Curr_Test});
185
 
    $self->{Curr_Test}    = 0;
186
 
    $self->{Test_Results} = &share([]);
187
 
 
188
 
    $self->{Exported_To}    = undef;
189
 
    $self->{Expected_Tests} = 0;
190
 
 
191
 
    $self->{Skip_All}   = 0;
192
 
 
193
 
    $self->{Use_Nums}   = 1;
194
 
 
195
 
    $self->{No_Header}  = 0;
196
 
    $self->{No_Ending}  = 0;
197
 
 
198
 
    $self->_dup_stdhandles unless $^C;
199
 
 
200
 
    return undef;
201
 
}
202
 
 
203
 
=back
204
 
 
205
 
=head2 Setting up tests
206
 
 
207
 
These methods are for setting up tests and declaring how many there
208
 
are.  You usually only want to call one of these methods.
209
 
 
210
 
=over 4
211
 
 
212
 
=item B<exported_to>
213
 
 
214
 
  my $pack = $Test->exported_to;
215
 
  $Test->exported_to($pack);
216
 
 
217
 
Tells Test::Builder what package you exported your functions to.
218
 
This is important for getting TODO tests right.
219
 
 
220
 
=cut
221
 
 
222
 
sub exported_to {
223
 
    my($self, $pack) = @_;
224
 
 
225
 
    if( defined $pack ) {
226
 
        $self->{Exported_To} = $pack;
227
 
    }
228
 
    return $self->{Exported_To};
229
 
}
230
 
 
231
 
=item B<plan>
232
 
 
233
 
  $Test->plan('no_plan');
234
 
  $Test->plan( skip_all => $reason );
235
 
  $Test->plan( tests => $num_tests );
236
 
 
237
 
A convenient way to set up your tests.  Call this and Test::Builder
238
 
will print the appropriate headers and take the appropriate actions.
239
 
 
240
 
If you call plan(), don't call any of the other methods below.
241
 
 
242
 
=cut
243
 
 
244
 
sub plan {
245
 
    my($self, $cmd, $arg) = @_;
246
 
 
247
 
    return unless $cmd;
248
 
 
249
 
    if( $self->{Have_Plan} ) {
250
 
        die sprintf "You tried to plan twice!  Second plan at %s line %d\n",
251
 
          ($self->caller)[1,2];
252
 
    }
253
 
 
254
 
    if( $cmd eq 'no_plan' ) {
255
 
        $self->no_plan;
256
 
    }
257
 
    elsif( $cmd eq 'skip_all' ) {
258
 
        return $self->skip_all($arg);
259
 
    }
260
 
    elsif( $cmd eq 'tests' ) {
261
 
        if( $arg ) {
262
 
            return $self->expected_tests($arg);
263
 
        }
264
 
        elsif( !defined $arg ) {
265
 
            die "Got an undefined number of tests.  Looks like you tried to ".
266
 
                "say how many tests you plan to run but made a mistake.\n";
267
 
        }
268
 
        elsif( !$arg ) {
269
 
            die "You said to run 0 tests!  You've got to run something.\n";
270
 
        }
271
 
    }
272
 
    else {
273
 
        require Carp;
274
 
        my @args = grep { defined } ($cmd, $arg);
275
 
        Carp::croak("plan() doesn't understand @args");
276
 
    }
277
 
 
278
 
    return 1;
279
 
}
280
 
 
281
 
=item B<expected_tests>
282
 
 
283
 
    my $max = $Test->expected_tests;
284
 
    $Test->expected_tests($max);
285
 
 
286
 
Gets/sets the # of tests we expect this test to run and prints out
287
 
the appropriate headers.
288
 
 
289
 
=cut
290
 
 
291
 
sub expected_tests {
292
 
    my $self = shift;
293
 
    my($max) = @_;
294
 
 
295
 
    if( @_ ) {
296
 
        die "Number of tests must be a postive integer.  You gave it '$max'.\n"
297
 
          unless $max =~ /^\+?\d+$/ and $max > 0;
298
 
 
299
 
        $self->{Expected_Tests} = $max;
300
 
        $self->{Have_Plan}      = 1;
301
 
 
302
 
        $self->_print("1..$max\n") unless $self->no_header;
303
 
    }
304
 
    return $self->{Expected_Tests};
305
 
}
306
 
 
307
 
 
308
 
=item B<no_plan>
309
 
 
310
 
  $Test->no_plan;
311
 
 
312
 
Declares that this test will run an indeterminate # of tests.
313
 
 
314
 
=cut
315
 
 
316
 
sub no_plan {
317
 
    my $self = shift;
318
 
 
319
 
    $self->{No_Plan}   = 1;
320
 
    $self->{Have_Plan} = 1;
321
 
}
322
 
 
323
 
=item B<has_plan>
324
 
 
325
 
  $plan = $Test->has_plan
326
 
 
327
 
Find out whether a plan has been defined. $plan is either C<undef> (no plan has been set), C<no_plan> (indeterminate # of tests) or an integer (the number of expected tests).
328
 
 
329
 
=cut
330
 
 
331
 
sub has_plan {
332
 
    my $self = shift;
333
 
 
334
 
    return($self->{Expected_Tests}) if $self->{Expected_Tests};
335
 
    return('no_plan') if $self->{No_Plan};
336
 
    return(undef);
337
 
};
338
 
 
339
 
 
340
 
=item B<skip_all>
341
 
 
342
 
  $Test->skip_all;
343
 
  $Test->skip_all($reason);
344
 
 
345
 
Skips all the tests, using the given $reason.  Exits immediately with 0.
346
 
 
347
 
=cut
348
 
 
349
 
sub skip_all {
350
 
    my($self, $reason) = @_;
351
 
 
352
 
    my $out = "1..0";
353
 
    $out .= " # Skip $reason" if $reason;
354
 
    $out .= "\n";
355
 
 
356
 
    $self->{Skip_All} = 1;
357
 
 
358
 
    $self->_print($out) unless $self->no_header;
359
 
    exit(0);
360
 
}
361
 
 
362
 
=back
363
 
 
364
 
=head2 Running tests
365
 
 
366
 
These actually run the tests, analogous to the functions in
367
 
Test::More.
368
 
 
369
 
$name is always optional.
370
 
 
371
 
=over 4
372
 
 
373
 
=item B<ok>
374
 
 
375
 
  $Test->ok($test, $name);
376
 
 
377
 
Your basic test.  Pass if $test is true, fail if $test is false.  Just
378
 
like Test::Simple's ok().
379
 
 
380
 
=cut
381
 
 
382
 
sub ok {
383
 
    my($self, $test, $name) = @_;
384
 
 
385
 
    # $test might contain an object which we don't want to accidentally
386
 
    # store, so we turn it into a boolean.
387
 
    $test = $test ? 1 : 0;
388
 
 
389
 
    unless( $self->{Have_Plan} ) {
390
 
        require Carp;
391
 
        Carp::croak("You tried to run a test without a plan!  Gotta have a plan.");
392
 
    }
393
 
 
394
 
    lock $self->{Curr_Test};
395
 
    $self->{Curr_Test}++;
396
 
 
397
 
    # In case $name is a string overloaded object, force it to stringify.
398
 
    $self->_unoverload_str(\$name);
399
 
 
400
 
    $self->diag(<<ERR) if defined $name and $name =~ /^[\d\s]+$/;
401
 
    You named your test '$name'.  You shouldn't use numbers for your test names.
402
 
    Very confusing.
403
 
ERR
404
 
 
405
 
    my($pack, $file, $line) = $self->caller;
406
 
 
407
 
    my $todo = $self->todo($pack);
408
 
    $self->_unoverload_str(\$todo);
409
 
 
410
 
    my $out;
411
 
    my $result = &share({});
412
 
 
413
 
    unless( $test ) {
414
 
        $out .= "not ";
415
 
        @$result{ 'ok', 'actual_ok' } = ( ( $todo ? 1 : 0 ), 0 );
416
 
    }
417
 
    else {
418
 
        @$result{ 'ok', 'actual_ok' } = ( 1, $test );
419
 
    }
420
 
 
421
 
    $out .= "ok";
422
 
    $out .= " $self->{Curr_Test}" if $self->use_numbers;
423
 
 
424
 
    if( defined $name ) {
425
 
        $name =~ s|#|\\#|g;     # # in a name can confuse Test::Harness.
426
 
        $out   .= " - $name";
427
 
        $result->{name} = $name;
428
 
    }
429
 
    else {
430
 
        $result->{name} = '';
431
 
    }
432
 
 
433
 
    if( $todo ) {
434
 
        $out   .= " # TODO $todo";
435
 
        $result->{reason} = $todo;
436
 
        $result->{type}   = 'todo';
437
 
    }
438
 
    else {
439
 
        $result->{reason} = '';
440
 
        $result->{type}   = '';
441
 
    }
442
 
 
443
 
    $self->{Test_Results}[$self->{Curr_Test}-1] = $result;
444
 
    $out .= "\n";
445
 
 
446
 
    $self->_print($out);
447
 
 
448
 
    unless( $test ) {
449
 
        my $msg = $todo ? "Failed (TODO)" : "Failed";
450
 
        $self->_print_diag("\n") if $ENV{HARNESS_ACTIVE};
451
 
 
452
 
        if( defined $name ) {
453
 
            $self->diag(qq[  $msg test '$name'\n]);
454
 
            $self->diag(qq[  in $file at line $line.\n]);
455
 
        }
456
 
        else {
457
 
            $self->diag(qq[  $msg test in $file at line $line.\n]);
458
 
        }
459
 
    } 
460
 
 
461
 
    return $test ? 1 : 0;
462
 
}
463
 
 
464
 
 
465
 
sub _unoverload {
466
 
    my $self  = shift;
467
 
    my $type  = shift;
468
 
 
469
 
    local($@,$!);
470
 
 
471
 
    eval { require overload } || return;
472
 
 
473
 
    foreach my $thing (@_) {
474
 
        eval { 
475
 
            if( _is_object($$thing) ) {
476
 
                if( my $string_meth = overload::Method($$thing, $type) ) {
477
 
                    $$thing = $$thing->$string_meth();
478
 
                }
479
 
            }
480
 
        };
481
 
    }
482
 
}
483
 
 
484
 
 
485
 
sub _is_object {
486
 
    my $thing = shift;
487
 
 
488
 
    return eval { ref $thing && $thing->isa('UNIVERSAL') } ? 1 : 0;
489
 
}
490
 
 
491
 
 
492
 
sub _unoverload_str {
493
 
    my $self = shift;
494
 
 
495
 
    $self->_unoverload(q[""], @_);
496
 
}    
497
 
 
498
 
sub _unoverload_num {
499
 
    my $self = shift;
500
 
 
501
 
    $self->_unoverload('0+', @_);
502
 
 
503
 
    for my $val (@_) {
504
 
        next unless $self->_is_dualvar($$val);
505
 
        $$val = $$val+0;
506
 
    }
507
 
}
508
 
 
509
 
 
510
 
# This is a hack to detect a dualvar such as $!
511
 
sub _is_dualvar {
512
 
    my($self, $val) = @_;
513
 
 
514
 
    local $^W = 0;
515
 
    my $numval = $val+0;
516
 
    return 1 if $numval != 0 and $numval ne $val;
517
 
}
518
 
 
519
 
 
520
 
 
521
 
=item B<is_eq>
522
 
 
523
 
  $Test->is_eq($got, $expected, $name);
524
 
 
525
 
Like Test::More's is().  Checks if $got eq $expected.  This is the
526
 
string version.
527
 
 
528
 
=item B<is_num>
529
 
 
530
 
  $Test->is_num($got, $expected, $name);
531
 
 
532
 
Like Test::More's is().  Checks if $got == $expected.  This is the
533
 
numeric version.
534
 
 
535
 
=cut
536
 
 
537
 
sub is_eq {
538
 
    my($self, $got, $expect, $name) = @_;
539
 
    local $Level = $Level + 1;
540
 
 
541
 
    $self->_unoverload_str(\$got, \$expect);
542
 
 
543
 
    if( !defined $got || !defined $expect ) {
544
 
        # undef only matches undef and nothing else
545
 
        my $test = !defined $got && !defined $expect;
546
 
 
547
 
        $self->ok($test, $name);
548
 
        $self->_is_diag($got, 'eq', $expect) unless $test;
549
 
        return $test;
550
 
    }
551
 
 
552
 
    return $self->cmp_ok($got, 'eq', $expect, $name);
553
 
}
554
 
 
555
 
sub is_num {
556
 
    my($self, $got, $expect, $name) = @_;
557
 
    local $Level = $Level + 1;
558
 
 
559
 
    $self->_unoverload_num(\$got, \$expect);
560
 
 
561
 
    if( !defined $got || !defined $expect ) {
562
 
        # undef only matches undef and nothing else
563
 
        my $test = !defined $got && !defined $expect;
564
 
 
565
 
        $self->ok($test, $name);
566
 
        $self->_is_diag($got, '==', $expect) unless $test;
567
 
        return $test;
568
 
    }
569
 
 
570
 
    return $self->cmp_ok($got, '==', $expect, $name);
571
 
}
572
 
 
573
 
sub _is_diag {
574
 
    my($self, $got, $type, $expect) = @_;
575
 
 
576
 
    foreach my $val (\$got, \$expect) {
577
 
        if( defined $$val ) {
578
 
            if( $type eq 'eq' ) {
579
 
                # quote and force string context
580
 
                $$val = "'$$val'"
581
 
            }
582
 
            else {
583
 
                # force numeric context
584
 
                $self->_unoverload_num($val);
585
 
            }
586
 
        }
587
 
        else {
588
 
            $$val = 'undef';
589
 
        }
590
 
    }
591
 
 
592
 
    return $self->diag(sprintf <<DIAGNOSTIC, $got, $expect);
593
 
         got: %s
594
 
    expected: %s
595
 
DIAGNOSTIC
596
 
 
597
 
}    
598
 
 
599
 
=item B<isnt_eq>
600
 
 
601
 
  $Test->isnt_eq($got, $dont_expect, $name);
602
 
 
603
 
Like Test::More's isnt().  Checks if $got ne $dont_expect.  This is
604
 
the string version.
605
 
 
606
 
=item B<isnt_num>
607
 
 
608
 
  $Test->isnt_num($got, $dont_expect, $name);
609
 
 
610
 
Like Test::More's isnt().  Checks if $got ne $dont_expect.  This is
611
 
the numeric version.
612
 
 
613
 
=cut
614
 
 
615
 
sub isnt_eq {
616
 
    my($self, $got, $dont_expect, $name) = @_;
617
 
    local $Level = $Level + 1;
618
 
 
619
 
    if( !defined $got || !defined $dont_expect ) {
620
 
        # undef only matches undef and nothing else
621
 
        my $test = defined $got || defined $dont_expect;
622
 
 
623
 
        $self->ok($test, $name);
624
 
        $self->_cmp_diag($got, 'ne', $dont_expect) unless $test;
625
 
        return $test;
626
 
    }
627
 
 
628
 
    return $self->cmp_ok($got, 'ne', $dont_expect, $name);
629
 
}
630
 
 
631
 
sub isnt_num {
632
 
    my($self, $got, $dont_expect, $name) = @_;
633
 
    local $Level = $Level + 1;
634
 
 
635
 
    if( !defined $got || !defined $dont_expect ) {
636
 
        # undef only matches undef and nothing else
637
 
        my $test = defined $got || defined $dont_expect;
638
 
 
639
 
        $self->ok($test, $name);
640
 
        $self->_cmp_diag($got, '!=', $dont_expect) unless $test;
641
 
        return $test;
642
 
    }
643
 
 
644
 
    return $self->cmp_ok($got, '!=', $dont_expect, $name);
645
 
}
646
 
 
647
 
 
648
 
=item B<like>
649
 
 
650
 
  $Test->like($this, qr/$regex/, $name);
651
 
  $Test->like($this, '/$regex/', $name);
652
 
 
653
 
Like Test::More's like().  Checks if $this matches the given $regex.
654
 
 
655
 
You'll want to avoid qr// if you want your tests to work before 5.005.
656
 
 
657
 
=item B<unlike>
658
 
 
659
 
  $Test->unlike($this, qr/$regex/, $name);
660
 
  $Test->unlike($this, '/$regex/', $name);
661
 
 
662
 
Like Test::More's unlike().  Checks if $this B<does not match> the
663
 
given $regex.
664
 
 
665
 
=cut
666
 
 
667
 
sub like {
668
 
    my($self, $this, $regex, $name) = @_;
669
 
 
670
 
    local $Level = $Level + 1;
671
 
    $self->_regex_ok($this, $regex, '=~', $name);
672
 
}
673
 
 
674
 
sub unlike {
675
 
    my($self, $this, $regex, $name) = @_;
676
 
 
677
 
    local $Level = $Level + 1;
678
 
    $self->_regex_ok($this, $regex, '!~', $name);
679
 
}
680
 
 
681
 
=item B<maybe_regex>
682
 
 
683
 
  $Test->maybe_regex(qr/$regex/);
684
 
  $Test->maybe_regex('/$regex/');
685
 
 
686
 
Convenience method for building testing functions that take regular
687
 
expressions as arguments, but need to work before perl 5.005.
688
 
 
689
 
Takes a quoted regular expression produced by qr//, or a string
690
 
representing a regular expression.
691
 
 
692
 
Returns a Perl value which may be used instead of the corresponding
693
 
regular expression, or undef if it's argument is not recognised.
694
 
 
695
 
For example, a version of like(), sans the useful diagnostic messages,
696
 
could be written as:
697
 
 
698
 
  sub laconic_like {
699
 
      my ($self, $this, $regex, $name) = @_;
700
 
      my $usable_regex = $self->maybe_regex($regex);
701
 
      die "expecting regex, found '$regex'\n"
702
 
          unless $usable_regex;
703
 
      $self->ok($this =~ m/$usable_regex/, $name);
704
 
  }
705
 
 
706
 
=cut
707
 
 
708
 
 
709
 
sub maybe_regex {
710
 
    my ($self, $regex) = @_;
711
 
    my $usable_regex = undef;
712
 
 
713
 
    return $usable_regex unless defined $regex;
714
 
 
715
 
    my($re, $opts);
716
 
 
717
 
    # Check for qr/foo/
718
 
    if( ref $regex eq 'Regexp' ) {
719
 
        $usable_regex = $regex;
720
 
    }
721
 
    # Check for '/foo/' or 'm,foo,'
722
 
    elsif( ($re, $opts)        = $regex =~ m{^ /(.*)/ (\w*) $ }sx           or
723
 
           (undef, $re, $opts) = $regex =~ m,^ m([^\w\s]) (.+) \1 (\w*) $,sx
724
 
         )
725
 
    {
726
 
        $usable_regex = length $opts ? "(?$opts)$re" : $re;
727
 
    }
728
 
 
729
 
    return $usable_regex;
730
 
};
731
 
 
732
 
sub _regex_ok {
733
 
    my($self, $this, $regex, $cmp, $name) = @_;
734
 
 
735
 
    my $ok = 0;
736
 
    my $usable_regex = $self->maybe_regex($regex);
737
 
    unless (defined $usable_regex) {
738
 
        $ok = $self->ok( 0, $name );
739
 
        $self->diag("    '$regex' doesn't look much like a regex to me.");
740
 
        return $ok;
741
 
    }
742
 
 
743
 
    {
744
 
        my $test;
745
 
        my $code = $self->_caller_context;
746
 
 
747
 
        local($@, $!);
748
 
 
749
 
        # Yes, it has to look like this or 5.4.5 won't see the #line directive.
750
 
        # Don't ask me, man, I just work here.
751
 
        $test = eval "
752
 
$code" . q{$test = $this =~ /$usable_regex/ ? 1 : 0};
753
 
 
754
 
        $test = !$test if $cmp eq '!~';
755
 
 
756
 
        local $Level = $Level + 1;
757
 
        $ok = $self->ok( $test, $name );
758
 
    }
759
 
 
760
 
    unless( $ok ) {
761
 
        $this = defined $this ? "'$this'" : 'undef';
762
 
        my $match = $cmp eq '=~' ? "doesn't match" : "matches";
763
 
        $self->diag(sprintf <<DIAGNOSTIC, $this, $match, $regex);
764
 
                  %s
765
 
    %13s '%s'
766
 
DIAGNOSTIC
767
 
 
768
 
    }
769
 
 
770
 
    return $ok;
771
 
}
772
 
 
773
 
=item B<cmp_ok>
774
 
 
775
 
  $Test->cmp_ok($this, $type, $that, $name);
776
 
 
777
 
Works just like Test::More's cmp_ok().
778
 
 
779
 
    $Test->cmp_ok($big_num, '!=', $other_big_num);
780
 
 
781
 
=cut
782
 
 
783
 
 
784
 
my %numeric_cmps = map { ($_, 1) } 
785
 
                       ("<",  "<=", ">",  ">=", "==", "!=", "<=>");
786
 
 
787
 
sub cmp_ok {
788
 
    my($self, $got, $type, $expect, $name) = @_;
789
 
 
790
 
    # Treat overloaded objects as numbers if we're asked to do a
791
 
    # numeric comparison.
792
 
    my $unoverload = $numeric_cmps{$type} ? '_unoverload_num'
793
 
                                          : '_unoverload_str';
794
 
 
795
 
    $self->$unoverload(\$got, \$expect);
796
 
 
797
 
 
798
 
    my $test;
799
 
    {
800
 
        local($@,$!);   # don't interfere with $@
801
 
                        # eval() sometimes resets $!
802
 
 
803
 
        my $code = $self->_caller_context;
804
 
 
805
 
        # Yes, it has to look like this or 5.4.5 won't see the #line directive.
806
 
        # Don't ask me, man, I just work here.
807
 
        $test = eval "
808
 
$code" . "\$got $type \$expect;";
809
 
 
810
 
    }
811
 
    local $Level = $Level + 1;
812
 
    my $ok = $self->ok($test, $name);
813
 
 
814
 
    unless( $ok ) {
815
 
        if( $type =~ /^(eq|==)$/ ) {
816
 
            $self->_is_diag($got, $type, $expect);
817
 
        }
818
 
        else {
819
 
            $self->_cmp_diag($got, $type, $expect);
820
 
        }
821
 
    }
822
 
    return $ok;
823
 
}
824
 
 
825
 
sub _cmp_diag {
826
 
    my($self, $got, $type, $expect) = @_;
827
 
    
828
 
    $got    = defined $got    ? "'$got'"    : 'undef';
829
 
    $expect = defined $expect ? "'$expect'" : 'undef';
830
 
    return $self->diag(sprintf <<DIAGNOSTIC, $got, $type, $expect);
831
 
    %s
832
 
        %s
833
 
    %s
834
 
DIAGNOSTIC
835
 
}
836
 
 
837
 
 
838
 
sub _caller_context {
839
 
    my $self = shift;
840
 
 
841
 
    my($pack, $file, $line) = $self->caller(1);
842
 
 
843
 
    my $code = '';
844
 
    $code .= "#line $line $file\n" if defined $file and defined $line;
845
 
 
846
 
    return $code;
847
 
}
848
 
 
849
 
 
850
 
=item B<BAIL_OUT>
851
 
 
852
 
    $Test->BAIL_OUT($reason);
853
 
 
854
 
Indicates to the Test::Harness that things are going so badly all
855
 
testing should terminate.  This includes running any additional test
856
 
scripts.
857
 
 
858
 
It will exit with 255.
859
 
 
860
 
=cut
861
 
 
862
 
sub BAIL_OUT {
863
 
    my($self, $reason) = @_;
864
 
 
865
 
    $self->{Bailed_Out} = 1;
866
 
    $self->_print("Bail out!  $reason");
867
 
    exit 255;
868
 
}
869
 
 
870
 
=for deprecated
871
 
BAIL_OUT() used to be BAILOUT()
872
 
 
873
 
=cut
874
 
 
875
 
*BAILOUT = \&BAIL_OUT;
876
 
 
877
 
 
878
 
=item B<skip>
879
 
 
880
 
    $Test->skip;
881
 
    $Test->skip($why);
882
 
 
883
 
Skips the current test, reporting $why.
884
 
 
885
 
=cut
886
 
 
887
 
sub skip {
888
 
    my($self, $why) = @_;
889
 
    $why ||= '';
890
 
    $self->_unoverload_str(\$why);
891
 
 
892
 
    unless( $self->{Have_Plan} ) {
893
 
        require Carp;
894
 
        Carp::croak("You tried to run tests without a plan!  Gotta have a plan.");
895
 
    }
896
 
 
897
 
    lock($self->{Curr_Test});
898
 
    $self->{Curr_Test}++;
899
 
 
900
 
    $self->{Test_Results}[$self->{Curr_Test}-1] = &share({
901
 
        'ok'      => 1,
902
 
        actual_ok => 1,
903
 
        name      => '',
904
 
        type      => 'skip',
905
 
        reason    => $why,
906
 
    });
907
 
 
908
 
    my $out = "ok";
909
 
    $out   .= " $self->{Curr_Test}" if $self->use_numbers;
910
 
    $out   .= " # skip";
911
 
    $out   .= " $why"       if length $why;
912
 
    $out   .= "\n";
913
 
 
914
 
    $self->_print($out);
915
 
 
916
 
    return 1;
917
 
}
918
 
 
919
 
 
920
 
=item B<todo_skip>
921
 
 
922
 
  $Test->todo_skip;
923
 
  $Test->todo_skip($why);
924
 
 
925
 
Like skip(), only it will declare the test as failing and TODO.  Similar
926
 
to
927
 
 
928
 
    print "not ok $tnum # TODO $why\n";
929
 
 
930
 
=cut
931
 
 
932
 
sub todo_skip {
933
 
    my($self, $why) = @_;
934
 
    $why ||= '';
935
 
 
936
 
    unless( $self->{Have_Plan} ) {
937
 
        require Carp;
938
 
        Carp::croak("You tried to run tests without a plan!  Gotta have a plan.");
939
 
    }
940
 
 
941
 
    lock($self->{Curr_Test});
942
 
    $self->{Curr_Test}++;
943
 
 
944
 
    $self->{Test_Results}[$self->{Curr_Test}-1] = &share({
945
 
        'ok'      => 1,
946
 
        actual_ok => 0,
947
 
        name      => '',
948
 
        type      => 'todo_skip',
949
 
        reason    => $why,
950
 
    });
951
 
 
952
 
    my $out = "not ok";
953
 
    $out   .= " $self->{Curr_Test}" if $self->use_numbers;
954
 
    $out   .= " # TODO & SKIP $why\n";
955
 
 
956
 
    $self->_print($out);
957
 
 
958
 
    return 1;
959
 
}
960
 
 
961
 
 
962
 
=begin _unimplemented
963
 
 
964
 
=item B<skip_rest>
965
 
 
966
 
  $Test->skip_rest;
967
 
  $Test->skip_rest($reason);
968
 
 
969
 
Like skip(), only it skips all the rest of the tests you plan to run
970
 
and terminates the test.
971
 
 
972
 
If you're running under no_plan, it skips once and terminates the
973
 
test.
974
 
 
975
 
=end _unimplemented
976
 
 
977
 
=back
978
 
 
979
 
 
980
 
=head2 Test style
981
 
 
982
 
=over 4
983
 
 
984
 
=item B<level>
985
 
 
986
 
    $Test->level($how_high);
987
 
 
988
 
How far up the call stack should $Test look when reporting where the
989
 
test failed.
990
 
 
991
 
Defaults to 1.
992
 
 
993
 
Setting $Test::Builder::Level overrides.  This is typically useful
994
 
localized:
995
 
 
996
 
    {
997
 
        local $Test::Builder::Level = 2;
998
 
        $Test->ok($test);
999
 
    }
1000
 
 
1001
 
=cut
1002
 
 
1003
 
sub level {
1004
 
    my($self, $level) = @_;
1005
 
 
1006
 
    if( defined $level ) {
1007
 
        $Level = $level;
1008
 
    }
1009
 
    return $Level;
1010
 
}
1011
 
 
1012
 
 
1013
 
=item B<use_numbers>
1014
 
 
1015
 
    $Test->use_numbers($on_or_off);
1016
 
 
1017
 
Whether or not the test should output numbers.  That is, this if true:
1018
 
 
1019
 
  ok 1
1020
 
  ok 2
1021
 
  ok 3
1022
 
 
1023
 
or this if false
1024
 
 
1025
 
  ok
1026
 
  ok
1027
 
  ok
1028
 
 
1029
 
Most useful when you can't depend on the test output order, such as
1030
 
when threads or forking is involved.
1031
 
 
1032
 
Test::Harness will accept either, but avoid mixing the two styles.
1033
 
 
1034
 
Defaults to on.
1035
 
 
1036
 
=cut
1037
 
 
1038
 
sub use_numbers {
1039
 
    my($self, $use_nums) = @_;
1040
 
 
1041
 
    if( defined $use_nums ) {
1042
 
        $self->{Use_Nums} = $use_nums;
1043
 
    }
1044
 
    return $self->{Use_Nums};
1045
 
}
1046
 
 
1047
 
 
1048
 
=item B<no_diag>
1049
 
 
1050
 
    $Test->no_diag($no_diag);
1051
 
 
1052
 
If set true no diagnostics will be printed.  This includes calls to
1053
 
diag().
1054
 
 
1055
 
=item B<no_ending>
1056
 
 
1057
 
    $Test->no_ending($no_ending);
1058
 
 
1059
 
Normally, Test::Builder does some extra diagnostics when the test
1060
 
ends.  It also changes the exit code as described below.
1061
 
 
1062
 
If this is true, none of that will be done.
1063
 
 
1064
 
=item B<no_header>
1065
 
 
1066
 
    $Test->no_header($no_header);
1067
 
 
1068
 
If set to true, no "1..N" header will be printed.
1069
 
 
1070
 
=cut
1071
 
 
1072
 
foreach my $attribute (qw(No_Header No_Ending No_Diag)) {
1073
 
    my $method = lc $attribute;
1074
 
 
1075
 
    my $code = sub {
1076
 
        my($self, $no) = @_;
1077
 
 
1078
 
        if( defined $no ) {
1079
 
            $self->{$attribute} = $no;
1080
 
        }
1081
 
        return $self->{$attribute};
1082
 
    };
1083
 
 
1084
 
    no strict 'refs';
1085
 
    *{__PACKAGE__.'::'.$method} = $code;
1086
 
}
1087
 
 
1088
 
 
1089
 
=back
1090
 
 
1091
 
=head2 Output
1092
 
 
1093
 
Controlling where the test output goes.
1094
 
 
1095
 
It's ok for your test to change where STDOUT and STDERR point to,
1096
 
Test::Builder's default output settings will not be affected.
1097
 
 
1098
 
=over 4
1099
 
 
1100
 
=item B<diag>
1101
 
 
1102
 
    $Test->diag(@msgs);
1103
 
 
1104
 
Prints out the given @msgs.  Like C<print>, arguments are simply
1105
 
appended together.
1106
 
 
1107
 
Normally, it uses the failure_output() handle, but if this is for a
1108
 
TODO test, the todo_output() handle is used.
1109
 
 
1110
 
Output will be indented and marked with a # so as not to interfere
1111
 
with test output.  A newline will be put on the end if there isn't one
1112
 
already.
1113
 
 
1114
 
We encourage using this rather than calling print directly.
1115
 
 
1116
 
Returns false.  Why?  Because diag() is often used in conjunction with
1117
 
a failing test (C<ok() || diag()>) it "passes through" the failure.
1118
 
 
1119
 
    return ok(...) || diag(...);
1120
 
 
1121
 
=for blame transfer
1122
 
Mark Fowler <mark@twoshortplanks.com>
1123
 
 
1124
 
=cut
1125
 
 
1126
 
sub diag {
1127
 
    my($self, @msgs) = @_;
1128
 
 
1129
 
    return if $self->no_diag;
1130
 
    return unless @msgs;
1131
 
 
1132
 
    # Prevent printing headers when compiling (i.e. -c)
1133
 
    return if $^C;
1134
 
 
1135
 
    # Smash args together like print does.
1136
 
    # Convert undef to 'undef' so its readable.
1137
 
    my $msg = join '', map { defined($_) ? $_ : 'undef' } @msgs;
1138
 
 
1139
 
    # Escape each line with a #.
1140
 
    $msg =~ s/^/# /gm;
1141
 
 
1142
 
    # Stick a newline on the end if it needs it.
1143
 
    $msg .= "\n" unless $msg =~ /\n\Z/;
1144
 
 
1145
 
    local $Level = $Level + 1;
1146
 
    $self->_print_diag($msg);
1147
 
 
1148
 
    return 0;
1149
 
}
1150
 
 
1151
 
=begin _private
1152
 
 
1153
 
=item B<_print>
1154
 
 
1155
 
    $Test->_print(@msgs);
1156
 
 
1157
 
Prints to the output() filehandle.
1158
 
 
1159
 
=end _private
1160
 
 
1161
 
=cut
1162
 
 
1163
 
sub _print {
1164
 
    my($self, @msgs) = @_;
1165
 
 
1166
 
    # Prevent printing headers when only compiling.  Mostly for when
1167
 
    # tests are deparsed with B::Deparse
1168
 
    return if $^C;
1169
 
 
1170
 
    my $msg = join '', @msgs;
1171
 
 
1172
 
    local($\, $", $,) = (undef, ' ', '');
1173
 
    my $fh = $self->output;
1174
 
 
1175
 
    # Escape each line after the first with a # so we don't
1176
 
    # confuse Test::Harness.
1177
 
    $msg =~ s/\n(.)/\n# $1/sg;
1178
 
 
1179
 
    # Stick a newline on the end if it needs it.
1180
 
    $msg .= "\n" unless $msg =~ /\n\Z/;
1181
 
 
1182
 
    print $fh $msg;
1183
 
}
1184
 
 
1185
 
 
1186
 
=item B<_print_diag>
1187
 
 
1188
 
    $Test->_print_diag(@msg);
1189
 
 
1190
 
Like _print, but prints to the current diagnostic filehandle.
1191
 
 
1192
 
=cut
1193
 
 
1194
 
sub _print_diag {
1195
 
    my $self = shift;
1196
 
 
1197
 
    local($\, $", $,) = (undef, ' ', '');
1198
 
    my $fh = $self->todo ? $self->todo_output : $self->failure_output;
1199
 
    print $fh @_;
1200
 
}    
1201
 
 
1202
 
=item B<output>
1203
 
 
1204
 
    $Test->output($fh);
1205
 
    $Test->output($file);
1206
 
 
1207
 
Where normal "ok/not ok" test output should go.
1208
 
 
1209
 
Defaults to STDOUT.
1210
 
 
1211
 
=item B<failure_output>
1212
 
 
1213
 
    $Test->failure_output($fh);
1214
 
    $Test->failure_output($file);
1215
 
 
1216
 
Where diagnostic output on test failures and diag() should go.
1217
 
 
1218
 
Defaults to STDERR.
1219
 
 
1220
 
=item B<todo_output>
1221
 
 
1222
 
    $Test->todo_output($fh);
1223
 
    $Test->todo_output($file);
1224
 
 
1225
 
Where diagnostics about todo test failures and diag() should go.
1226
 
 
1227
 
Defaults to STDOUT.
1228
 
 
1229
 
=cut
1230
 
 
1231
 
sub output {
1232
 
    my($self, $fh) = @_;
1233
 
 
1234
 
    if( defined $fh ) {
1235
 
        $self->{Out_FH} = _new_fh($fh);
1236
 
    }
1237
 
    return $self->{Out_FH};
1238
 
}
1239
 
 
1240
 
sub failure_output {
1241
 
    my($self, $fh) = @_;
1242
 
 
1243
 
    if( defined $fh ) {
1244
 
        $self->{Fail_FH} = _new_fh($fh);
1245
 
    }
1246
 
    return $self->{Fail_FH};
1247
 
}
1248
 
 
1249
 
sub todo_output {
1250
 
    my($self, $fh) = @_;
1251
 
 
1252
 
    if( defined $fh ) {
1253
 
        $self->{Todo_FH} = _new_fh($fh);
1254
 
    }
1255
 
    return $self->{Todo_FH};
1256
 
}
1257
 
 
1258
 
 
1259
 
sub _new_fh {
1260
 
    my($file_or_fh) = shift;
1261
 
 
1262
 
    my $fh;
1263
 
    if( _is_fh($file_or_fh) ) {
1264
 
        $fh = $file_or_fh;
1265
 
    }
1266
 
    else {
1267
 
        $fh = do { local *FH };
1268
 
        open $fh, ">$file_or_fh" or 
1269
 
            die "Can't open test output log $file_or_fh: $!";
1270
 
        _autoflush($fh);
1271
 
    }
1272
 
 
1273
 
    return $fh;
1274
 
}
1275
 
 
1276
 
 
1277
 
sub _is_fh {
1278
 
    my $maybe_fh = shift;
1279
 
    return 0 unless defined $maybe_fh;
1280
 
 
1281
 
    return 1 if ref \$maybe_fh eq 'GLOB'; # its a glob
1282
 
 
1283
 
    return UNIVERSAL::isa($maybe_fh,               'GLOB')       ||
1284
 
           UNIVERSAL::isa($maybe_fh,               'IO::Handle') ||
1285
 
 
1286
 
           # 5.5.4's tied() and can() doesn't like getting undef
1287
 
           UNIVERSAL::can((tied($maybe_fh) || ''), 'TIEHANDLE');
1288
 
}
1289
 
 
1290
 
 
1291
 
sub _autoflush {
1292
 
    my($fh) = shift;
1293
 
    my $old_fh = select $fh;
1294
 
    $| = 1;
1295
 
    select $old_fh;
1296
 
}
1297
 
 
1298
 
 
1299
 
sub _dup_stdhandles {
1300
 
    my $self = shift;
1301
 
 
1302
 
    $self->_open_testhandles;
1303
 
 
1304
 
    # Set everything to unbuffered else plain prints to STDOUT will
1305
 
    # come out in the wrong order from our own prints.
1306
 
    _autoflush(\*TESTOUT);
1307
 
    _autoflush(\*STDOUT);
1308
 
    _autoflush(\*TESTERR);
1309
 
    _autoflush(\*STDERR);
1310
 
 
1311
 
    $self->output(\*TESTOUT);
1312
 
    $self->failure_output(\*TESTERR);
1313
 
    $self->todo_output(\*TESTOUT);
1314
 
}
1315
 
 
1316
 
 
1317
 
my $Opened_Testhandles = 0;
1318
 
sub _open_testhandles {
1319
 
    return if $Opened_Testhandles;
1320
 
    # We dup STDOUT and STDERR so people can change them in their
1321
 
    # test suites while still getting normal test output.
1322
 
    open(TESTOUT, ">&STDOUT") or die "Can't dup STDOUT:  $!";
1323
 
    open(TESTERR, ">&STDERR") or die "Can't dup STDERR:  $!";
1324
 
    $Opened_Testhandles = 1;
1325
 
}
1326
 
 
1327
 
 
1328
 
=back
1329
 
 
1330
 
 
1331
 
=head2 Test Status and Info
1332
 
 
1333
 
=over 4
1334
 
 
1335
 
=item B<current_test>
1336
 
 
1337
 
    my $curr_test = $Test->current_test;
1338
 
    $Test->current_test($num);
1339
 
 
1340
 
Gets/sets the current test number we're on.  You usually shouldn't
1341
 
have to set this.
1342
 
 
1343
 
If set forward, the details of the missing tests are filled in as 'unknown'.
1344
 
if set backward, the details of the intervening tests are deleted.  You
1345
 
can erase history if you really want to.
1346
 
 
1347
 
=cut
1348
 
 
1349
 
sub current_test {
1350
 
    my($self, $num) = @_;
1351
 
 
1352
 
    lock($self->{Curr_Test});
1353
 
    if( defined $num ) {
1354
 
        unless( $self->{Have_Plan} ) {
1355
 
            require Carp;
1356
 
            Carp::croak("Can't change the current test number without a plan!");
1357
 
        }
1358
 
 
1359
 
        $self->{Curr_Test} = $num;
1360
 
 
1361
 
        # If the test counter is being pushed forward fill in the details.
1362
 
        my $test_results = $self->{Test_Results};
1363
 
        if( $num > @$test_results ) {
1364
 
            my $start = @$test_results ? @$test_results : 0;
1365
 
            for ($start..$num-1) {
1366
 
                $test_results->[$_] = &share({
1367
 
                    'ok'      => 1, 
1368
 
                    actual_ok => undef, 
1369
 
                    reason    => 'incrementing test number', 
1370
 
                    type      => 'unknown', 
1371
 
                    name      => undef 
1372
 
                });
1373
 
            }
1374
 
        }
1375
 
        # If backward, wipe history.  Its their funeral.
1376
 
        elsif( $num < @$test_results ) {
1377
 
            $#{$test_results} = $num - 1;
1378
 
        }
1379
 
    }
1380
 
    return $self->{Curr_Test};
1381
 
}
1382
 
 
1383
 
 
1384
 
=item B<summary>
1385
 
 
1386
 
    my @tests = $Test->summary;
1387
 
 
1388
 
A simple summary of the tests so far.  True for pass, false for fail.
1389
 
This is a logical pass/fail, so todos are passes.
1390
 
 
1391
 
Of course, test #1 is $tests[0], etc...
1392
 
 
1393
 
=cut
1394
 
 
1395
 
sub summary {
1396
 
    my($self) = shift;
1397
 
 
1398
 
    return map { $_->{'ok'} } @{ $self->{Test_Results} };
1399
 
}
1400
 
 
1401
 
=item B<details>
1402
 
 
1403
 
    my @tests = $Test->details;
1404
 
 
1405
 
Like summary(), but with a lot more detail.
1406
 
 
1407
 
    $tests[$test_num - 1] = 
1408
 
            { 'ok'       => is the test considered a pass?
1409
 
              actual_ok  => did it literally say 'ok'?
1410
 
              name       => name of the test (if any)
1411
 
              type       => type of test (if any, see below).
1412
 
              reason     => reason for the above (if any)
1413
 
            };
1414
 
 
1415
 
'ok' is true if Test::Harness will consider the test to be a pass.
1416
 
 
1417
 
'actual_ok' is a reflection of whether or not the test literally
1418
 
printed 'ok' or 'not ok'.  This is for examining the result of 'todo'
1419
 
tests.  
1420
 
 
1421
 
'name' is the name of the test.
1422
 
 
1423
 
'type' indicates if it was a special test.  Normal tests have a type
1424
 
of ''.  Type can be one of the following:
1425
 
 
1426
 
    skip        see skip()
1427
 
    todo        see todo()
1428
 
    todo_skip   see todo_skip()
1429
 
    unknown     see below
1430
 
 
1431
 
Sometimes the Test::Builder test counter is incremented without it
1432
 
printing any test output, for example, when current_test() is changed.
1433
 
In these cases, Test::Builder doesn't know the result of the test, so
1434
 
it's type is 'unkown'.  These details for these tests are filled in.
1435
 
They are considered ok, but the name and actual_ok is left undef.
1436
 
 
1437
 
For example "not ok 23 - hole count # TODO insufficient donuts" would
1438
 
result in this structure:
1439
 
 
1440
 
    $tests[22] =    # 23 - 1, since arrays start from 0.
1441
 
      { ok        => 1,   # logically, the test passed since it's todo
1442
 
        actual_ok => 0,   # in absolute terms, it failed
1443
 
        name      => 'hole count',
1444
 
        type      => 'todo',
1445
 
        reason    => 'insufficient donuts'
1446
 
      };
1447
 
 
1448
 
=cut
1449
 
 
1450
 
sub details {
1451
 
    my $self = shift;
1452
 
    return @{ $self->{Test_Results} };
1453
 
}
1454
 
 
1455
 
=item B<todo>
1456
 
 
1457
 
    my $todo_reason = $Test->todo;
1458
 
    my $todo_reason = $Test->todo($pack);
1459
 
 
1460
 
todo() looks for a $TODO variable in your tests.  If set, all tests
1461
 
will be considered 'todo' (see Test::More and Test::Harness for
1462
 
details).  Returns the reason (ie. the value of $TODO) if running as
1463
 
todo tests, false otherwise.
1464
 
 
1465
 
todo() is about finding the right package to look for $TODO in.  It
1466
 
uses the exported_to() package to find it.  If that's not set, it's
1467
 
pretty good at guessing the right package to look at based on $Level.
1468
 
 
1469
 
Sometimes there is some confusion about where todo() should be looking
1470
 
for the $TODO variable.  If you want to be sure, tell it explicitly
1471
 
what $pack to use.
1472
 
 
1473
 
=cut
1474
 
 
1475
 
sub todo {
1476
 
    my($self, $pack) = @_;
1477
 
 
1478
 
    $pack = $pack || $self->exported_to || $self->caller($Level);
1479
 
    return 0 unless $pack;
1480
 
 
1481
 
    no strict 'refs';
1482
 
    return defined ${$pack.'::TODO'} ? ${$pack.'::TODO'}
1483
 
                                     : 0;
1484
 
}
1485
 
 
1486
 
=item B<caller>
1487
 
 
1488
 
    my $package = $Test->caller;
1489
 
    my($pack, $file, $line) = $Test->caller;
1490
 
    my($pack, $file, $line) = $Test->caller($height);
1491
 
 
1492
 
Like the normal caller(), except it reports according to your level().
1493
 
 
1494
 
=cut
1495
 
 
1496
 
sub caller {
1497
 
    my($self, $height) = @_;
1498
 
    $height ||= 0;
1499
 
 
1500
 
    my @caller = CORE::caller($self->level + $height + 1);
1501
 
    return wantarray ? @caller : $caller[0];
1502
 
}
1503
 
 
1504
 
=back
1505
 
 
1506
 
=cut
1507
 
 
1508
 
=begin _private
1509
 
 
1510
 
=over 4
1511
 
 
1512
 
=item B<_sanity_check>
1513
 
 
1514
 
  $self->_sanity_check();
1515
 
 
1516
 
Runs a bunch of end of test sanity checks to make sure reality came
1517
 
through ok.  If anything is wrong it will die with a fairly friendly
1518
 
error message.
1519
 
 
1520
 
=cut
1521
 
 
1522
 
#'#
1523
 
sub _sanity_check {
1524
 
    my $self = shift;
1525
 
 
1526
 
    _whoa($self->{Curr_Test} < 0,  'Says here you ran a negative number of tests!');
1527
 
    _whoa(!$self->{Have_Plan} and $self->{Curr_Test}, 
1528
 
          'Somehow your tests ran without a plan!');
1529
 
    _whoa($self->{Curr_Test} != @{ $self->{Test_Results} },
1530
 
          'Somehow you got a different number of results than tests ran!');
1531
 
}
1532
 
 
1533
 
=item B<_whoa>
1534
 
 
1535
 
  _whoa($check, $description);
1536
 
 
1537
 
A sanity check, similar to assert().  If the $check is true, something
1538
 
has gone horribly wrong.  It will die with the given $description and
1539
 
a note to contact the author.
1540
 
 
1541
 
=cut
1542
 
 
1543
 
sub _whoa {
1544
 
    my($check, $desc) = @_;
1545
 
    if( $check ) {
1546
 
        die <<WHOA;
1547
 
WHOA!  $desc
1548
 
This should never happen!  Please contact the author immediately!
1549
 
WHOA
1550
 
    }
1551
 
}
1552
 
 
1553
 
=item B<_my_exit>
1554
 
 
1555
 
  _my_exit($exit_num);
1556
 
 
1557
 
Perl seems to have some trouble with exiting inside an END block.  5.005_03
1558
 
and 5.6.1 both seem to do odd things.  Instead, this function edits $?
1559
 
directly.  It should ONLY be called from inside an END block.  It
1560
 
doesn't actually exit, that's your job.
1561
 
 
1562
 
=cut
1563
 
 
1564
 
sub _my_exit {
1565
 
    $? = $_[0];
1566
 
 
1567
 
    return 1;
1568
 
}
1569
 
 
1570
 
 
1571
 
=back
1572
 
 
1573
 
=end _private
1574
 
 
1575
 
=cut
1576
 
 
1577
 
$SIG{__DIE__} = sub {
1578
 
    # We don't want to muck with death in an eval, but $^S isn't
1579
 
    # totally reliable.  5.005_03 and 5.6.1 both do the wrong thing
1580
 
    # with it.  Instead, we use caller.  This also means it runs under
1581
 
    # 5.004!
1582
 
    my $in_eval = 0;
1583
 
    for( my $stack = 1;  my $sub = (CORE::caller($stack))[3];  $stack++ ) {
1584
 
        $in_eval = 1 if $sub =~ /^\(eval\)/;
1585
 
    }
1586
 
    $Test->{Test_Died} = 1 unless $in_eval;
1587
 
};
1588
 
 
1589
 
sub _ending {
1590
 
    my $self = shift;
1591
 
 
1592
 
    $self->_sanity_check();
1593
 
 
1594
 
    # Don't bother with an ending if this is a forked copy.  Only the parent
1595
 
    # should do the ending.
1596
 
    # Exit if plan() was never called.  This is so "require Test::Simple" 
1597
 
    # doesn't puke.
1598
 
    # Don't do an ending if we bailed out.
1599
 
    if( ($self->{Original_Pid} != $$)                   or
1600
 
        (!$self->{Have_Plan} && !$self->{Test_Died})    or
1601
 
        $self->{Bailed_Out}
1602
 
      )
1603
 
    {
1604
 
        _my_exit($?);
1605
 
        return;
1606
 
    }
1607
 
 
1608
 
    # Figure out if we passed or failed and print helpful messages.
1609
 
    my $test_results = $self->{Test_Results};
1610
 
    if( @$test_results ) {
1611
 
        # The plan?  We have no plan.
1612
 
        if( $self->{No_Plan} ) {
1613
 
            $self->_print("1..$self->{Curr_Test}\n") unless $self->no_header;
1614
 
            $self->{Expected_Tests} = $self->{Curr_Test};
1615
 
        }
1616
 
 
1617
 
        # Auto-extended arrays and elements which aren't explicitly
1618
 
        # filled in with a shared reference will puke under 5.8.0
1619
 
        # ithreads.  So we have to fill them in by hand. :(
1620
 
        my $empty_result = &share({});
1621
 
        for my $idx ( 0..$self->{Expected_Tests}-1 ) {
1622
 
            $test_results->[$idx] = $empty_result
1623
 
              unless defined $test_results->[$idx];
1624
 
        }
1625
 
 
1626
 
        my $num_failed = grep !$_->{'ok'}, 
1627
 
                              @{$test_results}[0..$self->{Curr_Test}-1];
1628
 
 
1629
 
        my $num_extra = $self->{Curr_Test} - $self->{Expected_Tests};
1630
 
 
1631
 
        if( $num_extra < 0 ) {
1632
 
            my $s = $self->{Expected_Tests} == 1 ? '' : 's';
1633
 
            $self->diag(<<"FAIL");
1634
 
Looks like you planned $self->{Expected_Tests} test$s but only ran $self->{Curr_Test}.
1635
 
FAIL
1636
 
        }
1637
 
        elsif( $num_extra > 0 ) {
1638
 
            my $s = $self->{Expected_Tests} == 1 ? '' : 's';
1639
 
            $self->diag(<<"FAIL");
1640
 
Looks like you planned $self->{Expected_Tests} test$s but ran $num_extra extra.
1641
 
FAIL
1642
 
        }
1643
 
 
1644
 
        if ( $num_failed ) {
1645
 
            my $num_tests = $self->{Curr_Test};
1646
 
            my $s = $num_failed == 1 ? '' : 's';
1647
 
 
1648
 
            my $qualifier = $num_extra == 0 ? '' : ' run';
1649
 
 
1650
 
            $self->diag(<<"FAIL");
1651
 
Looks like you failed $num_failed test$s of $num_tests$qualifier.
1652
 
FAIL
1653
 
        }
1654
 
 
1655
 
        if( $self->{Test_Died} ) {
1656
 
            $self->diag(<<"FAIL");
1657
 
Looks like your test died just after $self->{Curr_Test}.
1658
 
FAIL
1659
 
 
1660
 
            _my_exit( 255 ) && return;
1661
 
        }
1662
 
 
1663
 
        my $exit_code;
1664
 
        if( $num_failed ) {
1665
 
            $exit_code = $num_failed <= 254 ? $num_failed : 254;
1666
 
        }
1667
 
        elsif( $num_extra != 0 ) {
1668
 
            $exit_code = 255;
1669
 
        }
1670
 
        else {
1671
 
            $exit_code = 0;
1672
 
        }
1673
 
 
1674
 
        _my_exit( $exit_code ) && return;
1675
 
    }
1676
 
    elsif ( $self->{Skip_All} ) {
1677
 
        _my_exit( 0 ) && return;
1678
 
    }
1679
 
    elsif ( $self->{Test_Died} ) {
1680
 
        $self->diag(<<'FAIL');
1681
 
Looks like your test died before it could output anything.
1682
 
FAIL
1683
 
        _my_exit( 255 ) && return;
1684
 
    }
1685
 
    else {
1686
 
        $self->diag("No tests run!\n");
1687
 
        _my_exit( 255 ) && return;
1688
 
    }
1689
 
}
1690
 
 
1691
 
END {
1692
 
    $Test->_ending if defined $Test and !$Test->no_ending;
1693
 
}
1694
 
 
1695
 
=head1 EXIT CODES
1696
 
 
1697
 
If all your tests passed, Test::Builder will exit with zero (which is
1698
 
normal).  If anything failed it will exit with how many failed.  If
1699
 
you run less (or more) tests than you planned, the missing (or extras)
1700
 
will be considered failures.  If no tests were ever run Test::Builder
1701
 
will throw a warning and exit with 255.  If the test died, even after
1702
 
having successfully completed all its tests, it will still be
1703
 
considered a failure and will exit with 255.
1704
 
 
1705
 
So the exit codes are...
1706
 
 
1707
 
    0                   all tests successful
1708
 
    255                 test died or all passed but wrong # of tests run
1709
 
    any other number    how many failed (including missing or extras)
1710
 
 
1711
 
If you fail more than 254 tests, it will be reported as 254.
1712
 
 
1713
 
 
1714
 
=head1 THREADS
1715
 
 
1716
 
In perl 5.8.0 and later, Test::Builder is thread-safe.  The test
1717
 
number is shared amongst all threads.  This means if one thread sets
1718
 
the test number using current_test() they will all be effected.
1719
 
 
1720
 
Test::Builder is only thread-aware if threads.pm is loaded I<before>
1721
 
Test::Builder.
1722
 
 
1723
 
=head1 EXAMPLES
1724
 
 
1725
 
CPAN can provide the best examples.  Test::Simple, Test::More,
1726
 
Test::Exception and Test::Differences all use Test::Builder.
1727
 
 
1728
 
=head1 SEE ALSO
1729
 
 
1730
 
Test::Simple, Test::More, Test::Harness
1731
 
 
1732
 
=head1 AUTHORS
1733
 
 
1734
 
Original code by chromatic, maintained by Michael G Schwern
1735
 
E<lt>schwern@pobox.comE<gt>
1736
 
 
1737
 
=head1 COPYRIGHT
1738
 
 
1739
 
Copyright 2002, 2004 by chromatic E<lt>chromatic@wgz.orgE<gt> and
1740
 
                        Michael G Schwern E<lt>schwern@pobox.comE<gt>.
1741
 
 
1742
 
This program is free software; you can redistribute it and/or 
1743
 
modify it under the same terms as Perl itself.
1744
 
 
1745
 
See F<http://www.perl.com/perl/misc/Artistic.html>
1746
 
 
1747
 
=cut
1748
 
 
1749
 
1;