#!/usr/bin/perl
#package CPAN_Test
use strict;

our $DEBUG = 1;

use Benchmark ':hireswallclock';

my $console = "$ENV{HOME}/.xsession-errors";
open CONSOLE, ">>$console";

sub clean {
   my ( $folder, $package ) = @_;

   chdir $folder;
   system "perl Makefile.PL | grep OK";
   system "make clean | grep OK";
   system "rm Makefile.old 2>&1 | grep OK";
   system "rm MANIFEST 2>&1 | grep OK";
   system "rm MANIFEST.bak 2>&1 | grep OK";

   system "rm -r '$package-'[0-9].[0-9][0-9][0-9][0-9] 2>/dev/null";
}

sub test {
   my ( $folder, $package ) = @_;

   chdir $folder;
   system "mv lib/auto /tmp/$$-auto" if -e "lib/auto";
   system "perl Makefile.PL | grep OK";
   system "make 1>>$console";

   print CONSOLE "Benchmark $package/t . . .\n";
   my $count = 1;
   my $t     = timeit(
      $count, qq(
		system "make test 2>>$console | grep -v -E '^cp'"
	)
   );
   system "make manifest 2>&1 | grep OK";
   system "perl Makefile.PL | grep OK";
   print CONSOLE timestr($t), "\n";

   system "make dist 2>>$console | grep OK";

   system "mkdir -p ../test/";

   system "mv '$package-'[0-9].[0-9]*.gz ../test/ | grep OK";
   system "mv /tmp/$$-auto lib/auto" if -e "/tmp/$$-auto";

}

sub main {
   my $file = shift;

	$file = `realpath $file`; chomp $file;

   print CONSOLE "$file\n" if $DEBUG;

   if ( $file =~ m|(.*?/cpan/(.*?))/|o ) {
      my ( $folder, $package ) = ( $1, $2 );
      print CONSOLE "#" x 80, "\n";
      print CONSOLE "Testing $folder . . .\n";

      clean( $folder, $package );
      test( $folder, $package );
      clean( $folder, $package );

      print CONSOLE "Done test $file . . .\n";
   }
}

&main($_) foreach @ARGV;

END {
   close CONSOLE;
}

__END__

NEdit -> Preferences -> Default Settings -> Customize Menus -> Shell Menu
Shell Menu:

Menu Entry: 		Perl>Test
Command Input: 	none
Command Output: 	dialog

Save file before executing command: 	true

Shell Command to Execute:
/home/holger/perl/cpan/X3D/nedit/perltest '%'
