#! /usr/bin/env perl use strict; use warnings; use Cwd qw/abs_path/; use FindBin; # We can only dzil from the root of the repository. my $this_folder = $FindBin::Bin . '/../../'; # t/bin/../../ my $repo_root = abs_path($this_folder) . '/'; reset_env(); start_server(); my $built_lib = find_built_lib(); my $export = $^O eq 'MSWin32' ? 'set' : 'export'; my $wait = $^O eq 'MSWin32' ? 'START /WAIT' : ''; my $prove_opts = '-I' . $built_lib .' -j9 -r --verbose --trap --merge --state=save,slow'; my $default_prove = "prove $prove_opts t/"; my $executable = $ARGV[0] ? "perl -I$built_lib $ARGV[0]" : $default_prove; my $command = "$export WD_MOCKING_RECORD=1 && cd $repo_root && $executable"; print "Executing: $command\n"; print `$command`; reset_env(); sub find_built_lib { my $built_lib = glob($repo_root . 'Selenium-Remote-Driver-*/lib'); if (not defined $built_lib) { print 'Building a dist.' . "\n"; print `cd $repo_root && dzil build`; } # If built_lib wasn't around in the first place, we'll have to glob # for it again. $built_lib ||= glob($repo_root . 'Selenium-Remote-Driver-*/lib'); return $built_lib; } sub start_server { if ($^O eq 'MSWin32') { system('start "TEMP_HTTP_SERVER" /MIN perl ' . $repo_root . 't/http-server.pl'); } else { system('perl ' . $repo_root . 't/http-server.pl > /dev/null &'); } print 'Starting a new server.' . "\n"; } sub kill_server { if ($^O eq 'MSWin32') { system("taskkill /FI \"WINDOWTITLE eq TEMP_HTTP_SERVER\""); } else { `ps aux | grep [h]ttp-server\.pl | awk '{print \$2}' | xargs kill`; } } sub reset_env { print 'dzil cleaning...'; `cd $repo_root && dzil clean`; print 'and taking out any existing servers. ' . "\n"; kill_server(); }