minitest-junit_formatter 0.1.0 → 0.2.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: 6187bdbdbb70fedb0f8ae74880f5dc52be2b5fcd1dbbf8c2c33d1d45ec50951c
4
- data.tar.gz: d6f6d37a483382f086aae7257bfd11b5c4df6bdcfb8e95223ffdb3388e89bdd1
3
+ metadata.gz: 2244c89fd3b7c3f76b0ce49128493d789c1bea57596822f91b299f13d4366d02
4
+ data.tar.gz: ba60d1e162b3bf1aefcb7191a73265aad154b57e426f888831a6844bc5d44348
5
5
  SHA512:
6
- metadata.gz: ef3ec5092642cd0a897e94710e959090f6745ec02a659bba65fa4ffda7159f9ed3a25c0c787eb17f0e27b0f37f2327322cb391d9718005f3841e03498f600c00
7
- data.tar.gz: 85257d6d9755ba2829b0d83e6ce3132768b8ab3c287b177059e37f123996cec7ba93d80ce525f94c5a6d315b13d2518eb4995dbba541bc7d612a5a6c4942b9fe
6
+ metadata.gz: 15616fc36e4d49e9424a978bea0d9b862da6e8e87f33e361ad7edbb9c0e62d47bcc4b08cbbcd6bc26d036da121804186f3a7617edd150ae2f5b6778b212a436e
7
+ data.tar.gz: 3097d847d538b471f8d780e7247b3609f492e39301b010dbf739b38d5276ba903d566b87507447a97bfd4e830a4f6c019e347e78fbd5daccf11b62f4601fe000
data/README.md CHANGED
@@ -14,7 +14,7 @@ And then execute:
14
14
 
15
15
  Or install it yourself as:
16
16
 
17
- $ gem install minitest-junit
17
+ $ gem install minitest-junit_formatter
18
18
 
19
19
  ## Usage
20
20
 
@@ -27,10 +27,9 @@ Or install it yourself as:
27
27
  --junit-jenkins Sanitize test names for Jenkins display
28
28
  ...
29
29
 
30
- ## Contributing
30
+ ## Acknowledgment
31
+
32
+ This project is based on
33
+
34
+ https://github.com/aespinosa/minitest-junit
31
35
 
