my $tries = 0;
while($tries < 5) {
eval {
+ # if we don't create the ::Selenium object ourselves, then
+ # wikifixture shuts the session down after the first test table
+ # is run, at which point KABOOM when you try and run a second one.
$self->{src} = Socialtext::WikiFixture::Selenese->new(
- host => $self->{selenium_rc}{host},
- port => $self->{selenium_rc}{port},
- browser => $self->{browser},
- browser_url => $self->{app_base},
+ selenium => Test::WWW::Selenium->new(
+ host => $self->{selenium_rc}{host},
+ port => $self->{selenium_rc}{port},
+ browser => $self->{browser},
+ browser_url => $self->{app_base},
+ )
);
};
$tries++;
diag "timed out waiting for selenium server to start at
http://$self->{selenium_rc}{host}:$self->{selenium_rc}{port}" if $tries == 5;
$self->done;
+ die;
}
}
sub start_app_server {
my($self) = @_;
+ return unless $self->{app_server_cmd};
my $child = Child->new(sub { exec($self->{app_server_cmd}) } );
$self->{app_server_proc} = $child->start;
}
sub stop_app_server {
my($self) = @_;
- $self->{app_server_proc}->kill("KILL");
+ if (my $proc = $self->{app_server_proc}) {
+ $proc->kill("KILL");
+ }
}
-sub test_directory {
- my ($self, $dir) = @_;
+sub start_everything {
+ my ($self) = @_;
if(!exists $self->{app_server_proc}) {
$self->start_app_server;
}
if($self->{selenium_rc}{start} && !$self->{selenium_rc}{selenium_server_proc}) {
$self->start_selenium_server;
}
- my @tests = File::Find::Rule->file()->name('*.html')->in($dir);
+}
+
+sub test_recursive {
+ my ($self, @proto) = @_;
+ my (@files, @dirs);
+ if (@proto) {
+ @files = grep /\.html$/, @proto;
+ @dirs = grep !/\.htmL$/, @proto;
+ } else {
+ $0 =~ /^(t\/.*).t$/ or die "Can't guess directory from $0";
+ @dirs = ($1);
+ }
+ $self->start_everything;
+ $self->test_file($_) for @files;
+ $self->test_directory($_) for
+ sort map File::Find::Rule->directory->in($_), @dirs;
+}
+
+sub test_directory {
+ my ($self, $dir) = @_;
+ $self->start_everything;
+ my @tests =
+ sort File::Find::Rule->file->name('*.html')->maxdepth(1)->in($dir);
+
for my $test (@tests) {
- $self->run_tests_for($test);
+ $self->test_file($test);
}
}
-sub run_tests_for {
+sub test_file {
my ($self, $html_file) = @_;
my $rows = $self->get_rows_for($html_file);
$self->{src}->run_test_table($rows);
sub done {
my($self) = @_;
- if(exists $self->{selenium_rc}{xvnc_server_proc} and
- exists $self->{selenium_rc}{selenium_server_proc}) {
- $self->stop_selenium_server;
- }
+ $self->stop_selenium_server;
$self->stop_app_server;
}
+sub DESTROY { shift->done }
+
1;
__END__