class Minitest::Ci
Attributes
clean[RW]
Clean the report_dir
between test runs? (defaults to true)
report_dir[RW]
Change the report directory. (defaults to “test/reports”)
working_dir[RW]
Change the working directory. (defaults to `$PWD`)
io[RW]
options[RW]
results[RW]
Public Class Methods
new(io = $stdout, options = {})
click to toggle source
# File lib/minitest/ci_plugin.rb, line 70 def initialize io = $stdout, options = {} self.io = io self.options = options self.results = Hash.new {|h,k| h[k] = []} end
report!()
click to toggle source
Activates minitest/ci plugin as a Minitest
reporter
# File lib/minitest/ci_plugin.rb, line 39 def report! @report = true end
report?()
click to toggle source
Is minitest/ci activated as a Minitest
reporter?
# File lib/minitest/ci_plugin.rb, line 45 def report? @report ||= false end
Public Instance Methods
passed?()
click to toggle source
# File lib/minitest/ci_plugin.rb, line 76 def passed? true # don't care? end
record(result)
click to toggle source
# File lib/minitest/ci_plugin.rb, line 85 def record result key = result.respond_to?(:klass) ? result.klass : result.class results[key] << result end
report()
click to toggle source
Generate test report
# File lib/minitest/ci_plugin.rb, line 92 def report io.puts io.puts '[Minitest::CI] Generating test report in JUnit XML format...' Dir.chdir report_dir do results.each do |name, result| File.open(report_name(name), "w") do |f| f.puts( generate_results(name, result) ) end end end end
start()
click to toggle source
# File lib/minitest/ci_plugin.rb, line 80 def start # clean FileUtils.rm_rf report_dir if clean? FileUtils.mkdir_p report_dir end
Private Instance Methods
clean?()
click to toggle source
# File lib/minitest/ci_plugin.rb, line 174 def clean? options.fetch(:ci_clean, self.class.clean) end
escape(o)
click to toggle source
# File lib/minitest/ci_plugin.rb, line 107 def escape o CGI.escapeHTML(o.to_s) end
generate_results(name, results)
click to toggle source
# File lib/minitest/ci_plugin.rb, line 111 def generate_results name, results total_time = assertions = errors = failures = skips = 0 timestamp = Time.now.iso8601 results.each do |result| total_time += result.time assertions += result.assertions case result.failure when Skip skips += 1 when UnexpectedError errors += 1 when Assertion failures += 1 end end base = working_dir + '/' xml = [] xml << '<?xml version="1.0" encoding="UTF-8"?>' xml << "<testsuite time='%6f' skipped='%d' failures='%d' errors='%d' name=%p assertions='%d' tests='%d' timestamp=%p>" % [total_time, skips, failures, errors, escape(name), assertions, results.count, timestamp] results.each do |result| location = if result.respond_to? :source_location then result.source_location else result.method(result.name).source_location end[0].gsub(base, '') xml << " <testcase time='%6f' file=%p name=%p assertions='%s'>" % [result.time, escape(location), escape(result.name), result.assertions] if failure = result.failure label = failure.result_label.downcase if failure.is_a?(UnexpectedError) failure = failure.error end klass = failure.class msg = failure.message bt = Minitest::filter_backtrace failure.backtrace xml << " <%s type='%s' message=%s>%s" % [label, escape(klass), escape(msg).inspect.gsub('\n', " "), escape(bt.join("\n"))] xml << " </%s>" % label end xml << " </testcase>" end xml << "</testsuite>" xml end
report_dir()
click to toggle source
# File lib/minitest/ci_plugin.rb, line 170 def report_dir options.fetch(:ci_dir, self.class.report_dir) end
report_name(name)
click to toggle source
# File lib/minitest/ci_plugin.rb, line 178 def report_name(name) report_name_opt = options.fetch(:report_name, :test_name) return report_name_opt.call(name) if report_name_opt.is_a? Proc return sha1_report_name(name) if report_name_opt.to_sym == :sha1 test_name_report_name(name) end
sha1_report_name(name)
click to toggle source
# File lib/minitest/ci_plugin.rb, line 185 def sha1_report_name(name) "TEST-#{Digest::SHA1.hexdigest(name.to_s)}.xml" end
test_name_report_name(name)
click to toggle source
# File lib/minitest/ci_plugin.rb, line 189 def test_name_report_name(name) "TEST-#{CGI.escape(name.to_s.gsub(/\W+/, '_'))[0, 246]}.xml" end
working_dir()
click to toggle source
# File lib/minitest/ci_plugin.rb, line 166 def working_dir options.fetch(:working_dir, self.class.working_dir) end