run_tests.pl
90 lines
| 2.3 KiB
| text/plain
|
PerlLexer
/ tools / run_tests.pl
Jani Honkonen
|
r1134 | use Cwd; | ||
use Cwd 'abs_path'; | ||||
use File::Basename; | ||||
use File::Copy; | ||||
Jani Honkonen
|
r1151 | use feature "switch"; | ||
Jani Honkonen
|
r1203 | use lib 'tools'; | ||
Jani Honkonen
|
r1134 | use Jobs; | ||
# read command line params | ||||
my $jobname = shift; | ||||
# read ini file | ||||
my $inifile = File::Basename::dirname($0) . "/jobs.ini"; | ||||
my %job = Jobs::get($inifile, $jobname); | ||||
Jani Honkonen
|
r1136 | # set/get paths | ||
Jani Honkonen
|
r1135 | my $root_path = abs_path(); | ||
Jani Honkonen
|
r1137 | my $bin_path = "$root_path/bin/"; | ||
Jani Honkonen
|
r1136 | my $reports_path = "test-reports"; | ||
# create reports path | ||||
Jani Honkonen
|
r1137 | mkdir $reports_path; | ||
Jani Honkonen
|
r1135 | |||
Jani Honkonen
|
r1151 | # setup environment for running tests | ||
given ($job{'Platform'}) { | ||||
when ("Win7") { | ||||
Jani Honkonen
|
r1152 | # Add qtdir to path | ||
$ENV{'PATH'} .= ";" . $job{'QtDir'} . "\\bin"; | ||||
# replace / -> \ | ||||
$ENV{'PATH'} =~ s/\//\\/g; | ||||
Jani Honkonen
|
r1151 | } | ||
Jani Honkonen
|
r1134 | |||
Jani Honkonen
|
r1151 | when ("Linux") { | ||
Jani Honkonen
|
r1152 | # Add qtdir to path | ||
Jani Honkonen
|
r1151 | $ENV{'PATH'} = $job{'QtDir'} . "/bin:" . $ENV{'PATH'}; | ||
Jani Honkonen
|
r1152 | |||
# If this is not set we get "cannot connect to X server" errors | ||||
Jani Honkonen
|
r1151 | $ENV{'DISPLAY'} = ":0.0"; | ||
} | ||||
} | ||||
Jani Honkonen
|
r1136 | |||
Jani Honkonen
|
r1134 | # Go through all the files in the test folder | ||
Jani Honkonen
|
r1136 | # autotest is an executable beginning with "tst_" | ||
Jani Honkonen
|
r1151 | my $script_exit_status = 0; | ||
Jani Honkonen
|
r1137 | opendir (TESTAPPDIR, "$bin_path") or die "Couldn't open test app dir"; | ||
Jani Honkonen
|
r1134 | @files = <TESTAPPDIR>; | ||
while ($testapp = readdir TESTAPPDIR) { | ||||
if (index($testapp, "tst_") == 0) { | ||||
Jani Honkonen
|
r1137 | if (-x "$bin_path$testapp") { | ||
Jani Honkonen
|
r1136 | my $status = executeTestApp($testapp); | ||
if ($status != 0) { | ||||
$script_exit_status = $status; | ||||
} | ||||
Jani Honkonen
|
r1134 | } else { | ||
#print "file $testapp not executable\n"; | ||||
} | ||||
} | ||||
} | ||||
closedir TESTAPPDIR; | ||||
Jani Honkonen
|
r1137 | print "\n*** script exit status : $script_exit_status ***\n\n"; | ||
Jani Honkonen
|
r1136 | exit($script_exit_status); | ||
Jani Honkonen
|
r1134 | |||
Jani Honkonen
|
r1151 | |||
Jani Honkonen
|
r1136 | sub executeTestApp($) { | ||
my $testapp = $_[0]; | ||||
# On OSX the actual test binary is in a sub folder | ||||
my $cmd_postfix = ""; | ||||
if ($^O eq "darwin") { | ||||
$cmd_postfix = "/Contents/MacOS/$testapp"; | ||||
$cmd_postfix = substr($cmd_postfix, 0, rindex($cmd_postfix, ".app")); | ||||
} | ||||
Jani Honkonen
|
r1137 | my $cmd = "$bin_path$testapp$cmd_postfix -xunitxml -o $reports_path/$testapp.xml"; | ||
Jani Honkonen
|
r1136 | print "executing: $cmd\n"; | ||
Jani Honkonen
|
r1137 | system($cmd); | ||
# From http://perldoc.perl.org/perlvar.html about $?: | ||||
# The upper eight bits reflect specific error conditions encountered by the | ||||
# program (the program's exit() value). The lower eight bits reflect | ||||
# mode of failure, like signal death and core dump information. | ||||
# See wait(2) for details. | ||||
Jani Honkonen
|
r1134 | my $exit_status = $? >> 8; | ||
Jani Honkonen
|
r1137 | print "\texit status: $exit_status\n"; | ||
Jani Honkonen
|
r1136 | |||
return $exit_status; | ||||
Jani Honkonen
|
r1134 | } | ||