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