60 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
| #!/usr/bin/env perl
 | |
| 
 | |
| use strict;
 | |
| use warnings;
 | |
| 
 | |
| use lib 'xt/lib';
 | |
| use Module::Find;
 | |
| 
 | |
| my @BAD_MODULES = qw(
 | |
|   Test::SNMP::Info::MAU
 | |
|   Test::SNMP::Info::Layer3::C4000
 | |
| );
 | |
| 
 | |
| my @found = findallmod 'Test::SNMP::Info';
 | |
| unshift @found, 'Test::SNMP::Info';
 | |
| 
 | |
| # pass a specific module to test,
 | |
| # using e.g. "prove xt/21_run.t :: Test::SNMP::Info::MAU"
 | |
| if (scalar @ARGV) { @found = @ARGV }
 | |
| 
 | |
| # cannot do this inline with findallmod
 | |
| @found = sort { (scalar split m/::/, $a) <=> (scalar split m/::/, $b)
 | |
|                     or
 | |
|                 $a cmp $b } @found;
 | |
| 
 | |
| my $total = scalar @found - scalar @BAD_MODULES;
 | |
| my $count = 0;
 | |
| 
 | |
| # fake test plan
 | |
| print "1..$total\n";
 | |
| 
 | |
| foreach my $module (@found) {
 | |
|   if (grep m/^${module}$/, @BAD_MODULES) {
 | |
|     # printf STDERR "!!> skipping: %s\n", $module;
 | |
|     next;
 | |
|   }
 | |
| 
 | |
|   my $preamble = <<'END_CODE_PREAMBLE';
 | |
|     # this is to avoid annoying plan warnings with the way subtests are done
 | |
|     {
 | |
|       use Hook::LexWrap;
 | |
|       use Test::Builder;
 | |
|       no warnings 'redefine';
 | |
|       wrap *Test::Builder::diag, pre => sub {
 | |
|         $_[-1] = 1
 | |
|           if $_[1] and $_[1] =~ m/Tests were run but no plan was declared/;
 | |
|       };
 | |
|     }
 | |
| END_CODE_PREAMBLE
 | |
| 
 | |
|   my $code = <<"END_CODE";
 | |
|     $module->builder->current_test($count);
 | |
|     Test::More::subtest '$module' => sub { $module->runtests() };
 | |
| END_CODE
 | |
| 
 | |
|   # printf STDERR "--> %d: %s\n", ($count + 1), $module;
 | |
|   system (qw{perl -Ilib -Ixt/lib}, "-M$module", '-e', $preamble . $code);
 | |
|   ++$count;
 | |
| }
 |