cee6c1e63a8f4609eaabd36b19923eb8420f5289
[ira/wip.git] / selftest / output / buildfarm.pm
1 #!/usr/bin/perl
2
3 package output::buildfarm;
4
5 use Exporter;
6 @ISA = qw(Exporter);
7
8 use FindBin qw($RealBin);
9 use lib "$RealBin/..";
10
11 use Subunit qw(parse_results);
12
13 use strict;
14
15 sub new($$$) {
16         my ($class) = @_;
17         my $self = {
18                 test_output => {},
19                 start_time => time()
20         };
21         bless($self, $class);
22 }
23
24 sub start_testsuite($$)
25 {
26         my ($self, $name) = @_;
27         my $out = "";
28
29         $self->{NAME} = $name;
30         $self->{START_TIME} = time();
31
32         my $duration = $self->{START_TIME} - $self->{start_time};
33         $out .= "--==--==--==--==--==--==--==--==--==--==--\n";
34         $out .= "Running test $name (level 0 stdout)\n";
35         $out .= "--==--==--==--==--==--==--==--==--==--==--\n";
36         $out .= scalar(localtime())."\n";
37         $out .= "SELFTEST RUNTIME: " . $duration . "s\n";
38         $out .= "NAME: $name\n";
39
40         $self->{test_output}->{$name} = "";
41
42         print $out;
43 }
44
45 sub output_msg($$)
46 {
47         my ($self, $output) = @_;
48
49         $self->{test_output}->{$self->{NAME}} .= $output;
50 }
51
52 sub control_msg($$)
53 {
54         my ($self, $output) = @_;
55
56         $self->{test_output}->{$self->{NAME}} .= $output;
57 }
58
59 sub end_testsuite($$$$$$)
60 {
61         my ($self, $name, $result, $unexpected, $reason) = @_;
62         my $out = "";
63
64         $out .= "TEST RUNTIME: " . (time() - $self->{START_TIME}) . "s\n";
65
66         if (not $unexpected) {
67                 $out .= "ALL OK\n";
68         } else {
69                 $out .= "ERROR: $reason\n";
70                 $out .= $self->{test_output}->{$name};
71         }
72
73         $out .= "==========================================\n";
74         if (not $unexpected) {
75                 $out .= "TEST PASSED: $name\n";
76         } else {
77                 $out .= "TEST FAILED: $name (status $reason)\n";
78         }
79         $out .= "==========================================\n";
80
81         print $out;
82 }
83
84 sub start_test($$$)
85 {
86         my ($self, $parents, $testname) = @_;
87
88         if ($#$parents == -1) {
89                 $self->start_testsuite($testname);
90         }
91 }
92
93 sub end_test($$$$$)
94 {
95         my ($self, $parents, $testname, $result, $unexpected, $reason) = @_;
96
97         if ($unexpected) {
98                 $self->{test_output}->{$self->{NAME}} .= "UNEXPECTED($result): $testname\n";
99         }
100
101         if ($#$parents == -1) {
102                 $self->end_testsuite($testname, $result, $unexpected, $reason); 
103         }
104 }
105
106 sub summary($)
107 {
108         my ($self) = @_;
109
110         print "DURATION: " . (time() - $self->{start_time}) . " seconds\n";
111 }
112
113 sub skip_testsuite($$$$)
114 {
115         my ($self, $name, $reason) = @_;
116
117         print "SKIPPED: $name\n";
118 }
119
120 1;