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
|
#!/usr/bin/perl -w
BEGIN {
if ( $ENV{PERL_CORE} ) {
chdir 't';
@INC = ( '../lib', '../ext/Test-Harness/t/lib' );
}
else {
unshift @INC, 't/lib';
}
}
use strict;
use TAP::Harness;
use Test::More tests => 13;
my %class_map = (
aggregator_class => 'My::TAP::Parser::Aggregator',
formatter_class => 'My::TAP::Formatter::Console',
multiplexer_class => 'My::TAP::Parser::Multiplexer',
parser_class => 'My::TAP::Parser',
scheduler_class => 'My::TAP::Parser::Scheduler',
);
my %loaded = ();
# Synthesize our subclasses
for my $class ( values %class_map ) {
( my $base_class = $class ) =~ s/^My:://;
use_ok($base_class);
no strict 'refs';
@{"${class}::ISA"} = ($base_class);
*{"${class}::new"} = sub {
my $pkg = shift;
$loaded{$pkg} = 1;
# Can't use SUPER outside a package
return $base_class->can('new')->( $pkg, @_ );
};
}
{
ok my $harness = TAP::Harness->new( { %class_map, verbosity => -9 } ),
'created harness';
isa_ok $harness, 'TAP::Harness';
# Test dynamic loading
ok !$INC{'NOP.pm'}, 'NOP not loaded';
ok my $nop = $harness->_construct('NOP'), 'loaded and created';
isa_ok $nop, 'NOP';
ok $INC{'NOP.pm'}, 'NOP loaded';
my $aggregate = $harness->runtests(
File::Spec->catfile(
( $ENV{PERL_CORE}
? ( File::Spec->updir, 'ext', 'Test-Harness' )
: ()
),
't',
'sample-tests',
'simple'
)
);
isa_ok $aggregate, 'My::TAP::Parser::Aggregator';
is_deeply \%loaded,
{ 'My::TAP::Parser::Aggregator' => 1,
'My::TAP::Formatter::Console' => 1,
'My::TAP::Parser' => 1,
'My::TAP::Parser::Scheduler' => 1,
},
'loaded our classes';
}
|