require 'minitest/autorun'
require 'stringio'
require 'time'
require 'minitest/junit'
class FakeTestName; end
module FirstModule
module SecondModule
class TestClass; end
end
end
class TestCaseFormatter < Minitest::Test
def test_all_tests_generate_testcase_tag
test = create_test_result
reporter = create_reporter
assert_match test.name, reporter.format(test).target!
end
def test_skipped_tests_generates_skipped_tag
test = create_test_result
test.failures << create_error(Minitest::Skip)
reporter = create_reporter
reporter.record test
reporter.report
assert_match(/\n<\/testcase>\n<\/testsuite>\n/, reporter.output)
end
def test_failing_tests_creates_failure_tag
test = create_test_result
test.failures << create_error(Minitest::Assertion)
reporter = create_reporter
reporter.record test
reporter.report
assert_match(/ e
e
end
def create_test_result(name = FakeTestName)
test = Class.new Minitest::Test do
define_method 'class' do
name
end
end.new 'test_method_name'
test.time = a_number
test.assertions = a_number
Minitest::Result.from test
end
def a_number
rand(100)
end
def create_reporter(options = {})
io = StringIO.new ''
reporter = Minitest::Junit::Reporter.new io, options
def reporter.output
@io.string
end
reporter.start
reporter
end
end