Fixed tests'run-all.rb to run under Windows as well.
#!/usr/bin/ruby
require 'rbconfig'
require 'fileutils'
PACKAGES = [ 'stx:libjava', 'stx:libjava/mauve', 'stx:libjava/experiments', 'stx:libjava/tools' ]
PARAMS = {
'STX_LIBJAVA_ENABLE_JIT' => [
#'1',
'0'
],
'STX_LIBJAVA_RELEASE' => [
'JDK6',
'JDK7'
]
}
REPORT_DIR="results-#{Time.now.strftime("%Y-%m-%d-%H-%M-%S")}"
def win32?
return (Config::CONFIG['host_os'] =~ /mingw32/) != nil
end
def unix?
if win32_wine?
return false
end
return (Config::CONFIG['host_os'] =~ /linux|solaris/) != nil
end
if win32?
REPORT_RUNNER = File.join(File.dirname(__FILE__), '..', '..', 'goodies', 'builder', 'reports' , 'report-runner.bat')
else
REPORT_RUNNER = File.join(File.dirname(__FILE__), '..', '..', 'goodies', 'builder', 'reports' , 'report-runner.sh')
end
def run_package(package, params = {})
ident = []
setup = 'Stdin close'
params.keys.sort.each do | name |
value = params[name]
ident.push("#{name}=#{value}")
ENV[name] = value
end
if ident.size > 0 then
logf = File.join(REPORT_DIR, "#{package.tr(':/', '__')}-#{ident.join('-')}-Test.out")
ident = "#{ident.join('-')}"
cmd = %W[#{REPORT_RUNNER} -S #{setup} -D #{REPORT_DIR} -i #{ident} -r Builder::TestReport -p #{package}]
#cmd = %W[#{REPORT_RUNNER} -S #{setup} -D #{REPORT_DIR} -i #{ident} -r Builder::TestReport ]
else
logf = File.join(REPORT_DIR, "#{package.tr(':/', '__')}-Test.out")
ident = ''
cmd = %W[#{REPORT_RUNNER} -S #{setup} -D #{REPORT_DIR} -r Builder::TestReport -p #{package}]
end
puts "Running #{package} {#{ident}}"
puts cmd.inspect
pattern = /SUMMARY: (?<run>\d+) run, (?<passed>\d+) passed, (?<skipped>\d+) skipped, (?<failed>\d+) failed, (?<error>\d+) error/
result = {
'run' => '?',
'passed' => '?',
'skipped' => '?',
'failed' => '?',
'error' => '?'
}
IO.popen(cmd + [ :err => [:child, :out]]) do | out |
File.open(logf, "w") do | log |
out.each do | line |
log.puts line
puts line
match = pattern.match (line)
if match then
result = {
'run' => match['run'],
'passed' => match['passed'],
'skipped' => match['skipped'],
'failed' => match['failed'],
'error' => match['error']
}
end
end
end
end
result['ident'] = ident
result['package'] = package
result['params'] = params
return result
end
def combine(params, bound = {}, &block)
if bound.size == params.size then
yield bound
else
params_to_combine = params.keys.sort.select { | p | not bound.key? p }
param = params_to_combine.to_a().first()
values = params[param]
values.each do | value |
combined = bound.clone()
combined[param] = value
combine(params, combined, &block)
end
end
end
def write_results_txt_to_file(filename, results)
File.open(filename, "a+") do |file|
write_results_txt(file, results)
end
end
def write_results_txt(file, results)
file.write("\n")
file.write(Time.now.to_s)
file.write("\n")
params = PARAMS.keys.sort
values = [[ "Package"] + params + ['result', 'run', 'passed', 'skipped' , 'failed' , 'error']]
results.each do | result |
param_values = params.collect { | p | result['params'][p] }
result_text = '?'
if result['run'] != '0' then
if result['error'] != '0' then
result_text = 'ERROR'
elsif result['failed'] != '0' then
result_text = 'FAILED'
else
result_text = 'passed'
end
end
row = [ result['package'] ] + param_values + [ result_text, result['run'], result['passed'], result['skipped'], result['failed'], result['error'] ]
values.push(row)
end
max_lengths = values[0].map { |val| val.length }
values.each do |row|
row.each_with_index do |elem, index|
elem_size = elem.size
max_lengths[index] = elem_size if elem_size > max_lengths[index]
end
end
values.each do |val|
format = max_lengths.map { |length| "%#{length}s" }.join(" " * 3)
file.write(format % val)
file.write("\n")
end
file.write("--\n")
end
FileUtils.mkdir_p REPORT_DIR
results = []
combine(PARAMS) do | bound |
PACKAGES.each do | package |
results.push(run_package(package, bound))
end
end
write_results_txt_to_file(File.join(REPORT_DIR, 'results.txt'), results)
write_results_txt(STDOUT, results)