2 # Filter a subunit stream
3 # Copyright (C) Jelmer Vernooij <jelmer@samba.org>
4 # Published under the GNU GPL, v3 or later
6 package Subunit::Filter;
10 sub read_test_regexes($)
14 open(LF, "<$name") or die("unable to read $name: $!");
19 if (/^(.*?)([ \t]+)\#([\t ]*)(.*?)$/) {
20 push (@ret, [$1, $4]);
22 s/^(.*?)([ \t]+)\#([\t ]*)(.*?)$//;
23 push (@ret, [$_, undef]);
32 my ($list, $fullname) = @_;
35 if ($fullname =~ /$$_[0]/) {
36 return ($$_[1]) if ($$_[1]);
46 # We regenerate control messages, so ignore this
51 my ($self, $time) = @_;
52 Subunit::report_time($time);
57 my ($self, $msg) = @_;
58 unless(defined($self->{output})) {
61 $self->{output}.=$msg;
67 my ($self, $testname) = @_;
69 if (defined($self->{prefix})) {
70 $testname = $self->{prefix}.$testname;
73 if ($self->{strip_ok_output}) {
77 Subunit::start_test($testname);
82 my ($self, $testname, $result, $unexpected, $reason) = @_;
84 if (defined($self->{prefix})) {
85 $testname = $self->{prefix}.$testname;
88 if (($result eq "fail" or $result eq "failure") and not $unexpected) {
90 $self->{xfail_added}++;
92 my $xfail_reason = find_in_list($self->{expected_failures}, $testname);
93 if (defined($xfail_reason) and ($result eq "fail" or $result eq "failure")) {
95 $self->{xfail_added}++;
96 $reason .= $xfail_reason;
99 if ($result eq "fail" or $result eq "failure") {
100 $self->{fail_added}++;
103 if ($self->{strip_ok_output}) {
104 unless ($result eq "success" or $result eq "xfail" or $result eq "skip") {
105 print $self->{output}
108 $self->{output} = undef;
110 Subunit::end_test($testname, $result, $reason);
113 sub skip_testsuite($;$)
115 my ($self, $name, $reason) = @_;
116 Subunit::skip_testsuite($name, $reason);
119 sub start_testsuite($;$)
121 my ($self, $name) = @_;
122 Subunit::start_testsuite($name);
123 $self->{fail_added} = 0;
124 $self->{xfail_added} = 0;
127 sub end_testsuite($$;$)
129 my ($self, $name, $result, $reason) = @_;
130 if ($self->{fail_added} == 0 and $self->{xfail_added} and
131 ($result eq "fail" or $result eq "failure")) {
135 Subunit::end_testsuite($name, $result, $reason);
138 sub testsuite_count($$)
140 my ($self, $count) = @_;
141 Subunit::testsuite_count($count);
145 my ($class, $prefix, $expected_failures, $strip_ok_output) = @_;
149 expected_failures => $expected_failures,
150 strip_ok_output => $strip_ok_output,
153 bless($self, $class);