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
 |