use Test::More 'no_plan'; use YAMLTest; my $builder = Test::More->builder; foreach my $test (get_tests()) { my $current = $builder->current_test; my $expected = YAMLTest->run($test); is $builder->current_test, $current + $expected, "$test has good test count"; } #### #!/usr/bin/perl use strict; use warnings; use File::Find; use Test::More qw/no_plan/; my @test_files; find( { no_chdir => 1, wanted => sub { push @test_files => $File::Find::name if /\.t\z/ } }, 't/' ); sub slurp { my $file = shift; open my $fh, '<', $file or die "Cannot read ($file): $!"; return do { local $/; <$fh> }; } sub get_package { my $file = shift; $file =~ s/\W//g; return $file; } my $code = <<'END_CODE'; { no warnings 'redefine'; package Test::Builder; sub plan { my ( $self, $cmd, $arg ) = @_; return unless $cmd; local $Test::Builder::Level = $Test::Builder::Level + 1; if ( $cmd eq 'no_plan' ) { $self->no_plan; } elsif ( $cmd eq 'skip_all' ) { return $self->skip_all($arg); } elsif ( $cmd eq 'tests' ) { if ($arg) { local $Test::Builder::Level = $Test::Builder::Level + 1; return $self->expected_tests($arg); } elsif ( !defined $arg ) { $self->croak("Got an undefined number of tests"); } elsif ( !$arg ) { $self->croak("You said to run 0 tests"); } } else { my @args = grep { defined } ( $cmd, $arg ); $self->croak("plan() doesn't understand @args"); } return 1; } sub no_header { 1 } } END_CODE my @packages; foreach my $file (@test_files) { my $package = get_package($file); my $tests = slurp($file); next if $tests =~ /use\s+Config;/; # Why does this break things? next if $tests =~ /^__(?:DATA|END)__/m; push @packages => [ $package, $file ]; $code .= <<" END_CODE"; package $package; sub handler { $tests; } END_CODE } $code .= <<'END_CODE'; END { no warnings 'redefine'; *Test::Builder::no_header = sub { 0 } } END_CODE eval $code; if ( my $error = $@ ) { my $file = 'dump.t'; open my $fh, '>', $file or die "Cannot open ($file) for writing: $!"; print $fh $code; close $fh; BAIL_OUT("Cannot load modules: $error"); } foreach my $package (@packages) { ok $package->[0], ">>>>>>>> testing $package->[0]"; $package->[0]->handler; }