minitest-junit 0.3.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/minitest/junit/version.rb +1 -1
- data/lib/minitest/junit.rb +29 -10
- data/minitest-junit.gemspec +1 -1
- data/test/reporter_test.rb +48 -13
- data/test/testcase_formatter_test.rb +13 -5
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4e9e6fe53a55b11d36289c47953e13279e41afff916cb27a7161d64baa61d914
|
4
|
+
data.tar.gz: 9311c1d71be9be105f06c0f035bd8411e74f7c3a468d77e85a9cca34b11097f7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5fd510f4009f0c504c3d7c75f8dc8c217c61a895c92fabb912908d20ccfdfb63454152cf56257e5deb16ae499244505bfbbae768a26b9894650f1a8fa0733d9c
|
7
|
+
data.tar.gz: d47bf2f92fb7a8814be1a4337826cbe4e0cb803ac8f6d0a55e285b2a77e3ae642f7f2c597127300f080f25305d887b5a433da6e1906ff81dcca64d4d9734d18a
|
data/lib/minitest/junit.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'minitest/junit/version'
|
2
2
|
require 'minitest'
|
3
3
|
require 'builder'
|
4
|
+
require 'socket'
|
5
|
+
require 'time'
|
4
6
|
|
5
7
|
# :nodoc:
|
6
8
|
module Minitest
|
@@ -11,6 +13,8 @@ module Minitest
|
|
11
13
|
@io = io
|
12
14
|
@results = []
|
13
15
|
@options = options
|
16
|
+
@options[:timestamp] = options.fetch(:timestamp, Time.now.iso8601)
|
17
|
+
@options[:hostname] = options.fetch(:hostname, Socket.gethostname)
|
14
18
|
end
|
15
19
|
|
16
20
|
def passed?
|
@@ -24,15 +28,26 @@ module Minitest
|
|
24
28
|
end
|
25
29
|
|
26
30
|
def report
|
27
|
-
|
28
|
-
|
29
|
-
|
31
|
+
xml = Builder::XmlMarkup.new(:indent => 2)
|
32
|
+
xml.testsuite(name: 'minitest',
|
33
|
+
timestamp: @options[:timestamp],
|
34
|
+
hostname: @options[:hostname],
|
35
|
+
tests: @results.count,
|
36
|
+
skipped: @results.count { |result| result.skipped? },
|
37
|
+
failures: @results.count { |result| !result.error? && result.failure },
|
38
|
+
errors: @results.count { |result| result.error? },
|
39
|
+
time: format_time(@results.inject(0) { |a, e| a += e.time })) do
|
40
|
+
@results.each { |result| format(result, xml) }
|
41
|
+
end
|
42
|
+
@io.puts xml.target!
|
30
43
|
end
|
31
44
|
|
32
|
-
def format(result)
|
33
|
-
xml = Builder::XmlMarkup.new
|
34
|
-
xml.testcase classname: format_class(result),
|
35
|
-
|
45
|
+
def format(result, parent = nil)
|
46
|
+
xml = Builder::XmlMarkup.new(:target => parent, :indent => 2)
|
47
|
+
xml.testcase classname: format_class(result),
|
48
|
+
name: format_name(result),
|
49
|
+
time: format_time(result.time),
|
50
|
+
assertions: result.assertions do |t|
|
36
51
|
if result.skipped?
|
37
52
|
t.skipped message: result
|
38
53
|
else
|
@@ -42,7 +57,7 @@ module Minitest
|
|
42
57
|
end
|
43
58
|
end
|
44
59
|
end
|
45
|
-
xml
|
60
|
+
xml
|
46
61
|
end
|
47
62
|
|
48
63
|
private
|
@@ -61,15 +76,19 @@ module Minitest
|
|
61
76
|
|
62
77
|
def format_class(result)
|
63
78
|
if @options[:junit_jenkins]
|
64
|
-
result.
|
79
|
+
result.klass.to_s.gsub(/(.*)::(.*)/, '\1.\2')
|
65
80
|
else
|
66
|
-
result.
|
81
|
+
result.klass
|
67
82
|
end
|
68
83
|
end
|
69
84
|
|
70
85
|
def format_name(result)
|
71
86
|
result.name
|
72
87
|
end
|
88
|
+
|
89
|
+
def format_time(time)
|
90
|
+
Kernel::format('%.6f', time)
|
91
|
+
end
|
73
92
|
end
|
74
93
|
end
|
75
94
|
end
|
data/minitest-junit.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(/^(test)\//)
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.add_dependency 'minitest', '~> 5.
|
21
|
+
spec.add_dependency 'minitest', '~> 5.11'
|
22
22
|
spec.add_dependency 'builder', '~> 3.2'
|
23
23
|
|
24
24
|
spec.add_development_dependency 'bundler'
|
data/test/reporter_test.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'minitest/autorun'
|
2
|
+
require 'builder'
|
2
3
|
require 'stringio'
|
3
4
|
require 'time'
|
4
5
|
|
@@ -10,34 +11,68 @@ class ReporterTest < Minitest::Test
|
|
10
11
|
|
11
12
|
reporter.report
|
12
13
|
|
13
|
-
|
14
|
+
assert_match(/^<testsuite name="minitest" timestamp="[^"]+" hostname="[^"]+" tests="0" skipped="0" failures="0" errors="0" time="0.000000">\n<\/testsuite>\n$/, reporter.output)
|
14
15
|
end
|
15
16
|
|
16
|
-
def
|
17
|
+
def test_formats_each_successful_result_with_a_formatter
|
17
18
|
reporter = create_reporter
|
18
|
-
|
19
|
-
|
19
|
+
|
20
|
+
results = do_formatting_test(reporter, count: rand(100), cause_failures: 0)
|
21
|
+
|
22
|
+
results.each do |result|
|
23
|
+
assert_match("<testcase classname=\"FakeTestName\" name=\"#{result.name}\"", reporter.output)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_formats_each_failed_result_with_a_formatter
|
28
|
+
reporter = create_reporter
|
29
|
+
|
30
|
+
results = do_formatting_test(reporter, count: rand(100), cause_failures: 1)
|
31
|
+
|
32
|
+
results.each do |result|
|
33
|
+
assert_match("<testcase classname=\"FakeTestName\" name=\"#{result.name}\"", reporter.output)
|
34
|
+
assert_match(/<failure/, reporter.output)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def do_formatting_test(reporter, count: 1, cause_failures: 0)
|
41
|
+
results = count.times.map do |i|
|
42
|
+
result = create_test_result(methodname: "test_name#{i}", failures: cause_failures)
|
20
43
|
reporter.record result
|
21
44
|
result
|
22
45
|
end
|
23
46
|
|
24
47
|
reporter.report
|
25
48
|
|
26
|
-
|
27
|
-
assert_equal expected, reporter.output
|
49
|
+
results
|
28
50
|
end
|
29
51
|
|
30
|
-
|
52
|
+
def create_test_result(name: FakeTestName, methodname: 'test_method_name', successes: 1, failures: 0)
|
53
|
+
test = Class.new Minitest::Test do
|
54
|
+
define_method 'class' do
|
55
|
+
name
|
56
|
+
end
|
57
|
+
end.new methodname
|
58
|
+
test.time = rand(100)
|
59
|
+
test.assertions = successes + failures
|
60
|
+
test.failures = failures.times.map do |i|
|
61
|
+
Class.new Minitest::Assertion do
|
62
|
+
define_method 'backtrace' do
|
63
|
+
["Model failure \##{i}", 'This is a test backtrace']
|
64
|
+
end
|
65
|
+
end.new
|
66
|
+
end
|
67
|
+
Minitest::Result.from test
|
68
|
+
end
|
31
69
|
|
32
|
-
def create_reporter
|
33
|
-
io = StringIO.new
|
34
|
-
reporter = Minitest::Junit::Reporter.new io,
|
70
|
+
def create_reporter(options = {})
|
71
|
+
io = StringIO.new ''
|
72
|
+
reporter = Minitest::Junit::Reporter.new io, options
|
35
73
|
def reporter.output
|
36
74
|
@io.string
|
37
75
|
end
|
38
|
-
def reporter.format(result)
|
39
|
-
result
|
40
|
-
end
|
41
76
|
reporter.start
|
42
77
|
reporter
|
43
78
|
end
|
@@ -4,12 +4,20 @@ require 'time'
|
|
4
4
|
|
5
5
|
require 'minitest/junit'
|
6
6
|
|
7
|
+
class FakeTestName; end
|
8
|
+
|
9
|
+
module FirstModule
|
10
|
+
module SecondModule
|
11
|
+
class TestClass; end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
7
15
|
class TestCaseFormatter < Minitest::Test
|
8
16
|
def test_all_tests_generate_testcase_tag
|
9
17
|
test = create_test_result
|
10
18
|
reporter = create_reporter
|
11
19
|
|
12
|
-
assert_match test.name, reporter.format(test)
|
20
|
+
assert_match test.name, reporter.format(test).target!
|
13
21
|
end
|
14
22
|
|
15
23
|
def test_skipped_tests_generates_skipped_tag
|
@@ -20,7 +28,7 @@ class TestCaseFormatter < Minitest::Test
|
|
20
28
|
|
21
29
|
reporter.report
|
22
30
|
|
23
|
-
assert_match(/<skipped message="[^<>]+"
|
31
|
+
assert_match(/<skipped message="[^<>]+"\/>\n<\/testcase>\n<\/testsuite>\n/, reporter.output)
|
24
32
|
end
|
25
33
|
|
26
34
|
def test_failing_tests_creates_failure_tag
|
@@ -46,7 +54,7 @@ class TestCaseFormatter < Minitest::Test
|
|
46
54
|
end
|
47
55
|
|
48
56
|
def test_jenkins_sanitizer_uses_modules_as_packages
|
49
|
-
test = create_test_result
|
57
|
+
test = create_test_result FirstModule::SecondModule::TestClass
|
50
58
|
reporter = create_reporter junit_jenkins: true
|
51
59
|
reporter.record test
|
52
60
|
|
@@ -63,7 +71,7 @@ class TestCaseFormatter < Minitest::Test
|
|
63
71
|
e
|
64
72
|
end
|
65
73
|
|
66
|
-
def create_test_result(name =
|
74
|
+
def create_test_result(name = FakeTestName)
|
67
75
|
test = Class.new Minitest::Test do
|
68
76
|
define_method 'class' do
|
69
77
|
name
|
@@ -71,7 +79,7 @@ class TestCaseFormatter < Minitest::Test
|
|
71
79
|
end.new 'test_method_name'
|
72
80
|
test.time = a_number
|
73
81
|
test.assertions = a_number
|
74
|
-
test
|
82
|
+
Minitest::Result.from test
|
75
83
|
end
|
76
84
|
|
77
85
|
def a_number
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: minitest-junit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Allan Espinosa
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '5.
|
19
|
+
version: '5.11'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '5.
|
26
|
+
version: '5.11'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: builder
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|