1: A more flexible version of the test.pl script
   2: 
   3: #!/usr/bin/perl -w
   4: 
   5: use strict;
   6: use DirHandle;
   7: use Test::Harness;
   8: use Getopt::Long;
   9: use Pod::Usage;
  10: 
  11: my $verbose = 0;
  12: my $simple  = 0;
  13: my $man     = 0;
  14: my $help    = 0;
  15: my $testdir = 't';
  16: my @tests   = ();
  17: 
  18: GetOptions(
  19:     'help|?'    => \$help,
  20:         "man"       => \$man,
  21:         "testdir=s" => \$testdir,
  22:         "verbose"   => \$verbose,
  23:         "simple"    => \$simple,
  24: );
  25: 
  26: pod2usage( -exitstatus => 0, -verbose => 2 ) if $man;
  27: pod2usage(1) if ($help and (! $simple));
  28: 
  29: print "Looking for tests in test dir: $testdir\n" if ($verbose);
  30: 
  31: if (scalar @ARGV) {
  32:         foreach my $file (@ARGV) {
  33:                 print "Found test: $file\n" if ($verbose);
  34:                 &append(\$file, \@tests, \$testdir);
  35:         }
  36: } else {
  37:         opendir(DH, $testdir) or die "Couldn't open $testdir for reading: $!";
  38:         while(defined (my $file = readdir(DH)) ) {
  39:         next unless $file =~ /\.[t]$/i;
  40:                 &append(\$file, \@tests, \$testdir);
  41:         }
  42: }
  43: 
  44: if ($simple) {
  45:         foreach my $test (@tests) {
  46:                 print "\nRunning: $test\n\n";
  47:                 system("perl  $test");
  48:         }
  49: } else {
  50:         runtests(@tests);
  51: }
  52: 
  53: exit;
  54: 
  55: sub append {
  56:         my $file = shift;
  57:         my $tests = shift;
  58:         my $testdir = shift;
  59: 
  60:         my $filename = "$$testdir/$$file";
  61:         push(@$tests, $filename);
  62: 
  63:         return 1;
  64: }
  65: 
  66: __END__
  67: 
  68: =head1 NAME
  69: 
  70: test.pl - Runs tests 
  71: 
  72: =head1 SYNOPSIS
  73: 
  74: test.pl [options] -- [testfiles]
  75: 
  76: =head1 OPTIONS
  77: 
  78: =over 8
  79: 
  80: =item B<-verbose>
  81: 
  82: More information will be displayed during processing. 
  83: This might not be necessary due to the verbosity of the 
  84: actual test data. 
  85: 
  86: =item B<-testdir>
  87: 
  88: This is the test directory in which test.pl will look 
  89: for test files (files ending on .t. If not given t/ will 
  90: be assumed.
  91: 
  92: =item B<-simple>
  93: 
  94: The simple flag sets test.pl to run Test::Simple script to 
  95: be run so their own information is displayed 
  96: (normally suppressed by Test::Harness). 
  97: 
  98: Test::Simple scripts do also work under Test::Harness.
  99: 
 100: =item B<-help>
 101: 
 102: Prints a brief help message and exits.
 103: 
 104: =item B<-man>
 105: 
 106: Prints the manual page and exits.
 107: 
 108: =back
 109: 
 110: =head1 DESCRIPTION
 111: 
 112: B<This program> will read the given input file(s) and run 
 113: any tests in these.
 114: 
 115: So write your normal test files using Test or Test::Simple. 
 116: This script gives you a more flexible interface to testing 
 117: during development. You can tell the script what directory 
 118: your tests are in (-testdir). 
 119: 
 120: You can specify whether you want to have Test::Simple 
 121: output (I need to takes this with Michael Schwern at some 
 122: point). Or you can specify which test files you want 
 123: processed by listing them after the options (--).
 124: 
 125: So all you need to do is follow the normal Perl test 
 126: writing conventions and then abuse this tool.
 127: 
 128: =head1 AUTHOR
 129: 
 130: jonasbn <jonasbn@wanadoo.dk>
 131: 
 132: =head1 BUGS
 133: 
 134: No known bugs. 
 135: 
 136: =head1 SEE ALSO
 137: 
 138: =over 8
 139: 
 140: =item Test::Simple
 141: 
 142: =item Test::Harness
 143: 
 144: =back
 145: 
 146: =head1 COPYRIGHT
 147: 
 148: Copyright (c) 2001 Jonas B. Nielsen. All rights
 149: reserved.  This program is free software; you can
 150: redistribute it and/or modify it under the same 
 151: terms as Perl itself.
 152: 
 153: =cut

Replies are listed 'Best First'.
Re: A spiked version of test.pl
by mojotoad (Monsignor) on Dec 20, 2001 at 02:41 UTC
    Hmmm. Is the use of this module intended as a permanent addition to the affected module? It would wreak havok in a CVS repository, if so.

    Matt

Re: A spiked version of test.pl
by sparkyichi (Deacon) on Dec 13, 2001 at 23:56 UTC
    Is there Perl code to add thoes cool line number to a file? Hmm. I guess I could stop bing lazy and create one. :)

    Sparky
      Beatnik's source filter - Filter::NumberLines - will number the lines *and* maintain the runability of said lines...
      #!/usr/bin/perl -w use lib './perllibs'; use Filter::NumberLines; 004: use strict; 005: 006: print "I like Jellybeans\n";
      Not only were the 004-??? line number put in there for me, but the program runs correctly just like that with the line numbers included. Very clever stuff.

      -Blake

      perl -pi.bak -e 's/^/sprintf( "%05d", $.).": "/e' test.pl

      Of course, that will make your program unuseable :) If you need to remove them again:

      perl -pi.bak -e 's/^(?:\s+)?\d+:\s//' test.pl

      Cheers,
      Ovid

      Join the Perlmonks Setiathome Group or just click on the the link and check out our stats.