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
117
118
119
120
121
122
|
#!/usr/bin/perl
# Filter a subunit stream
# Copyright (C) Jelmer Vernooij <jelmer@samba.org>
# Published under the GNU GPL, v3 or later
package Subunit::Filter;
use strict;
sub read_test_regexes($)
{
my ($name) = @_;
my @ret = ();
open(LF, "<$name") or die("unable to read $name: $!");
while (<LF>) {
chomp;
next if (/^#/);
if (/^(.*?)([ \t]+)\#([\t ]*)(.*?)$/) {
push (@ret, [$1, $4]);
} else {
s/^(.*?)([ \t]+)\#([\t ]*)(.*?)$//;
push (@ret, [$_, undef]);
}
}
close(LF);
return @ret;
}
sub find_in_list($$)
{
my ($list, $fullname) = @_;
foreach (@$list) {
if ($fullname =~ /$$_[0]/) {
return ($$_[1]) if ($$_[1]);
return "";
}
}
return undef;
}
sub control_msg()
{
# We regenerate control messages, so ignore this
}
sub report_time($$)
{
my ($self, $time) = @_;
Subunit::report_time($time);
}
sub output_msg($$)
{
my ($self, $msg) = @_;
print $msg;
}
sub start_test($$)
{
my ($self, $testname) = @_;
if (defined($self->{prefix})) {
$testname = $self->{prefix}.$testname;
}
Subunit::start_test($testname);
}
sub end_test($$$$$)
{
my ($self, $testname, $result, $unexpected, $reason) = @_;
if (defined($self->{prefix})) {
$testname = $self->{prefix}.$testname;
}
if (($result eq "fail" or $result eq "failure") and not $unexpected) { $result = "xfail"; }
my $xfail_reason = find_in_list($self->{expected_failures}, $testname);
if (defined($xfail_reason) and ($result eq "fail" or $result eq "failure")) {
$result = "xfail";
$reason .= $xfail_reason;
}
Subunit::end_test($testname, $result, $reason);
}
sub skip_testsuite($;$)
{
Subunit::skip_testsuite(@_);
}
sub start_testsuite($;$)
{
my ($self, $name) = @_;
Subunit::start_testsuite($name);
}
sub end_testsuite($$;$)
{
my ($self, $name, $result, $reason) = @_;
Subunit::end_testsuite($name, $result, $reason);
}
sub testsuite_count($$)
{
my ($self, $count) = @_;
Subunit::testsuite_count($count);
}
sub new {
my ($class, $prefix, $expected_failures) = @_;
my $self = {
prefix => $prefix,
expected_failures => $expected_failures,
};
bless($self, $class);
}
1;
|