minitest-junit 0.0.1 → 0.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/README.md +9 -3
- data/lib/minitest/junit.rb +58 -2
- data/lib/minitest/junit/version.rb +1 -1
- data/lib/minitest/junit_plugin.rb +4 -5
- data/minitest-junit.gemspec +1 -0
- data/test/.rubocop.yml +2 -0
- data/test/junit_plugin_test.rb +0 -1
- data/test/reporter_test.rb +44 -0
- data/test/testcase_formatter_test.rb +79 -0
- metadata +23 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2b91b566809b95993d90be26881a2b7301965f4b
|
4
|
+
data.tar.gz: d3dbd54d0b1811587bfa6f8298a64e933a429e18
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 788bc66cc5ce34ae8fa1944e59299d38d072039dae2ef36ea8938e5eb4bdbf8364a861c6c5ed252add21f23598fd3fb1207022fdcdfa892b4876226629886c98
|
7
|
+
data.tar.gz: 26ebf4dbd2d4dfcdbcf0bee8f63dd5aff2fab5d20bea5468b6e6e5fdb2b6e130206993cb8fc739b147652b5ee6ef318733dfd9127da82bd442f653cf3d32d921
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Minitest::Junit
|
2
2
|
|
3
|
-
|
3
|
+
Generates a JUnit-compatible XML report for consumption with Jenkins.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -18,11 +18,17 @@ Or install it yourself as:
|
|
18
18
|
|
19
19
|
## Usage
|
20
20
|
|
21
|
-
|
21
|
+
$ ruby your_test.rb --help
|
22
|
+
minitest options:
|
23
|
+
...
|
24
|
+
Known extensions: junit, ...
|
25
|
+
--junit Generate a junit xml report
|
26
|
+
--junit-filename=OUT Target output filename. Defaults to report.xml
|
27
|
+
...
|
22
28
|
|
23
29
|
## Contributing
|
24
30
|
|
25
|
-
1. Fork it ( https://github.com/
|
31
|
+
1. Fork it ( https://github.com/aespinosa/minitest-junit/fork )
|
26
32
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
33
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
34
|
4. Push to the branch (`git push origin my-new-feature`)
|
data/lib/minitest/junit.rb
CHANGED
@@ -1,12 +1,68 @@
|
|
1
1
|
require 'minitest/junit/version'
|
2
|
+
require 'minitest'
|
3
|
+
require 'builder'
|
2
4
|
|
3
5
|
# :nodoc:
|
4
6
|
module Minitest
|
5
|
-
# :nodoc:
|
6
7
|
module Junit
|
7
8
|
# :nodoc:
|
8
9
|
class Reporter
|
9
|
-
def initialize(
|
10
|
+
def initialize(io)
|
11
|
+
@io = io
|
12
|
+
@results = []
|
13
|
+
end
|
14
|
+
|
15
|
+
def passed?
|
16
|
+
true
|
17
|
+
end
|
18
|
+
|
19
|
+
def start; end
|
20
|
+
|
21
|
+
def record(result)
|
22
|
+
@results << result
|
23
|
+
end
|
24
|
+
|
25
|
+
def report
|
26
|
+
@io.puts '<testsuite>'
|
27
|
+
@results.each { |result| @io.puts format(result) }
|
28
|
+
@io.puts '</testsuite>'
|
29
|
+
end
|
30
|
+
|
31
|
+
def format(result)
|
32
|
+
xml = Builder::XmlMarkup.new
|
33
|
+
xml.testcase classname: format_class(result), name: format_name(result),
|
34
|
+
time: result.time, assertions: result.assertions do |t|
|
35
|
+
t.skipped if result.skipped?
|
36
|
+
result.failures.each do |failure|
|
37
|
+
type = classify failure
|
38
|
+
xml.tag! type, format_backtrace(failure), message: result
|
39
|
+
end
|
40
|
+
end
|
41
|
+
xml.target!
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def classify(failure)
|
47
|
+
if failure.instance_of? UnexpectedError
|
48
|
+
'error'
|
49
|
+
else
|
50
|
+
'failure'
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def format_backtrace(failure)
|
55
|
+
failure.backtrace.join("\n")
|
56
|
+
end
|
57
|
+
|
58
|
+
def format_class(result)
|
59
|
+
result.class.to_s.gsub(/(.*)::(.*)/, '\1.\2')
|
60
|
+
result.class
|
61
|
+
end
|
62
|
+
|
63
|
+
def format_name(result)
|
64
|
+
result.name.sub(/^test_/, '').gsub('_', ' ')
|
65
|
+
result.name
|
10
66
|
end
|
11
67
|
end
|
12
68
|
end
|
@@ -13,10 +13,9 @@ module Minitest
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def self.plugin_junit_init(options)
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
end
|
16
|
+
return unless options[:junit]
|
17
|
+
file_klass = options[:file_klass] || File
|
18
|
+
io = file_klass.new options[:junit_filename] || 'report.xml', 'w'
|
19
|
+
reporter << Junit::Reporter.new(io) if options[:junit]
|
21
20
|
end
|
22
21
|
end
|
data/minitest-junit.gemspec
CHANGED
@@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
21
|
spec.add_dependency 'minitest', '~> 5.0'
|
22
|
+
spec.add_dependency 'builder', '~> 3.2'
|
22
23
|
|
23
24
|
spec.add_development_dependency 'bundler', '~> 1.6'
|
24
25
|
spec.add_development_dependency 'rake', '~> 10.3.2'
|
data/test/.rubocop.yml
ADDED
data/test/junit_plugin_test.rb
CHANGED
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'stringio'
|
3
|
+
require 'time'
|
4
|
+
|
5
|
+
require 'minitest/junit'
|
6
|
+
|
7
|
+
class ReporterTest < Minitest::Test
|
8
|
+
def test_no_tests_generates_an_empty_suite
|
9
|
+
reporter = create_reporter
|
10
|
+
|
11
|
+
reporter.report
|
12
|
+
|
13
|
+
assert_equal "<testsuite>\n</testsuite>\n", reporter.output
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_formats_each_result_with_a_formatter
|
17
|
+
reporter = create_reporter
|
18
|
+
results = rand(100).times.map do |i|
|
19
|
+
result = "test_name#{i}"
|
20
|
+
reporter.record result
|
21
|
+
result
|
22
|
+
end
|
23
|
+
|
24
|
+
reporter.report
|
25
|
+
|
26
|
+
expected = "<testsuite>\n#{results.join "\n"}\n</testsuite>\n"
|
27
|
+
assert_equal expected, reporter.output
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def create_reporter
|
33
|
+
io = StringIO.new
|
34
|
+
reporter = Minitest::Junit::Reporter.new io
|
35
|
+
def reporter.output
|
36
|
+
@io.string
|
37
|
+
end
|
38
|
+
def reporter.format(result)
|
39
|
+
result
|
40
|
+
end
|
41
|
+
reporter.start
|
42
|
+
reporter
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'stringio'
|
3
|
+
require 'time'
|
4
|
+
|
5
|
+
require 'minitest/junit'
|
6
|
+
|
7
|
+
class TestCaseFormatter < Minitest::Test
|
8
|
+
def test_all_tests_generate_testcase_tag
|
9
|
+
test = create_test_result
|
10
|
+
reporter = create_reporter
|
11
|
+
|
12
|
+
assert_match test.name, reporter.format(test)
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_skipped_tests_generates_skipped_tag
|
16
|
+
test = create_test_result
|
17
|
+
test.failures << create_error(Minitest::Skip)
|
18
|
+
reporter = create_reporter
|
19
|
+
reporter.record test
|
20
|
+
|
21
|
+
reporter.report
|
22
|
+
|
23
|
+
assert_match(/<skipped\/>/, reporter.output)
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_failing_tests_creates_failure_tag
|
27
|
+
test = create_test_result
|
28
|
+
test.failures << create_error(Minitest::Assertion)
|
29
|
+
reporter = create_reporter
|
30
|
+
reporter.record test
|
31
|
+
|
32
|
+
reporter.report
|
33
|
+
|
34
|
+
assert_match(/<failure/, reporter.output)
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_other_errors_generates_error_tag
|
38
|
+
test = create_test_result
|
39
|
+
test.failures << Minitest::UnexpectedError.new(create_error(Exception))
|
40
|
+
reporter = create_reporter
|
41
|
+
reporter.record test
|
42
|
+
|
43
|
+
reporter.report
|
44
|
+
|
45
|
+
assert_match(/<error/, reporter.output)
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def create_error(klass)
|
51
|
+
fail klass, "A #{klass} failure"
|
52
|
+
rescue klass => e
|
53
|
+
e
|
54
|
+
end
|
55
|
+
|
56
|
+
def create_test_result
|
57
|
+
test = Minitest::Test.new 'passing test'
|
58
|
+
def test.class
|
59
|
+
'ATestClass'
|
60
|
+
end
|
61
|
+
test.time = a_number
|
62
|
+
test.assertions = a_number
|
63
|
+
test
|
64
|
+
end
|
65
|
+
|
66
|
+
def a_number
|
67
|
+
rand(100)
|
68
|
+
end
|
69
|
+
|
70
|
+
def create_reporter
|
71
|
+
io = StringIO.new ''
|
72
|
+
reporter = Minitest::Junit::Reporter.new io
|
73
|
+
def reporter.output
|
74
|
+
@io.string
|
75
|
+
end
|
76
|
+
reporter.start
|
77
|
+
reporter
|
78
|
+
end
|
79
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: minitest-junit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Allan Espinosa
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-10-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '5.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: builder
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3.2'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3.2'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: bundler
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -82,7 +96,10 @@ files:
|
|
82
96
|
- lib/minitest/junit/version.rb
|
83
97
|
- lib/minitest/junit_plugin.rb
|
84
98
|
- minitest-junit.gemspec
|
99
|
+
- test/.rubocop.yml
|
85
100
|
- test/junit_plugin_test.rb
|
101
|
+
- test/reporter_test.rb
|
102
|
+
- test/testcase_formatter_test.rb
|
86
103
|
homepage: http://github.com/aespinosa/minitest-junit
|
87
104
|
licenses:
|
88
105
|
- MIT
|
@@ -103,9 +120,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
103
120
|
version: '0'
|
104
121
|
requirements: []
|
105
122
|
rubyforge_project:
|
106
|
-
rubygems_version: 2.
|
123
|
+
rubygems_version: 2.4.1
|
107
124
|
signing_key:
|
108
125
|
specification_version: 4
|
109
126
|
summary: Junit reporter for Minitest ~> 5.0
|
110
127
|
test_files:
|
128
|
+
- test/.rubocop.yml
|
111
129
|
- test/junit_plugin_test.rb
|
130
|
+
- test/reporter_test.rb
|
131
|
+
- test/testcase_formatter_test.rb
|