s4-krb5: Fix typos in comment.
[Samba.git] / selftest / Subunit / Filter.pm
blob4a94f258f1513268b80b27a00ea7f518356985e4
1 #!/usr/bin/perl
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;
8 use strict;
10 sub read_test_regexes($)
12 my ($name) = @_;
13 my @ret = ();
14 open(LF, "<$name") or die("unable to read $name: $!");
15 while (<LF>) {
16 chomp;
17 next if (/^#/);
18 next if (/^$/);
19 if (/^(.*?)([ \t]+)\#([\t ]*)(.*?)$/) {
20 push (@ret, [$1, $4]);
21 } else {
22 s/^(.*?)([ \t]+)\#([\t ]*)(.*?)$//;
23 push (@ret, [$_, undef]);
26 close(LF);
27 return @ret;
30 sub find_in_list($$)
32 my ($list, $fullname) = @_;
34 foreach (@$list) {
35 if ($fullname =~ /$$_[0]/) {
36 return ($$_[1]) if ($$_[1]);
37 return "";
41 return undef;
44 sub control_msg()
46 # We regenerate control messages, so ignore this
49 sub report_time($$)
51 my ($self, $time) = @_;
52 Subunit::report_time($time);
55 sub output_msg($$)
57 my ($self, $msg) = @_;
58 unless(defined($self->{output})) {
59 print $msg;
60 } else {
61 $self->{output}.=$msg;
65 sub start_test($$)
67 my ($self, $testname) = @_;
69 if (defined($self->{prefix})) {
70 $testname = $self->{prefix}.$testname;
73 if ($self->{strip_ok_output}) {
74 $self->{output} = "";
77 Subunit::start_test($testname);
80 sub end_test($$$$$)
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) {
89 $result = "xfail";
90 $self->{xfail_added}++;
91 $self->{total_xfail}++;
93 my $xfail_reason = find_in_list($self->{expected_failures}, $testname);
94 if (defined($xfail_reason) and ($result eq "fail" or $result eq "failure")) {
95 $result = "xfail";
96 $self->{xfail_added}++;
97 $self->{total_xfail}++;
98 $reason .= $xfail_reason;
101 if ($result eq "fail" or $result eq "failure") {
102 $self->{fail_added}++;
103 $self->{total_fail}++;
106 if ($result eq "error") {
107 $self->{error_added}++;
108 $self->{total_error}++;
111 if ($self->{strip_ok_output}) {
112 unless ($result eq "success" or $result eq "xfail" or $result eq "skip") {
113 print $self->{output}
116 $self->{output} = undef;
118 Subunit::end_test($testname, $result, $reason);
121 sub skip_testsuite($;$)
123 my ($self, $name, $reason) = @_;
124 Subunit::skip_testsuite($name, $reason);
127 sub start_testsuite($;$)
129 my ($self, $name) = @_;
130 Subunit::start_testsuite($name);
132 $self->{error_added} = 0;
133 $self->{fail_added} = 0;
134 $self->{xfail_added} = 0;
137 sub end_testsuite($$;$)
139 my ($self, $name, $result, $reason) = @_;
140 my $xfail = 0;
142 $xfail = 1 if ($self->{xfail_added} > 0);
143 $xfail = 0 if ($self->{fail_added} > 0);
144 $xfail = 0 if ($self->{error_added} > 0);
146 if ($xfail and ($result eq "fail" or $result eq "failure")) {
147 $result = "xfail";
150 if ($self->{fail_added} > 0 and $result ne "failure") {
151 $result = "failure";
152 $reason = "Subunit/Filer Reason" unless defined($reason);
153 $reason .= "\n failures[$self->{fail_added}]";
156 if ($self->{error_added} > 0 and $result ne "error") {
157 $result = "error";
158 $reason = "Subunit/Filer Reason" unless defined($reason);
159 $reason .= "\n errors[$self->{error_added}]";
162 Subunit::end_testsuite($name, $result, $reason);
165 sub testsuite_count($$)
167 my ($self, $count) = @_;
168 Subunit::testsuite_count($count);
171 sub new {
172 my ($class, $prefix, $expected_failures, $strip_ok_output) = @_;
174 my $self = {
175 prefix => $prefix,
176 expected_failures => $expected_failures,
177 strip_ok_output => $strip_ok_output,
178 xfail_added => 0,
179 total_xfail => 0,
180 total_error => 0,
181 total_fail => 0
183 bless($self, $class);