minitest-junit 1.1.0 → 2.0.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/.github/workflows/main.yml +32 -0
- data/lib/minitest/junit/version.rb +1 -1
- data/lib/minitest/junit.rb +56 -27
- data/minitest-junit.gemspec +5 -3
- data/test/reporter_test.rb +23 -6
- data/test/testcase_formatter_test.rb +5 -2
- metadata +44 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 518beb2f7cb77d8e953d77f9b4342c5ec1d20603b8807782f71305b58a0f985d
|
4
|
+
data.tar.gz: d3dec1da3aa864c7e92a80628353e24c75a465df90d7e60fddb134a1dc725d89
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1c2bc15ede221fc4128d62be93abd9dc6eb6137dd409faf763507c938b9d4bfdb4dd79af78d7de3f195ce1758dc72d5b6d1096c9b28893062c54db90c1a179bc
|
7
|
+
data.tar.gz: 32a0b2014027182f2c357b76defd7402fbc4996d994c5e8f3189844c66d634c16cfd26b9e0c524af3328bf347c5bbf608a480d85f927a021de81ce037543b760
|
@@ -0,0 +1,32 @@
|
|
1
|
+
name: Main
|
2
|
+
on:
|
3
|
+
push:
|
4
|
+
workflow_dispatch:
|
5
|
+
|
6
|
+
jobs:
|
7
|
+
tests:
|
8
|
+
name: Tests
|
9
|
+
runs-on: ubuntu-latest
|
10
|
+
strategy:
|
11
|
+
fail-fast: false
|
12
|
+
matrix:
|
13
|
+
ruby: ["2.7", "3.0", "3.1", "3.2"]
|
14
|
+
|
15
|
+
steps:
|
16
|
+
- name: Checkout code
|
17
|
+
uses: actions/checkout@v4
|
18
|
+
|
19
|
+
- name: Setup Ruby
|
20
|
+
uses: ruby/setup-ruby@v1
|
21
|
+
with:
|
22
|
+
ruby-version: ${{ matrix.ruby }}
|
23
|
+
bundler-cache: true
|
24
|
+
|
25
|
+
- name: Generate lockfile
|
26
|
+
run: bundle lock
|
27
|
+
|
28
|
+
- name: Bundle
|
29
|
+
run: bundle check || bundle install
|
30
|
+
|
31
|
+
- name: Run tests
|
32
|
+
run: bundle exec rake test
|
data/lib/minitest/junit.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'minitest/junit/version'
|
2
2
|
require 'minitest'
|
3
|
-
require '
|
3
|
+
require 'ox'
|
4
4
|
require 'socket'
|
5
5
|
require 'time'
|
6
6
|
|
@@ -28,36 +28,51 @@ module Minitest
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def report
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
@
|
31
|
+
doc = Ox::Document.new(:version => '1.0')
|
32
|
+
instruct = Ox::Instruct.new(:xml)
|
33
|
+
instruct[:version] = '1.0'
|
34
|
+
instruct[:encoding] = 'UTF-8'
|
35
|
+
doc << instruct
|
36
|
+
testsuite = Ox::Element.new('testsuite')
|
37
|
+
testsuite['name'] = @options[:name] || 'minitest'
|
38
|
+
testsuite['timestamp'] = @options[:timestamp]
|
39
|
+
testsuite['hostname'] = @options[:hostname]
|
40
|
+
testsuite['tests'] = @results.size
|
41
|
+
testsuite['skipped'] = @results.count(&:skipped?)
|
42
|
+
testsuite['failures'] = @results.count { |result| !result.error? && result.failure }
|
43
|
+
testsuite['errors'] = @results.count(&:error?)
|
44
|
+
testsuite['time'] = format_time(@results.map(&:time).inject(0, :+))
|
45
|
+
@results.each do |result|
|
46
|
+
testsuite << format(result)
|
47
|
+
end
|
48
|
+
|
49
|
+
doc << testsuite
|
50
|
+
@io << Ox.dump(doc)
|
43
51
|
end
|
44
52
|
|
45
53
|
def format(result, parent = nil)
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
54
|
+
testcase = Ox::Element.new('testcase')
|
55
|
+
testcase['classname'] = format_class(result)
|
56
|
+
testcase['name'] = format_name(result)
|
57
|
+
testcase['time'] = format_time(result.time)
|
58
|
+
testcase['file'] = relative_to_cwd(result.source_location.first)
|
59
|
+
testcase['line'] = result.source_location.last
|
60
|
+
testcase['assertions'] = result.assertions
|
61
|
+
if result.skipped?
|
62
|
+
skipped = Ox::Element.new('skipped')
|
63
|
+
skipped['message'] = result
|
64
|
+
skipped << ""
|
65
|
+
testcase << skipped
|
66
|
+
else
|
67
|
+
result.failures.each do |failure|
|
68
|
+
failure_tag = Ox::Element.new(classify(failure))
|
69
|
+
failure_tag['message'] = result
|
70
|
+
failure_tag << format_backtrace(failure)
|
71
|
+
testcase << failure_tag
|
58
72
|
end
|
59
73
|
end
|
60
|
-
|
74
|
+
|
75
|
+
testcase
|
61
76
|
end
|
62
77
|
|
63
78
|
private
|
@@ -70,8 +85,22 @@ module Minitest
|
|
70
85
|
end
|
71
86
|
end
|
72
87
|
|
88
|
+
def working_directory
|
89
|
+
@working_directory ||= Dir.getwd
|
90
|
+
end
|
91
|
+
|
92
|
+
def failure_message(result)
|
93
|
+
"#{result.klass}##{result.name}: #{result.failure}"
|
94
|
+
end
|
95
|
+
|
96
|
+
def relative_to_cwd(path)
|
97
|
+
path.sub(working_directory, '.')
|
98
|
+
end
|
99
|
+
|
73
100
|
def format_backtrace(failure)
|
74
|
-
failure.backtrace.
|
101
|
+
Minitest.filter_backtrace(failure.backtrace).map do |line|
|
102
|
+
relative_to_cwd(line)
|
103
|
+
end.join("\n")
|
75
104
|
end
|
76
105
|
|
77
106
|
def format_class(result)
|
data/minitest-junit.gemspec
CHANGED
@@ -19,9 +19,11 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
21
|
spec.add_dependency 'minitest', '~> 5.11'
|
22
|
-
spec.add_dependency '
|
22
|
+
spec.add_dependency 'ox', '~> 2', '>= 2.14.2'
|
23
23
|
|
24
24
|
spec.add_development_dependency 'bundler'
|
25
|
-
spec.add_development_dependency '
|
26
|
-
spec.add_development_dependency '
|
25
|
+
spec.add_development_dependency 'nokogiri'
|
26
|
+
spec.add_development_dependency 'pry-byebug'
|
27
|
+
spec.add_development_dependency 'rake', '~> 13'
|
28
|
+
spec.add_development_dependency 'rubocop', '~> 1'
|
27
29
|
end
|
data/test/reporter_test.rb
CHANGED
@@ -1,17 +1,22 @@
|
|
1
1
|
require 'minitest/autorun'
|
2
|
-
require 'builder'
|
3
2
|
require 'stringio'
|
4
3
|
require 'time'
|
4
|
+
require 'nokogiri'
|
5
5
|
|
6
6
|
require 'minitest/junit'
|
7
7
|
|
8
|
+
class FakeTestName; end
|
9
|
+
|
8
10
|
class ReporterTest < Minitest::Test
|
9
11
|
def test_no_tests_generates_an_empty_suite
|
10
12
|
reporter = create_reporter
|
11
13
|
|
12
14
|
reporter.report
|
13
15
|
|
14
|
-
assert_match(
|
16
|
+
assert_match(
|
17
|
+
%r{<?xml version="1.0" encoding="UTF-8"\?>\n<testsuite name="minitest" timestamp="[^"]+" hostname="[^"]+" tests="0" skipped="0" failures="0" errors="0" time="0.000000"\/>},
|
18
|
+
reporter.output
|
19
|
+
)
|
15
20
|
end
|
16
21
|
|
17
22
|
def test_formats_each_successful_result_with_a_formatter
|
@@ -28,11 +33,23 @@ class ReporterTest < Minitest::Test
|
|
28
33
|
reporter = create_reporter
|
29
34
|
|
30
35
|
results = do_formatting_test(reporter, count: rand(100), cause_failures: 1)
|
31
|
-
|
36
|
+
parsed_report = Nokogiri::XML(reporter.output)
|
32
37
|
results.each do |result|
|
33
|
-
|
34
|
-
assert_match(/<failure/, reporter.output)
|
38
|
+
parsed_report.xpath("//testcase[@name='#{result.name}']").any?
|
35
39
|
end
|
40
|
+
# Check if some testcase has a failure
|
41
|
+
assert parsed_report.xpath("//testcase//failure").any?
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_xml_nodes_has_file_and_line_attributes
|
45
|
+
reporter = create_reporter
|
46
|
+
results = do_formatting_test(reporter, count: 2, cause_failures: 1)
|
47
|
+
parsed_report = Nokogiri::XML(reporter.output)
|
48
|
+
example_node = parsed_report.xpath("//testcase").first
|
49
|
+
assert example_node.has_attribute?('file')
|
50
|
+
assert example_node.has_attribute?('line')
|
51
|
+
assert_equal 'unknown', example_node.attribute('file').value
|
52
|
+
assert_equal '-1', example_node.attribute('line').value
|
36
53
|
end
|
37
54
|
|
38
55
|
private
|
@@ -60,7 +77,7 @@ class ReporterTest < Minitest::Test
|
|
60
77
|
test.failures = failures.times.map do |i|
|
61
78
|
Class.new Minitest::Assertion do
|
62
79
|
define_method 'backtrace' do
|
63
|
-
["Model failure \##{i}", 'This is a test backtrace']
|
80
|
+
["Model failure \##{i}", 'This is a test backtrace', "#{__FILE__}:#{__LINE__}"]
|
64
81
|
end
|
65
82
|
end.new
|
66
83
|
end
|
@@ -17,7 +17,10 @@ class TestCaseFormatter < Minitest::Test
|
|
17
17
|
test = create_test_result
|
18
18
|
reporter = create_reporter
|
19
19
|
|
20
|
-
assert_match
|
20
|
+
assert_match(
|
21
|
+
test.name,
|
22
|
+
reporter.format(test).attributes['name']
|
23
|
+
)
|
21
24
|
end
|
22
25
|
|
23
26
|
def test_skipped_tests_generates_skipped_tag
|
@@ -28,7 +31,7 @@ class TestCaseFormatter < Minitest::Test
|
|
28
31
|
|
29
32
|
reporter.report
|
30
33
|
|
31
|
-
assert_match(/<skipped message="[^<>]+"
|
34
|
+
assert_match(/<skipped message="[^<>]+"\><\/skipped>\n\s+<\/testcase>\n\s*<\/testsuite>\n/, reporter.output)
|
32
35
|
end
|
33
36
|
|
34
37
|
def test_failing_tests_creates_failure_tag
|
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: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Allan Espinosa
|
@@ -25,19 +25,25 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '5.11'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: ox
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '2'
|
34
|
+
- - ">="
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 2.14.2
|
34
37
|
type: :runtime
|
35
38
|
prerelease: false
|
36
39
|
version_requirements: !ruby/object:Gem::Requirement
|
37
40
|
requirements:
|
38
41
|
- - "~>"
|
39
42
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
43
|
+
version: '2'
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 2.14.2
|
41
47
|
- !ruby/object:Gem::Dependency
|
42
48
|
name: bundler
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,34 +58,62 @@ dependencies:
|
|
52
58
|
- - ">="
|
53
59
|
- !ruby/object:Gem::Version
|
54
60
|
version: '0'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: nokogiri
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: pry-byebug
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
55
89
|
- !ruby/object:Gem::Dependency
|
56
90
|
name: rake
|
57
91
|
requirement: !ruby/object:Gem::Requirement
|
58
92
|
requirements:
|
59
93
|
- - "~>"
|
60
94
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
95
|
+
version: '13'
|
62
96
|
type: :development
|
63
97
|
prerelease: false
|
64
98
|
version_requirements: !ruby/object:Gem::Requirement
|
65
99
|
requirements:
|
66
100
|
- - "~>"
|
67
101
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
102
|
+
version: '13'
|
69
103
|
- !ruby/object:Gem::Dependency
|
70
104
|
name: rubocop
|
71
105
|
requirement: !ruby/object:Gem::Requirement
|
72
106
|
requirements:
|
73
107
|
- - "~>"
|
74
108
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
109
|
+
version: '1'
|
76
110
|
type: :development
|
77
111
|
prerelease: false
|
78
112
|
version_requirements: !ruby/object:Gem::Requirement
|
79
113
|
requirements:
|
80
114
|
- - "~>"
|
81
115
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
116
|
+
version: '1'
|
83
117
|
description: Junit reporter for Minitest ~> 5.0
|
84
118
|
email:
|
85
119
|
- allan.espinosa@outlook.com
|
@@ -87,6 +121,7 @@ executables: []
|
|
87
121
|
extensions: []
|
88
122
|
extra_rdoc_files: []
|
89
123
|
files:
|
124
|
+
- ".github/workflows/main.yml"
|
90
125
|
- ".gitignore"
|
91
126
|
- Gemfile
|
92
127
|
- LICENSE.txt
|
@@ -119,7 +154,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
119
154
|
- !ruby/object:Gem::Version
|
120
155
|
version: '0'
|
121
156
|
requirements: []
|
122
|
-
rubygems_version: 3.
|
157
|
+
rubygems_version: 3.4.13
|
123
158
|
signing_key:
|
124
159
|
specification_version: 4
|
125
160
|
summary: Junit reporter for Minitest ~> 5.0
|