X-Git-Url: http://git.samba.org/samba.git/?p=nivanova%2Fsamba-autobuild%2F.git;a=blobdiff_plain;f=selftest%2FSubunit.pm;h=1cc0e721696673b9c21a873fb03d4acd618767de;hp=0bbb795c8c24acbf2a7f63504b43ebb6efc7249c;hb=ae0ba6bd833f71c4337ae3b6621bf797cb3c48c2;hpb=9e108009d0d4ec97a4b9cf989e3cb2cbc74f4ded diff --git a/selftest/Subunit.pm b/selftest/Subunit.pm index 0bbb795c8c2..1cc0e721696 100644 --- a/selftest/Subunit.pm +++ b/selftest/Subunit.pm @@ -1,5 +1,5 @@ -# Simple Perl module for parsing the Subunit protocol -# Copyright (C) 2008 Jelmer Vernooij +# Perl module for parsing and generating the Subunit protocol +# Copyright (C) 2008-2009 Jelmer Vernooij # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -19,100 +19,9 @@ use POSIX; require Exporter; @ISA = qw(Exporter); -@EXPORT_OK = qw(parse_results); use strict; -sub parse_results($$$$$) -{ - my ($msg_ops, $statistics, $fh, $expecting_failure, $open_tests) = @_; - my $unexpected_ok = 0; - my $expected_fail = 0; - my $unexpected_fail = 0; - my $unexpected_err = 0; - my $orig_open_len = $#$open_tests; - - while(<$fh>) { - if (/^test: (.+)\n/) { - $msg_ops->control_msg($_); - $msg_ops->start_test($open_tests, $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)); - } elsif (/^(success|successful|failure|skip|knownfail|error): (.*?)( \[)?([ \t]*)\n/) { - $msg_ops->control_msg($_); - my $reason = undef; - if ($3) { - $reason = ""; - # reason may be specified in next lines - my $terminated = 0; - while(<$fh>) { - $msg_ops->control_msg($_); - if ($_ eq "]\n") { $terminated = 1; last; } else { $reason .= $_; } - } - - unless ($terminated) { - $statistics->{TESTS_ERROR}++; - $msg_ops->end_test($open_tests, $2, $1, 1, "reason interrupted"); - return 1; - } - } - my $result = $1; - if ($1 eq "success" or $1 eq "successful") { - pop(@$open_tests); #FIXME: Check that popped value == $2 - if ($expecting_failure->(join(".", @$open_tests) . ".$2")) { - $statistics->{TESTS_UNEXPECTED_OK}++; - $msg_ops->end_test($open_tests, $2, $1, 1, $reason); - $unexpected_ok++; - } else { - $statistics->{TESTS_EXPECTED_OK}++; - $msg_ops->end_test($open_tests, $2, $1, 0, $reason); - } - } elsif ($1 eq "failure") { - pop(@$open_tests); #FIXME: Check that popped value == $2 - if ($expecting_failure->(join(".", @$open_tests) . ".$2")) { - $statistics->{TESTS_EXPECTED_FAIL}++; - $msg_ops->end_test($open_tests, $2, $1, 0, $reason); - $expected_fail++; - } else { - $statistics->{TESTS_UNEXPECTED_FAIL}++; - $msg_ops->end_test($open_tests, $2, $1, 1, $reason); - $unexpected_fail++; - } - } elsif ($1 eq "knownfail") { - pop(@$open_tests); #FIXME: Check that popped value == $2 - $statistics->{TESTS_EXPECTED_FAIL}++; - $msg_ops->end_test($open_tests, $2, $1, 0, $reason); - } elsif ($1 eq "skip") { - $statistics->{TESTS_SKIP}++; - pop(@$open_tests); #FIXME: Check that popped value == $2 - $msg_ops->end_test($open_tests, $2, $1, 0, $reason); - } elsif ($1 eq "error") { - $statistics->{TESTS_ERROR}++; - pop(@$open_tests); #FIXME: Check that popped value == $2 - $msg_ops->end_test($open_tests, $2, $1, 1, $reason); - $unexpected_err++; - } - } else { - $msg_ops->output_msg($_); - } - } - - while ($#$open_tests > $orig_open_len) { - $msg_ops->end_test($open_tests, pop(@$open_tests), "error", 1, - "was started but never finished!"); - $statistics->{TESTS_ERROR}++; - $unexpected_err++; - } - - 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; -} - sub start_test($) { my ($testname) = @_; @@ -125,7 +34,10 @@ sub end_test($$;$) my $result = shift; my $reason = shift; if ($reason) { - print "$result: $name [ $reason ]\n"; + print "$result: $name [\n"; + print $reason; + if (substr($reason, -1, 1) ne "\n") { print "\n"; } + print "]\n"; } else { print "$result: $name\n"; } @@ -135,7 +47,65 @@ 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; + $sec = ($time - int($time) + $sec); + my $msg = sprintf("%f", $sec); + if (substr($msg, 1, 1) eq ".") { + $msg = "0" . $msg; + } + printf "time: %04d-%02d-%02d %02d:%02d:%s\n", $year+1900, $mon+1, $mday, $hour, $min, $msg; +} + +sub progress_pop() +{ + print "progress: pop\n"; +} + +sub progress_push() +{ + print "progress: push\n"; +} + +sub progress($;$) +{ + my ($count, $whence) = @_; + + unless(defined($whence)) { + $whence = ""; + } + + print "progress: $whence$count\n"; +} + +# The following are Samba extensions: + +sub start_testsuite($) +{ + my ($name) = @_; + print "testsuite: $name\n"; +} + +sub skip_testsuite($;$) +{ + my ($name, $reason) = @_; + if ($reason) { + print "skip-testsuite: $name [\n$reason\n]\n"; + } else { + print "skip-testsuite: $name\n"; + } +} + +sub end_testsuite($$;$) +{ + my $name = shift; + my $result = shift; + my $reason = shift; + if ($reason) { + print "testsuite-$result: $name [\n"; + print "$reason\n"; + print "]\n"; + } else { + print "testsuite-$result: $name\n"; + } } 1;