Class: Fastlane::Plugin::MergeJunitReport::Merger

Inherits:
Object
  • Object
show all
Defined in:
lib/fastlane/plugin/merge_junit_report/merger.rb

Overview

Merge several junit reports into one single report

Instance Method Summary collapse

Constructor Details

#initialize(reports) ⇒ Merger

Initializes an instance of Merger

Parameters:

  • junit (Array<REXML::Document>)

    reports the junit reports to merge from



9
10
11
# File 'lib/fastlane/plugin/merge_junit_report/merger.rb', line 9

def initialize(reports)
  @reports = reports
end

Instance Method Details

#mergeREXML::Document

Merges reports passed in via constructor

Returns:

  • (REXML::Document)

    merged junit report



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/fastlane/plugin/merge_junit_report/merger.rb', line 15

def merge
  baseline = @reports.first
  @reports.drop(1).each do |report|
    report.elements.each('//testsuite') do |suite_to_merge|
      suite_name = suite_to_merge.attributes['name']
      baseline_suite = REXML::XPath.first(baseline, "//testsuite[@name='#{suite_name}']")

      next unless baseline_suite
      suite_to_merge.elements.each('testcase') do |case_to_merge|
        classname = case_to_merge.attributes['classname']
        name = case_to_merge.attributes['name']
        baseline_case = REXML::XPath.first(baseline_suite, "testcase[@name='#{name}' and @classname='#{classname}']")
        # Replace baseline_case with case_to_merge
        if baseline_case
          baseline_case.parent.insert_after(baseline_case, case_to_merge)
          baseline_case.parent.delete_element(baseline_case)
        end
      end
    end
  end

  recalculate_failures(baseline)
  baseline
end