1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
#!/usr/bin/perl -w
use strict;
use lib 't/lib';
# We're going to need to override exit() later
BEGIN {
*CORE::GLOBAL::exit = sub(;$) {
my $status = @_ ? 0 : shift;
CORE::exit $status;
};
}
use Test::More;
use Test::Builder;
use Test::Builder::NoOutput;
{
my $tb = Test::Builder::NoOutput->create;
ok $tb->is_passing, "a fresh TB object is passing";
$tb->ok(1);
ok $tb->is_passing, " still passing after a test";
$tb->ok(0);
ok !$tb->is_passing, " not passing after a failing test";
$tb->ok(1);
ok !$tb->is_passing, " a passing test doesn't resurrect it";
$tb->done_testing(3);
ok !$tb->is_passing, " a successful plan doesn't help either";
}
# See if is_passing() notices a plan overrun
{
my $tb = Test::Builder::NoOutput->create;
$tb->plan( tests => 1 );
$tb->ok(1);
ok $tb->is_passing, "Passing with a plan";
$tb->ok(1);
ok !$tb->is_passing, " passing test, but it overran the plan";
}
# is_passing() vs no_plan
{
my $tb = Test::Builder::NoOutput->create;
$tb->plan( "no_plan" );
ok $tb->is_passing, "Passing with no_plan";
$tb->ok(1);
ok $tb->is_passing, " still passing after a test";
$tb->ok(1);
ok $tb->is_passing, " and another test";
$tb->_ending;
ok $tb->is_passing, " and after the ending";
}
# is_passing() vs skip_all
{
my $tb = Test::Builder::NoOutput->create;
{
no warnings 'redefine';
local *CORE::GLOBAL::exit = sub {
return 1;
};
$tb->plan( "skip_all" );
}
ok $tb->is_passing, "Passing with skip_all";
}
# is_passing() vs done_testing(#)
{
my $tb = Test::Builder::NoOutput->create;
$tb->ok(1);
$tb->done_testing(2);
ok !$tb->is_passing, "All tests passed but done_testing() does not match";
}
# is_passing() with no tests run vs done_testing()
{
my $tb = Test::Builder::NoOutput->create;
$tb->done_testing();
ok !$tb->is_passing, "No tests run with done_testing()";
}
# is_passing() with no tests run vs done_testing()
{
my $tb = Test::Builder::NoOutput->create;
$tb->ok(1);
$tb->done_testing();
ok $tb->is_passing, "All tests passed with done_testing()";
}
done_testing();
|