s3-docs: Add man page for vfs_scannedonly.
[samba.git] / selftest / Subunit.pm
index 71d65f0ee533ca7a0c6e4d2c9611b0c3f6655843..9d67c8137afe0aa03ef1f8dd19ad3259cf44d922 100644 (file)
@@ -23,23 +23,22 @@ require Exporter;
 
 use strict;
 
-sub parse_results($$$$)
+sub parse_results($$$)
 {
-       my ($msg_ops, $statistics, $fh, $open_tests) = @_;
-       my $unexpected_ok = 0;
+       my ($msg_ops, $statistics, $fh) = @_;
        my $expected_fail = 0;
        my $unexpected_fail = 0;
        my $unexpected_err = 0;
-       my $orig_open_len = $#$open_tests;
+       my $open_tests = [];
 
        while(<$fh>) {
                if (/^test: (.+)\n/) {
                        $msg_ops->control_msg($_);
                        $msg_ops->start_test($1);
                        push (@$open_tests, $1);
-               } elsif (/^time: (\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)Z\n/) {
-                       $msg_ops->report_time(mktime($6, $5, $4, $3, $2, $1-1900));
-               } elsif (/^(success|successful|failure|fail|skip|knownfail|error|xfail|skip-testsuite|testsuite-failure|testsuite-success|testsuite-error): (.*?)( \[)?([ \t]*)\n/) {
+               } elsif (/^time: (\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)\n/) {
+                       $msg_ops->report_time(mktime($6, $5, $4, $3, $2-1, $1-1900));
+               } elsif (/^(success|successful|failure|fail|skip|knownfail|error|xfail|skip-testsuite|testsuite-failure|testsuite-xfail|testsuite-success|testsuite-error): (.*?)( \[)?([ \t]*)\n/) {
                        $msg_ops->control_msg($_);
                        my $result = $1;
                        my $testname = $2;
@@ -55,35 +54,37 @@ sub parse_results($$$$)
                                
                                unless ($terminated) {
                                        $statistics->{TESTS_ERROR}++;
-                                       $msg_ops->end_test($testname, "error", 1, "reason ($result) interrupted");
+                                       $msg_ops->end_test($testname, "error", 1, 
+                                                              "reason ($result) interrupted");
                                        return 1;
                                }
                        }
                        if ($result eq "success" or $result eq "successful") {
                                pop(@$open_tests); #FIXME: Check that popped value == $testname 
                                $statistics->{TESTS_EXPECTED_OK}++;
-                               $msg_ops->end_test($testname, $result, 0, $reason);
+                               $msg_ops->end_test($testname, "success", 0, $reason);
                        } elsif ($result eq "xfail" or $result eq "knownfail") {
                                pop(@$open_tests); #FIXME: Check that popped value == $testname
                                $statistics->{TESTS_EXPECTED_FAIL}++;
-                               $msg_ops->end_test($testname, $result, 0, $reason);
+                               $msg_ops->end_test($testname, "xfail", 0, $reason);
                                $expected_fail++;
                        } elsif ($result eq "failure" or $result eq "fail") {
                                pop(@$open_tests); #FIXME: Check that popped value == $testname
                                $statistics->{TESTS_UNEXPECTED_FAIL}++;
-                               $msg_ops->end_test($testname, $result, 1, $reason);
+                               $msg_ops->end_test($testname, "failure", 1, $reason);
                                $unexpected_fail++;
                        } elsif ($result eq "skip") {
                                $statistics->{TESTS_SKIP}++;
+                               # Allow tests to be skipped without prior announcement of test
                                my $last = pop(@$open_tests);
                                if (defined($last) and $last ne $testname) {
                                        push (@$open_tests, $testname);
                                }
-                               $msg_ops->end_test($testname, $result, 0, $reason);
+                               $msg_ops->end_test($testname, "skip", 0, $reason);
                        } elsif ($result eq "error") {
                                $statistics->{TESTS_ERROR}++;
                                pop(@$open_tests); #FIXME: Check that popped value == $testname
-                               $msg_ops->end_test($testname, $result, 1, $reason);
+                               $msg_ops->end_test($testname, "error", 1, $reason);
                                $unexpected_err++;
                        } elsif ($result eq "skip-testsuite") {
                                $msg_ops->skip_testsuite($testname);
@@ -91,6 +92,8 @@ sub parse_results($$$$)
                                $msg_ops->end_testsuite($testname, "success", $reason);
                        } elsif ($result eq "testsuite-failure") {
                                $msg_ops->end_testsuite($testname, "failure", $reason);
+                       } elsif ($result eq "testsuite-xfail") {
+                               $msg_ops->end_testsuite($testname, "xfail", $reason);
                        } elsif ($result eq "testsuite-error") {
                                $msg_ops->end_testsuite($testname, "error", $reason);
                        } 
@@ -103,7 +106,7 @@ sub parse_results($$$$)
                }
        }
 
-       while ($#$open_tests > $orig_open_len) {
+       while ($#$open_tests+1 > 0) {
                $msg_ops->end_test(pop(@$open_tests), "error", 1,
                                   "was started but never finished!");
                $statistics->{TESTS_ERROR}++;
@@ -112,10 +115,7 @@ sub parse_results($$$$)
 
        return 1 if $unexpected_err > 0;
        return 1 if $unexpected_fail > 0;
-       return 1 if $unexpected_ok > 0 and $expected_fail > 0;
-       return 0 if $unexpected_ok > 0 and $expected_fail == 0;
-       return 0 if $expected_fail > 0;
-       return 1;
+       return 0;
 }
 
 sub start_test($)
@@ -170,7 +170,7 @@ sub report_time($)
 {
        my ($time) = @_;
        my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($time);
-       printf "time: %04d-%02d-%02d %02d:%02d:%02dZ\n", $year+1900, $mon, $mday, $hour, $min, $sec;
+       printf "time: %04d-%02d-%02d %02d:%02d:%02d\n", $year+1900, $mon+1, $mday, $hour, $min, $sec;
 }
 
 # The following are Samba extensions:
@@ -185,7 +185,7 @@ sub skip_testsuite($;$)
 {
        my ($name, $reason) = @_;
        if ($reason) {
-               print "skip-testsuite: $name [$reason]\n";
+               print "skip-testsuite: $name [\n$reason\n]\n";
        } else {
                print "skip-testsuite: $name\n";
        }