-
Notifications
You must be signed in to change notification settings - Fork 138
/
fullharness
165 lines (149 loc) · 4.75 KB
/
fullharness
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#!perl
# Copyright (C) 2012, Parrot Foundation.
use strict;
use warnings;
use Carp;
use Getopt::Long;
use lib qw( ./lib );
use TAP::Harness;
use Parrot::Harness::TestSets qw(
%test_groups
@major_test_group
@near_core_test_group
);
use Parrot::Harness::Options qw(
get_test_prog_args
);
use Parrot::Harness::Smoke qw(
collect_test_environment_data
send_archive_to_smolder
);
my ($archive, $smolder, $IN_TESTING);
GetOptions(
'archive' => \$archive,
'send-to-smolder' => \$smolder,
'in-testing' => \$IN_TESTING,
);
my @runcore_test_files = glob("@{ $test_groups{runcore} }");
my @testing_runcore_test_files = glob("@{ $test_groups{testing_runcore} }");
my @targets = ();
my @alternate_runcore_targets = ( qw| b f r | );
foreach my $t (@alternate_runcore_targets) {
push @targets, set_alternate_runcore_target($t);
}
my @other_targets = ( qw|
src run buildtools perl
compilers dynoplibs dynpmc
library miscellaneous
codingstd benchmark manifest
examples distro headerizer
| );
foreach my $t ( @other_targets ) {
push @targets, set_usual_target($t);
}
if ($IN_TESTING) {
@targets = (
( map { set_alternate_runcore_target($_, $IN_TESTING) }
( qw| b f | ) ),
( map { set_usual_target($_) } ( qw| run manifest headerizer | ) ),
);
}
if ($archive) {
eval {
require TAP::Harness::Archive;
require TAP::Harness::Archive::MultipleHarnesses;
require TAP::Harness::ReportByDescription;
};
if ($@) {
my $msg = "To run make smolder_fulltest, please install \n";
$msg .= " TAP::Harness::Archive and TAP::Harness::ReportByDescription from CPAN.\n";
$msg .= " From the cpan shell: 'install TAP::Harness::ReportByDescription'.\n";
$msg .= " With cpanminus : cpanm TAP::Harness::ReportByDescription \n";
croak $msg;
}
my %env_data = collect_test_environment_data();
my $archive = TAP::Harness::Archive::MultipleHarnesses->new( {
verbosity => $ENV{HARNESS_VERBOSE},
archive => 't/archive/parrot_test_run.tar.gz',
merge => 1,
jobs => $ENV{TEST_JOBS} || 1,
extra_properties => \%env_data,
extra_files => [ 'myconfig', 'config_lib.pir' ],
} );
my $overall_aggregator = $archive->runtests(\@targets);
$archive->summary($overall_aggregator);
send_archive_to_smolder(%env_data) if $smolder;
}
else {
require TAP::Formatter::Console;
require TAP::Parser::Aggregator;
my ($formatter, $aggregator);
$formatter = TAP::Formatter::Console->new( {
verbosity => $ENV{HARNESS_VERBOSE},
jobs => $ENV{TEST_JOBS} || 1,
directives => 1,
timer => $ENV{HARNESS_TIMER} || 0,
} );
$aggregator = TAP::Parser::Aggregator->new;
$aggregator->start();
foreach my $set (@targets) {
# rewrite environment
&{$set->{rule}} if defined $set->{rule};
print STDERR "$set->{label}: running with: $ENV{TEST_PROG_ARGS}\n";
my $harness = TAP::Harness->new( {
formatter => $formatter,
jobs => $ENV{TEST_JOBS} || 1,
} );
$harness->aggregate_tests($aggregator, @{$set->{tests}});
}
$aggregator->stop();
$formatter->summary($aggregator);
# We'll treat both FAIL and NOTESTS as failures.
my $exit_value = ($aggregator->get_status() eq 'PASS') ? 0 : 1;
exit($exit_value);
}
##### SUBROUTINES #####
sub set_usual_env_args {
my %opts = ();
_handle_opts(\%opts);
}
sub set_alternate_runcore_env_args {
my $runcore = shift;
my %opts = ( $runcore => 1 );
_handle_opts(\%opts);
}
sub _handle_opts {
my $optsref = shift;
$optsref->{D} =
sprintf( '%x', hex(40) | (exists $optsref->{D} ? hex($optsref->{D}) : 0));
my $args = get_test_prog_args( $optsref, 1, 0 );
$ENV{TEST_PROG_ARGS} = $args;
}
sub set_alternate_runcore_target {
my ($alt, $in_testing) = @_;
return {
label => "test$alt",
rule => sub { set_alternate_runcore_env_args($alt) },
tests => [ map { [ $_, "test${alt}__$_", ] }
( $in_testing
? @testing_runcore_test_files
: @runcore_test_files
) ],
};
}
sub set_usual_target {
my $label = shift;
return {
label => $label,
rule => \&set_usual_env_args,
tests => [ map { [ $_, "${label}__$_" ] }
glob("@{$test_groups{$label}}")
],
};
}
# Local Variables:
# mode: cperl
# cperl-indent-level: 4
# fill-column: 100
# End:
# vim: expandtab shiftwidth=4: