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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4e9e6fe53a55b11d36289c47953e13279e41afff916cb27a7161d64baa61d914
4
- data.tar.gz: 9311c1d71be9be105f06c0f035bd8411e74f7c3a468d77e85a9cca34b11097f7
3
+ metadata.gz: 518beb2f7cb77d8e953d77f9b4342c5ec1d20603b8807782f71305b58a0f985d
4
+ data.tar.gz: d3dec1da3aa864c7e92a80628353e24c75a465df90d7e60fddb134a1dc725d89
5
5
  SHA512:
6
- metadata.gz: 5fd510f4009f0c504c3d7c75f8dc8c217c61a895c92fabb912908d20ccfdfb63454152cf56257e5deb16ae499244505bfbbae768a26b9894650f1a8fa0733d9c
7
- data.tar.gz: d47bf2f92fb7a8814be1a4337826cbe4e0cb803ac8f6d0a55e285b2a77e3ae642f7f2c597127300f080f25305d887b5a433da6e1906ff81dcca64d4d9734d18a
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
@@ -1,6 +1,6 @@
1
1
  module Minitest
2
2
  # :nodoc:
3
3
  module Junit
4
- VERSION = '1.1.0'
4
+ VERSION = '2.0.0'
5
5
  end
6
6
  end
@@ -1,6 +1,6 @@
1
1
  require 'minitest/junit/version'
2
2
  require 'minitest'
3
- require 'builder'
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
- 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!
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
- 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|
51
- if result.skipped?
52
- t.skipped message: result
53
- else
54
- result.failures.each do |failure|
55
- type = classify failure
56
- xml.tag! type, format_backtrace(failure), message: result
57
- end
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
- xml
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.join("\n")
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)
@@ -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 'builder', '~> 3.2'
22
+ spec.add_dependency 'ox', '~> 2', '>= 2.14.2'
23
23
 
24
24
  spec.add_development_dependency 'bundler'
25
- spec.add_development_dependency 'rake', '~> 10.3.2'
26
- spec.add_development_dependency 'rubocop', '~> 0.24.1'
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
@@ -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(/^<testsuite name="minitest" timestamp="[^"]+" hostname="[^"]+" tests="0" skipped="0" failures="0" errors="0" time="0.000000">\n<\/testsuite>\n$/, reporter.output)
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
- assert_match("<testcase classname=\"FakeTestName\" name=\"#{result.name}\"", reporter.output)
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 test.name, reporter.format(test).target!
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="[^<>]+"\/>\n<\/testcase>\n<\/testsuite>\n/, reporter.output)
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: 1.1.0
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: builder
28
+ name: ox
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '3.2'
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: '3.2'
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: 10.3.2
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: 10.3.2
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: 0.24.1
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: 0.24.1
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.2.26
157
+ rubygems_version: 3.4.13
123
158
  signing_key:
124
159
  specification_version: 4
125
160
  summary: Junit reporter for Minitest ~> 5.0