minitest-junit 1.1.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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