package Varnish::Test;
+use Varnish::Test::Case;
use Varnish::Test::Engine;
sub new($) {
}
}
+sub cases($) {
+ my ($self) = @_;
+
+ my $dir = $INC{'Varnish/Test/Case.pm'};
+ $dir =~ s/\.pm$/\//;
+ local *DIR;
+ opendir(DIR, $dir)
+ or die("$dir: $!\n");
+ my @cases = sort grep { s/^(\w+)\.pm$/$1/ } readdir(DIR);
+ closedir(DIR);
+ return @cases;
+}
+
sub run_case($$) {
my ($self, $name) = @_;
use FindBin;
-BEGIN {
- $FindBin::Bin =~ /^(.*)$/;
- $FindBin::Bin = $1;
-}
-
use lib "$FindBin::Bin/lib";
use Getopt::Long;
use Varnish::Test;
-my $verbose = 0;
-my $help = 0;
-
-my $usage = <<"EOU";
+sub usage() {
+ print STDERR <<EOU;
USAGE:
$0 CASE1 [ CASE2 ... ]
$0 102
EOU
+ exit 1;
+}
MAIN:{
- $help = 1 unless GetOptions('help|h!' => \$help);
-
- if (!$help and @ARGV == 0) {
- print STDERR "ERROR: Need at least one case name (or ticket number)\n\n";
- $help = 1;
- }
+ GetOptions('help|h!' => \&usage)
+ or usage();
- if ($help) {
- print STDERR $usage;
- exit 1;
- }
-
- my @casenames = ();
-
- foreach my $arg (@ARGV) {
- my $case;
+ my $controller = new Varnish::Test;
- if ($arg =~ /^(\d+)$/) {
- push(@casenames, sprintf('Ticket%03d', $1));
- }
- else {
- $arg =~ /^(.*)$/;
- push(@casenames, $1);
- }
+ if (!@ARGV) {
+ @ARGV = $controller->cases();
+ } else {
+ map { s/^(\d+)$/sprintf('Ticket%03d', $1)/e } @ARGV;
}
- my $controller = new Varnish::Test;
-
$controller->start_engine();
- foreach my $casename (@casenames) {
+ foreach my $casename (@ARGV) {
$controller->run_case($casename);
}
$controller->stop_engine();