/
TestSetup.pm
116 lines (95 loc) · 2.35 KB
/
TestSetup.pm
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
107
108
109
110
111
112
113
114
115
116
# Standard test setup things.
# $Id$
package TestSetup;
use strict;
use Exporter;
@TestSetup::ISA = qw(Exporter);
@TestSetup::EXPORT = qw( &test_setup
&stderr_pause &stderr_resume
&ok ¬_ok &ok_if &ok_unless &results
);
my $test_count;
my @test_results;
sub test_setup {
$test_count = shift;
$ENV{PERL_DL_NONLAZY} = 0 if ($^O eq 'freebsd');
select(STDOUT); $|=1;
if ($test_count) {
print "1..$test_count\n";
}
else {
my $reason = join(' ', @_);
$reason = 'no reason' unless defined $reason and length $reason;
print "1..0 # skipped: $reason\n";
exit 0;
}
for (my $test = 1; $test <= $test_count; $test++) {
$test_results[$test] = undef;
}
}
# Opened twice to avoid a warning.
open STDERR_HOLD, '>&STDERR' or die "cannot save STDERR: $!";
open STDERR_HOLD, '>&STDERR' or die "cannot save STDERR: $!";
sub stderr_pause {
close STDERR;
}
sub stderr_resume {
open STDERR, '>&STDERR_HOLD' or print "cannot restore STDERR: $!";
}
sub results {
for (my $test = 1; $test < @test_results; $test++) {
if (defined $test_results[$test]) {
print $test_results[$test], "\n";
}
else {
print "not ok $test # no test result\n";
}
}
}
sub ok {
my $test_number = shift;
if (defined $test_results[$test_number]) {
$test_results[$test_number] = "not ok $test_number # duplicate outcome";
}
elsif ($test_number > $test_count) {
$test_results[$test_number] = "not ok $test_number # above $test_count";
}
else {
$test_results[$test_number] = "ok $test_number";
}
}
sub not_ok {
my ($test_number, $reason) = @_;
if (defined $test_results[$test_number]) {
$test_results[$test_number] = "not ok $test_number # duplicate outcome";
}
elsif ($test_number > $test_count) {
$test_results[$test_number] = "not ok $test_number # above $test_count";
}
else {
$test_results[$test_number] = "not ok $test_number" .
( (defined $reason and length $reason)
? " # $reason"
: ''
);
}
}
sub ok_if {
my ($test_number, $value, $reason) = @_;
if ($value) {
&ok($test_number);
}
else {
¬_ok($test_number, $reason);
}
}
sub ok_unless {
my ($test_number, $value, $reason) = @_;
unless ($value) {
&ok($test_number);
}
else {
¬_ok($test_number, $reason);
}
}
1;