mirror of
https://github.com/hathach/tinyusb.git
synced 2025-01-17 05:32:55 +08:00
bc735bbe22
- unified makefile project for the whole repos - new separate project for tests
90 lines
2.9 KiB
Ruby
90 lines
2.9 KiB
Ruby
require 'rubygems'
|
|
require 'rake' # for .ext()
|
|
require 'constants'
|
|
|
|
|
|
class GeneratorTestResults
|
|
|
|
constructor :configurator, :generator_test_results_sanity_checker, :yaml_wrapper
|
|
|
|
def process_and_write_results(unity_shell_result, results_file, test_file)
|
|
output_file = results_file
|
|
|
|
results = get_results_structure
|
|
|
|
results[:source][:path] = File.dirname(test_file)
|
|
results[:source][:file] = File.basename(test_file)
|
|
|
|
# process test statistics
|
|
if (unity_shell_result[:output] =~ TEST_STDOUT_STATISTICS_PATTERN)
|
|
results[:counts][:total] = $1.to_i
|
|
results[:counts][:failed] = $2.to_i
|
|
results[:counts][:ignored] = $3.to_i
|
|
results[:counts][:passed] = (results[:counts][:total] - results[:counts][:failed] - results[:counts][:ignored])
|
|
end
|
|
|
|
# remove test statistics lines
|
|
output_string = unity_shell_result[:output].sub(TEST_STDOUT_STATISTICS_PATTERN, '')
|
|
|
|
# bust up the output into individual lines
|
|
raw_unity_lines = output_string.split(/\n|\r\n/)
|
|
|
|
raw_unity_lines.each do |line|
|
|
# process unity output
|
|
case line
|
|
when /(:IGNORE)/
|
|
elements = extract_line_elements(line, results[:source][:file])
|
|
results[:ignores] << elements[0]
|
|
results[:stdout] << elements[1] if (!elements[1].nil?)
|
|
when /(:PASS$)/
|
|
elements = extract_line_elements(line, results[:source][:file])
|
|
results[:successes] << elements[0]
|
|
results[:stdout] << elements[1] if (!elements[1].nil?)
|
|
when /(:FAIL)/
|
|
elements = extract_line_elements(line, results[:source][:file])
|
|
results[:failures] << elements[0]
|
|
results[:stdout] << elements[1] if (!elements[1].nil?)
|
|
else # collect up all other
|
|
results[:stdout] << line.chomp
|
|
end
|
|
end
|
|
|
|
@generator_test_results_sanity_checker.verify(results, unity_shell_result[:exit_code])
|
|
|
|
output_file = results_file.ext(@configurator.extension_testfail) if (results[:counts][:failed] > 0)
|
|
|
|
@yaml_wrapper.dump(output_file, results)
|
|
|
|
return { :result_file => output_file, :result => results }
|
|
end
|
|
|
|
private
|
|
|
|
def get_results_structure
|
|
return {
|
|
:source => {:path => '', :file => ''},
|
|
:successes => [],
|
|
:failures => [],
|
|
:ignores => [],
|
|
:counts => {:total => 0, :passed => 0, :failed => 0, :ignored => 0},
|
|
:stdout => [],
|
|
}
|
|
end
|
|
|
|
def extract_line_elements(line, filename)
|
|
# handle anything preceding filename in line as extra output to be collected
|
|
stdout = nil
|
|
stdout_regex = /(.+)#{Regexp.escape(filename)}.+/i
|
|
|
|
if (line =~ stdout_regex)
|
|
stdout = $1.clone
|
|
line.sub!(/#{Regexp.escape(stdout)}/, '')
|
|
end
|
|
|
|
# collect up test results minus and extra output
|
|
elements = (line.strip.split(':'))[1..-1]
|
|
return {:test => elements[1], :line => elements[0].to_i, :message => (elements[3..-1].join(':')).strip}, stdout
|
|
end
|
|
|
|
end
|