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