lib/minitest/junit.rb in minitest-junit-0.0.1 vs lib/minitest/junit.rb in minitest-junit-0.1.0

- old
+ new

@@ -1,13 +1,69 @@ require 'minitest/junit/version' +require 'minitest' +require 'builder' # :nodoc: module Minitest - # :nodoc: module Junit # :nodoc: class Reporter - def initialize(_io) + def initialize(io) + @io = io + @results = [] + end + + def passed? + true + end + + def start; end + + def record(result) + @results << result + end + + def report + @io.puts '<testsuite>' + @results.each { |result| @io.puts format(result) } + @io.puts '</testsuite>' + end + + def format(result) + xml = Builder::XmlMarkup.new + xml.testcase classname: format_class(result), name: format_name(result), + time: result.time, assertions: result.assertions do |t| + t.skipped if result.skipped? + result.failures.each do |failure| + type = classify failure + xml.tag! type, format_backtrace(failure), message: result + end + end + xml.target! + end + + private + + def classify(failure) + if failure.instance_of? UnexpectedError + 'error' + else + 'failure' + end + end + + def format_backtrace(failure) + failure.backtrace.join("\n") + end + + def format_class(result) + result.class.to_s.gsub(/(.*)::(.*)/, '\1.\2') + result.class + end + + def format_name(result) + result.name.sub(/^test_/, '').gsub('_', ' ') + result.name end end end end