Back in the early 90s when I was doing BASIC programming, I was soooo happy when I finally used a system which allowed me to automatically renumber my program lines. It made programming much easier. Today, I routinely find myself wedging tests between other tests since I number my tests.
10_class_trait.t 15_test_imports.t 20_trait_overload.t 30_trait_composition.t 40_Trait_Config_test.t 50_Trait_SUPER_test.t 60_Trait_mod_perl_test.t 70_Trait_SUPER2_test.t 80_Class_Trait_Lib_tests.t 90_trait_rename_does.t 91_trait_performs.t 99_trait_errors.t
Today I got fed up with that and wrote a simple test renumbering program. You may not find it useful but it does exactly what I need. Admittedly, tests should run in any order but I have a convention that lower numbered test failures should be addressed first as they're likely the ones causing other test errors.
The following is a bit of a hack and it's certainly not portable, but then, I didn't really right it for anyone else :)
#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Long;
my $dir = ".";
my $test_num = 10;
my $step = 10;
GetOptions(
"dir=s" => \$dir,
"start=i" => \$test_num,
"step=i" => \$step,
"dry" => \my $dry_run,
"svn" => \my $svn,
);
unless ( -d $dir ) {
die "I cannot find the directory ($dir)";
}
my @tests = glob "$dir/*.t";
unless (@tests) {
die "No tests found in ($dir)";
}
@tests =
sort grep { /^\d+/ }
map { s{^\Q$dir/}{}; $_ } @tests; # only take numbered tests
my $digits = length( $test_num + ( $step * @tests ) );
foreach my $test (@tests) {
my $new_name = $test;
$new_name =~ s{^\d+(.*)$}
{
my $name = sprintf "%0${digits}d$1", $test_num;
$test_num += $step;
$name
}e;
next if $new_name eq $test;
my @command = ( "mv", "$dir/$test", "$dir/$new_name" );
if ($svn) {
unshift @command, "svn";
}
if ($dry_run) {
print "@command\n";
}
else {
system(@command);
}
}
Re:Test::Manifest
mr_bean on 2005-11-21T03:08:44
Does this work with Module::Build? I see references to Makefile in the pod?Re:Test::Manifest
brian_d_foy on 2005-11-21T04:53:27
It will work when somebody patches it for Module::Build, which I don't use (at least not yet).