Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
103 lines (87 sloc) 2.73 KB
module XCPretty
class JUnit < Reporter
FILEPATH = 'build/reports/junit.xml'
def load_dependencies
unless @@loaded ||= false
require 'fileutils'
require 'pathname'
require 'rexml/document'
require 'rexml/formatters/pretty'
@@loaded = true
end
end
def initialize(options)
super(options)
@directory = `pwd`.strip
@document = REXML::Document.new
@document << REXML::XMLDecl.new('1.0', 'UTF-8')
@document.add_element('testsuites')
@total_fails = 0
@total_tests = 0
end
def handle(line)
@parser.parse(line)
end
def format_test_run_started(name)
@document.root.add_attribute('name', name)
end
def format_passing_test(classname, test_case, time)
test_node = suite(classname).add_element('testcase')
test_node.attributes['classname'] = classname
test_node.attributes['name'] = test_case
test_node.attributes['time'] = time
@test_count += 1
end
def format_pending_test(classname, test_case)
test_node = suite(classname).add_element('testcase')
test_node.attributes['classname'] = classname
test_node.attributes['name'] = test_case
test_node.add_element('skipped')
@test_count += 1
end
def format_failing_test(classname, test_case, reason, file)
test_node = suite(classname).add_element('testcase')
test_node.attributes['classname'] = classname
test_node.attributes['name'] = test_case
fail_node = test_node.add_element('failure')
fail_node.attributes['message'] = reason
fail_node.text = file.sub(@directory + '/', '')
@test_count += 1
@fail_count += 1
end
def finish
set_test_counters
@document.root.attributes['tests'] = @total_tests
@document.root.attributes['failures'] = @total_fails
super
end
def write_report
formatter = REXML::Formatters::Pretty.new(2)
formatter.compact = true
output_file = File.open(@filepath, 'w+')
result = formatter.write(@document, output_file)
output_file.close
result
end
private
def suite(classname)
if @last_suite && @last_suite.attributes['name'] == classname
return @last_suite
end
set_test_counters
@last_suite = @document.root.add_element('testsuite')
@last_suite.attributes['name'] = classname
@last_suite
end
def set_test_counters
if @last_suite
@last_suite.attributes['tests'] = @test_count
@last_suite.attributes['failures'] = @fail_count
end
@total_fails += @fail_count || 0
@total_tests += @test_count || 0
@test_count = 0
@fail_count = 0
end
end
end
You can’t perform that action at this time.