class GeneratorTestResults

Public Instance Methods

process_and_write_results(unity_shell_result, results_file, test_file) click to toggle source
# File lib/ceedling/generator_test_results.rb, line 9
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)
  results[:time] = unity_shell_result[:time] unless unity_shell_result[:time].nil?

  # 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, '')

  output_string.lines 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 /(:PASS \(.* ms\)$)/
      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 Instance Methods

extract_line_elements(line, filename) click to toggle source
# File lib/ceedling/generator_test_results.rb, line 76
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
  unity_test_time = 0 

  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]

  # find timestamp if available
  if (elements[-1] =~ / \((\d*(?:\.\d*)?) ms\)/)
    unity_test_time = $1.to_f / 1000
    elements[-1].sub!(/ \((\d*(?:\.\d*)?) ms\)/, '')
  end

  return {:test => elements[1], :line => elements[0].to_i, :message => (elements[3..-1].join(':')).strip, :unity_test_time => unity_test_time}, stdout if elements.size >= 3
  return {:test => '???', :line => -1, :message => nil, :unity_test_time => unity_test_time} #fallback safe option. TODO better handling
end
get_results_structure() click to toggle source
# File lib/ceedling/generator_test_results.rb, line 64
def get_results_structure
  return {
    :source    => {:path => '', :file => ''},
    :successes => [],
    :failures  => [],
    :ignores   => [],
    :counts    => {:total => 0, :passed => 0, :failed => 0, :ignored  => 0},
    :stdout    => [],
    :time      => 0.0
    }
end