minitest-junit 0.0.1 → 0.1.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
  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