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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fb75f516200b3009029ae7c6244da92aefcc8894
4
- data.tar.gz: c7a8236e16e84547ba2c09c290bf6b90e1506807
3
+ metadata.gz: 2b91b566809b95993d90be26881a2b7301965f4b
4
+ data.tar.gz: d3dbd54d0b1811587bfa6f8298a64e933a429e18
5
5
  SHA512:
6
- metadata.gz: 3cfc3cae4fd2a4e764ad14e53f7d161c990371834867a12332f57273dc0f51c838b1f24bdd305dd394ea0de92a943c7070aafe84a722c50ffe56ee6da0d9eafc
7
- data.tar.gz: f1e8609c3fb99c055d86a3e03d2d65447ac5ca40ce423d3762404e034813734025c73fe6eeeba7575400014a643dc59ac66a8a2c7c5f5cc64d67e3b35572b370
6
+ metadata.gz: 788bc66cc5ce34ae8fa1944e59299d38d072039dae2ef36ea8938e5eb4bdbf8364a861c6c5ed252add21f23598fd3fb1207022fdcdfa892b4876226629886c98
7
+ data.tar.gz: 26ebf4dbd2d4dfcdbcf0bee8f63dd5aff2fab5d20bea5468b6e6e5fdb2b6e130206993cb8fc739b147652b5ee6ef318733dfd9127da82bd442f653cf3d32d921
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Minitest::Junit
2
2
 
3
- TODO: Write a gem description
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
- TODO: Write usage instructions here
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/[my-github-username]/minitest-junit/fork )
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`)
@@ -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(_io)
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
@@ -1,6 +1,6 @@
1
1
  module Minitest
2
2
  # :nodoc:
3
3
  module Junit
4
- VERSION = '0.0.1'
4
+ VERSION = '0.1.0'
5
5
  end
6
6
  end
@@ -13,10 +13,9 @@ module Minitest
13
13
  end
14
14
 
15
15
  def self.plugin_junit_init(options)
16
- if 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]
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
@@ -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
@@ -0,0 +1,2 @@
1
+ Style/Documentation:
2
+ Enabled: false
@@ -2,7 +2,6 @@ require 'minitest/autorun'
2
2
  require 'minitest/mock'
3
3
  require 'minitest/junit_plugin'
4
4
 
5
- # :nodoc:
6
5
  class PluginTest < Minitest::Test
7
6
  def test_by_default_the_plugin_is_disabled
8
7
  opts = OptionParser.new
@@ -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.1
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-07-26 00:00:00.000000000 Z
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.2.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