1#!/usr/bin/perl -w
2
3BEGIN {
4    unshift @INC, 't/lib';
5}
6
7use strict;
8use warnings;
9use TAP::Harness;
10use Test::More tests => 13;
11
12my %class_map = (
13    aggregator_class  => 'My::TAP::Parser::Aggregator',
14    formatter_class   => 'My::TAP::Formatter::Console',
15    multiplexer_class => 'My::TAP::Parser::Multiplexer',
16    parser_class      => 'My::TAP::Parser',
17    scheduler_class   => 'My::TAP::Parser::Scheduler',
18);
19
20my %loaded = ();
21
22# Synthesize our subclasses
23for my $class ( values %class_map ) {
24    ( my $base_class = $class ) =~ s/^My:://;
25    use_ok($base_class);
26
27    no strict 'refs';
28    @{"${class}::ISA"} = ($base_class);
29    *{"${class}::new"} = sub {
30        my $pkg = shift;
31        $loaded{$pkg} = 1;
32
33        # Can't use SUPER outside a package
34        return $base_class->can('new')->( $pkg, @_ );
35    };
36}
37
38{
39    ok my $harness = TAP::Harness->new( { %class_map, verbosity => -9 } ),
40      'created harness';
41    isa_ok $harness, 'TAP::Harness';
42
43    # Test dynamic loading
44    ok !$INC{'NOP.pm'}, 'NOP not loaded';
45    ok my $nop = $harness->_construct('NOP'), 'loaded and created';
46    isa_ok $nop, 'NOP';
47    ok $INC{'NOP.pm'}, 'NOP loaded';
48
49    my $aggregate = $harness->runtests(
50        File::Spec->catfile(
51            't',
52            'sample-tests',
53            'simple'
54        )
55    );
56
57    isa_ok $aggregate, 'My::TAP::Parser::Aggregator';
58
59    is_deeply \%loaded,
60      { 'My::TAP::Parser::Aggregator' => 1,
61        'My::TAP::Formatter::Console' => 1,
62        'My::TAP::Parser'             => 1,
63        'My::TAP::Parser::Scheduler'  => 1,
64      },
65      'loaded our classes';
66}
67