Module: Trainer::PlistTestSummaryParser

Defined in:
trainer/lib/trainer/plist_test_summary_parser.rb

Class Method Summary collapse

Class Method Details

.ensure_file_valid!(raw_json) ⇒ Object



51
52
53
54
55
# File 'trainer/lib/trainer/plist_test_summary_parser.rb', line 51

def ensure_file_valid!(raw_json)
  format_version = raw_json["FormatVersion"]
  supported_versions = ["1.1", "1.2"]
  raise "Format version '#{format_version}' is not supported, must be #{supported_versions.join(', ')}" unless supported_versions.include?(format_version)
end

.parse_content(raw_json, xcpretty_naming) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'trainer/lib/trainer/plist_test_summary_parser.rb', line 6

def parse_content(raw_json, xcpretty_naming)
  data = raw_json["TestableSummaries"].collect do |testable_summary|
    summary_row = {
      project_path: testable_summary["ProjectPath"],
      target_name: testable_summary["TargetName"],
      test_name: testable_summary["TestName"],
      duration: testable_summary["Tests"].map { |current_test| current_test["Duration"] }.inject(:+),
      tests: unfold_tests(testable_summary["Tests"]).collect do |current_test|
        test_group, test_name = test_group_and_name(testable_summary, current_test, xcpretty_naming)
        current_row = {
          identifier: current_test["TestIdentifier"],
          test_group: test_group,
          name: test_name,
          object_class: current_test["TestObjectClass"],
          status: current_test["TestStatus"],
          guid: current_test["TestSummaryGUID"],
          duration: current_test["Duration"]
        }
        if current_test["FailureSummaries"]
          current_row[:failures] = current_test["FailureSummaries"].collect do |current_failure|
            {
              file_name: current_failure['FileName'],
              line_number: current_failure['LineNumber'],
              message: current_failure['Message'],
              performance_failure: current_failure['PerformanceFailure'],
              failure_message: "#{current_failure['Message']} (#{current_failure['FileName']}:#{current_failure['LineNumber']})"
            }
          end
        end
        current_row
      end
    }
    summary_row[:number_of_tests] = summary_row[:tests].count
    summary_row[:number_of_failures] = summary_row[:tests].find_all { |a| (a[:failures] || []).count > 0 }.count

    # Makes sure that plist support matches data output of xcresult
    summary_row[:number_of_tests_excluding_retries] = summary_row[:number_of_tests]
    summary_row[:number_of_failures_excluding_retries] = summary_row[:number_of_failures]
    summary_row[:number_of_retries] = 0

    summary_row
  end
  data
end