32
- 1. Fork it ( https://github.com/aespinosa/minitest-junit/fork )
33
- 2. Create your feature branch (`git checkout -b my-new-feature`)
34
- 3. Commit your changes (`git commit -am 'Add some feature'`)
35
- 4. Push to the branch (`git push origin my-new-feature`)
36
- 5. Create a new Pull Request
@@ -1,6 +1,6 @@
1
1
  module Minitest
2
2
  # :nodoc:
3
3
  module JunitFormatter
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.0"
5
5
  end
6
6
  end
@@ -0,0 +1,31 @@
1
+ module Minitest
2
+ module JunitFormatter
3
+ class NokogiriDocument
4
+ def document
5
+ @doc = Nokogiri::XML::Document.new
6
+ @doc.encoding = 'UTF-8'
7
+ @doc
8
+ end
9
+
10
+ def element(name)
11
+ Nokogiri::XML::Node.new(name, @doc)
12
+ end
13
+
14
+ def set_attr(el, name, value)
15
+ el[name.to_s] = value.to_s
16
+ end
17
+
18
+ def add_child(parent, child)
19
+ parent << child
20
+ end
21
+
22
+ def add_text(el, text)
23
+ el.content = text.to_s
24
+ end
25
+
26
+ def dump(doc)
27
+ doc.to_xml(indent: 2)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,35 @@
1
+ module Minitest
2
+ module JunitFormatter
3
+ class RexmlDocument
4
+ def document
5
+ doc = REXML::Document.new
6
+ doc << REXML::XMLDecl.new('1.0', 'UTF-8')
7
+ doc
8
+ end
9
+
10
+ def element(name)
11
+ REXML::Element.new(name)
12
+ end
13
+
14
+ def set_attr(el, name, value)
15
+ el.add_attribute(name, value.to_s)
16
+ end
17
+
18
+ def add_child(parent, child)
19
+ parent << child
20
+ end
21
+
22
+ def add_text(el, text)
23
+ el.add_text(text.to_s)
24
+ end
25
+
26
+ def dump(doc)
27
+ output = String.new
28
+ formatter = REXML::Formatters::Pretty.new(2)
29
+ formatter.compact = true
30
+ formatter.write(doc, output)
31
+ output + "\n"
32
+ end
33
+ end
34
+ end
35
+ end
@@ -1,9 +1,17 @@
1
1
  require "minitest/junit_formatter/version"
2
2
  require 'minitest'
3
- require 'ox'
4
3
  require 'socket'
5
4
  require 'time'
6
5
 
6
+ # XML backend: Nokogiri (fast) > REXML (stdlib fallback).
7
+ begin
8
+ require 'nokogiri'
9
+ require "minitest/junit_formatter/xml_nokogiri"
10
+ rescue LoadError
11
+ require 'rexml/document'
12
+ require "minitest/junit_formatter/xml_rexml"
13
+ end
14
+
7
15
  # :nodoc:
8
16
  module Minitest
9
17
  module JunitFormatter
@@ -15,6 +23,8 @@ module Minitest
15
23
  @options = options
16
24
  @options[:timestamp] = options.fetch(:timestamp, Time.now.iso8601)
17
25
  @options[:hostname] = options.fetch(:hostname, Socket.gethostname)
26
+
27
+ @doc = document_factory.new
18
28
  end
19
29
 
20
30
  def passed?
@@ -28,52 +38,47 @@ module Minitest
28
38
  end
29
39
 
30
40
  def report
31
- doc = Ox::Document.new(version: '1.0', encoding: 'UTF-8')
32
- instruct = Ox::Instruct.new(:xml)
33
- instruct[:version] = '1.0'
34
- instruct[:encoding] = 'UTF-8'
35
- doc << instruct
36
-
37
- testsuite = Ox::Element.new('testsuite')
38
- testsuite['name'] = @options[:name] || 'minitest'
39
- testsuite['timestamp'] = @options[:timestamp]
40
- testsuite['hostname'] = @options[:hostname]
41
- testsuite['tests'] = @results.size
42
- testsuite['skipped'] = @results.count(&:skipped?)
43
- testsuite['failures'] = @results.count { |result| !result.error? && result.failure }
44
- testsuite['errors'] = @results.count(&:error?)
45
- testsuite['time'] = format_time(@results.map(&:time).inject(0, :+))
41
+ doc = @doc.document
42
+
43
+ testsuites = @doc.element('testsuites')
44
+ testsuite = @doc.element('testsuite')
45
+ @doc.set_attr(testsuite, 'name', @options[:name] || 'minitest')
46
+ @doc.set_attr(testsuite, 'timestamp', @options[:timestamp])
47
+ @doc.set_attr(testsuite, 'hostname', @options[:hostname])
48
+ @doc.set_attr(testsuite, 'tests', @results.size)
49
+ @doc.set_attr(testsuite, 'skipped', @results.count(&:skipped?))
50
+ @doc.set_attr(testsuite, 'failures', @results.count { |result| !result.error? && result.failure })
51
+ @doc.set_attr(testsuite, 'errors', @results.count(&:error?))
52
+ @doc.set_attr(testsuite, 'time', format_time(@results.map(&:time).inject(0, :+)))
46
53
  @results.each do |result|
47
- testsuite << format(result)
54
+ @doc.add_child(testsuite, format(result))
48
55
  end
49
56
 
50
- testsuites = Ox::Element.new('testsuites')
51
- testsuites << testsuite
52
-
53
- doc << testsuites
54
- @io << Ox.dump(doc)
57
+ @doc.add_child(testsuites, testsuite)
58
+ @doc.add_child(doc, testsuites)
59
+ @io << @doc.dump(doc)
55
60
  end
56
61
 
57
62
  def format(result, parent = nil)
58
- testcase = Ox::Element.new('testcase')
59
- testcase['classname'] = format_class(result)
60
- testcase['name'] = format_name(result)
61
- testcase['time'] = format_time(result.time)
62
- testcase['file'] = relative_to_cwd(result.source_location.first)
63
- testcase['line'] = result.source_location.last
64
- testcase['assertions'] = result.assertions
63
+ testcase = @doc.element('testcase')
64
+ @doc.set_attr(testcase, 'classname', format_class(result))
65
+ @doc.set_attr(testcase, 'name', format_name(result))
66
+ @doc.set_attr(testcase, 'time', format_time(result.time))
67
+ @doc.set_attr(testcase, 'file', relative_to_cwd(result.source_location.first))
68
+ @doc.set_attr(testcase, 'line', result.source_location.last)
69
+ @doc.set_attr(testcase, 'assertions', result.assertions)
65
70
 
66
71
  if result.skipped?
67
- skipped = Ox::Element.new('skipped')
68
- skipped['message'] = result
69
- skipped << ""
70
- testcase << skipped
72
+ skipped = @doc.element('skipped')
73
+ @doc.set_attr(skipped, 'message', result)
74
+ @doc.add_text(skipped, '')
75
+ @doc.add_child(testcase, skipped)
71
76
  else
72
77
  result.failures.each do |failure|
73
- failure_tag = Ox::Element.new(classify(failure))
74
- failure_tag['message'] = result
75
- failure_tag << format_backtrace(failure)
76
- testcase << failure_tag
78
+ failure_tag = @doc.element(classify(failure))
79
+ @doc.set_attr(failure_tag, 'message', result)
80
+ @doc.add_text(failure_tag, format_backtrace(failure))
81
+ @doc.add_child(testcase, failure_tag)
77
82
  end
78
83
  end
79
84
 
@@ -82,9 +87,9 @@ module Minitest
82
87
  # Output according to Gitlab format
83
88
  # https://docs.gitlab.com/ee/ci/testing/unit_test_reports.html#view-junit-screenshots-on-gitlab
84
89
  if result.respond_to?("metadata") && result.metadata[:failure_screenshot_path]
85
- screenshot = Ox::Element.new("system-out")
86
- screenshot << "[[ATTACHMENT|#{result.metadata[:failure_screenshot_path]}]]"
87
- testcase << screenshot
90
+ screenshot = @doc.element("system-out")
91
+ @doc.add_text(screenshot, "[[ATTACHMENT|#{result.metadata[:failure_screenshot_path]}]]")
92
+ @doc.add_child(testcase, screenshot)
88
93
  end
89
94
 
90
95
  testcase
@@ -92,6 +97,14 @@ module Minitest
92
97
 
93
98
  private
94
99
 
100
+ def document_factory
101
+ if defined?(Nokogiri)
102
+ NokogiriDocument
103
+ else
104
+ RexmlDocument
105
+ end
106
+ end
107
+
95
108
  def classify(failure)
96
109
  if failure.instance_of? UnexpectedError
97
110
  'error'
@@ -19,7 +19,6 @@ 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 'ox', '~> 2', '>= 2.14.2'
23
22
 
24
23
  spec.add_development_dependency 'bundler'
25
24
  spec.add_development_dependency 'nokogiri'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minitest-junit_formatter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jesse Chavez
@@ -24,26 +24,6 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '5.11'
27
- - !ruby/object:Gem::Dependency
28
- name: ox
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '2'
34
- - - ">="
35
- - !ruby/object:Gem::Version
36
- version: 2.14.2
37
- type: :runtime
38
- prerelease: false
39
- version_requirements: !ruby/object:Gem::Requirement
40
- requirements:
41
- - - "~>"
42
- - !ruby/object:Gem::Version
43
- version: '2'
44
- - - ">="
45
- - !ruby/object:Gem::Version
46
- version: 2.14.2
47
27
  - !ruby/object:Gem::Dependency
48
28
  name: bundler
49
29
  requirement: !ruby/object:Gem::Requirement
@@ -115,6 +95,8 @@ files:
115
95
  - Rakefile
116
96
  - lib/minitest/junit_formatter.rb
117
97
  - lib/minitest/junit_formatter/version.rb
98
+ - lib/minitest/junit_formatter/xml_nokogiri.rb
99
+ - lib/minitest/junit_formatter/xml_rexml.rb
118
100
  - lib/minitest/junit_formatter_plugin.rb
119
101
  - minitest-junit_formatter.gemspec
120
102
  - test/.rubocop.yml