s3:winbindd_cm: use cli_state_is_connected() helper function
[kai/samba-autobuild/.git] / selftest / Subunit / Filter.pm
index 443baeb7ddb8d70944e16318c2e5177274331977..4a94f258f1513268b80b27a00ea7f518356985e4 100644 (file)
@@ -15,6 +15,7 @@ sub read_test_regexes($)
        while (<LF>) { 
                chomp; 
                next if (/^#/);
+               next if (/^$/);
                if (/^(.*?)([ \t]+)\#([\t ]*)(.*?)$/) {
                        push (@ret, [$1, $4]);
                } else {
@@ -54,7 +55,11 @@ sub report_time($$)
 sub output_msg($$)
 {
        my ($self, $msg) = @_;
-       print $msg;
+       unless(defined($self->{output})) {
+               print $msg;
+       } else {
+               $self->{output}.=$msg;
+       }
 }
 
 sub start_test($$)
@@ -65,6 +70,10 @@ sub start_test($$)
                $testname = $self->{prefix}.$testname;
        }
 
+       if ($self->{strip_ok_output}) {
+               $self->{output} = "";
+       }
+
        Subunit::start_test($testname);
 }
 
@@ -79,14 +88,33 @@ sub end_test($$$$$)
        if (($result eq "fail" or $result eq "failure") and not $unexpected) {
                $result = "xfail";
                $self->{xfail_added}++;
+               $self->{total_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";
                $self->{xfail_added}++;
+               $self->{total_xfail}++;
                $reason .= $xfail_reason;
        }
 
+       if ($result eq "fail" or $result eq "failure") {
+               $self->{fail_added}++;
+               $self->{total_fail}++;
+       }
+
+       if ($result eq "error") {
+               $self->{error_added}++;
+               $self->{total_error}++;
+       }
+
+       if ($self->{strip_ok_output}) {
+               unless ($result eq "success" or $result eq "xfail" or $result eq "skip") {
+                       print $self->{output}
+               }
+       }
+       $self->{output} = undef;
+
        Subunit::end_test($testname, $result, $reason);
 }
 
@@ -100,16 +128,37 @@ sub start_testsuite($;$)
 {
        my ($self, $name) = @_;
        Subunit::start_testsuite($name);
+
+       $self->{error_added} = 0;
+       $self->{fail_added} = 0;
        $self->{xfail_added} = 0;
 }
 
 sub end_testsuite($$;$)
 {
        my ($self, $name, $result, $reason) = @_;
-       if ($self->{xfail_added} and ($result eq "fail" or $result eq "failure")) {
+       my $xfail = 0;
+
+       $xfail = 1 if ($self->{xfail_added} > 0);
+       $xfail = 0 if ($self->{fail_added} > 0);
+       $xfail = 0 if ($self->{error_added} > 0);
+
+       if ($xfail and ($result eq "fail" or $result eq "failure")) {
                $result = "xfail";
        }
-               
+
+       if ($self->{fail_added} > 0 and $result ne "failure") {
+               $result = "failure";
+               $reason = "Subunit/Filer Reason" unless defined($reason);
+               $reason .= "\n failures[$self->{fail_added}]";
+       }
+
+       if ($self->{error_added} > 0 and $result ne "error") {
+               $result = "error";
+               $reason = "Subunit/Filer Reason" unless defined($reason);
+               $reason .= "\n errors[$self->{error_added}]";
+       }
+
        Subunit::end_testsuite($name, $result, $reason);
 }
 
@@ -120,12 +169,16 @@ sub testsuite_count($$)
 }
 
 sub new {
-       my ($class, $prefix, $expected_failures) = @_;
+       my ($class, $prefix, $expected_failures, $strip_ok_output) = @_;
 
        my $self = { 
                prefix => $prefix,
                expected_failures => $expected_failures,
+               strip_ok_output => $strip_ok_output,
                xfail_added => 0,
+               total_xfail => 0,
+               total_error => 0,
+               total_fail => 0
        };
        bless($self, $class);
 }