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 |