minitest-junit 0.3.0 → 1.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
  SHA256:
3
- metadata.gz: 6ee1107bc68ec72b4bd9472bc262f60de897b404f4fc41bf819d366655217ca0
4
- data.tar.gz: edff04e8a7625631e4253eda27fb2b6e7bbad68e64a63af81cc764e807bd83b8
3
+ metadata.gz: 4e9e6fe53a55b11d36289c47953e13279e41afff916cb27a7161d64baa61d914
4
+ data.tar.gz: 9311c1d71be9be105f06c0f035bd8411e74f7c3a468d77e85a9cca34b11097f7
5
5
  SHA512:
6
- metadata.gz: 9e53812e887116df0a408dba93453f81cc32bd40f909bd52b9f4daf4c15f64bc632bfd340920e3f9ac4ad3642df3797722be6334a7b7e951b5a3f3304e626c30
7
- data.tar.gz: 2b94a3901ea1fe4c51a2a37fa7f76d120aa8335bd9f23a8319d5a78f40f970709f3573d63d92c2d992c13485e4b4c17ac50355d0a400d10c70eabd3897b94c29
6
+ metadata.gz: 5fd510f4009f0c504c3d7c75f8dc8c217c61a895c92fabb912908d20ccfdfb63454152cf56257e5deb16ae499244505bfbbae768a26b9894650f1a8fa0733d9c
7
+ data.tar.gz: d47bf2f92fb7a8814be1a4337826cbe4e0cb803ac8f6d0a55e285b2a77e3ae642f7f2c597127300f080f25305d887b5a433da6e1906ff81dcca64d4d9734d18a
@@ -1,6 +1,6 @@
1
1
  module Minitest
2
2
  # :nodoc:
3
3
  module Junit
4
- VERSION = '0.3.0'
4
+ VERSION = '1.1.0'
5
5
  end
6
6
  end
@@ -1,6 +1,8 @@
1
1
  require 'minitest/junit/version'
2
2
  require 'minitest'
3
3
  require 'builder'
4
+ require 'socket'
5
+ require 'time'
4
6
 
5
7
  # :nodoc:
6
8
  module Minitest
@@ -11,6 +13,8 @@ module Minitest
11
13
  @io = io
12
14
  @results = []
13
15
  @options = options
16
+ @options[:timestamp] = options.fetch(:timestamp, Time.now.iso8601)
17
+ @options[:hostname] = options.fetch(:hostname, Socket.gethostname)
14
18
  end
15
19
 
16
20
  def passed?
@@ -24,15 +28,26 @@ module Minitest
24
28
  end
25
29
 
26
30
  def report
27
- @io.puts '<testsuite>'
28
- @results.each { |result| @io.puts format(result) }
29
- @io.puts '</testsuite>'
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!
30
43
  end
31
44
 
32
- def format(result)
33
- xml = Builder::XmlMarkup.new
34
- xml.testcase classname: format_class(result), name: format_name(result),
35
- time: result.time, assertions: result.assertions do |t|
45
+ 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|
36
51
  if result.skipped?
37
52
  t.skipped message: result
38
53
  else
@@ -42,7 +57,7 @@ module Minitest
42
57
  end
43
58
  end
44
59
  end
45
- xml.target!
60
+ xml
46
61
  end
47
62
 
48
63
  private
@@ -61,15 +76,19 @@ module Minitest
61
76
 
62
77
  def format_class(result)
63
78
  if @options[:junit_jenkins]
64
- result.class.to_s.gsub(/(.*)::(.*)/, '\1.\2')
79
+ result.klass.to_s.gsub(/(.*)::(.*)/, '\1.\2')
65
80
  else
66
- result.class
81
+ result.klass
67
82
  end
68
83
  end
69
84
 
70
85
  def format_name(result)
71
86
  result.name
72
87
  end
88
+
89
+ def format_time(time)
90
+ Kernel::format('%.6f', time)
91
+ end
73
92
  end
74
93
  end
75
94
  end
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(/^(test)\//)
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.add_dependency 'minitest', '~> 5.0'
21
+ spec.add_dependency 'minitest', '~> 5.11'
22
22
  spec.add_dependency 'builder', '~> 3.2'
23
23
 
24
24
  spec.add_development_dependency 'bundler'
@@ -1,4 +1,5 @@
1
1
  require 'minitest/autorun'
2
+ require 'builder'
2
3
  require 'stringio'
3
4
  require 'time'
4
5
 
@@ -10,34 +11,68 @@ class ReporterTest < Minitest::Test
10
11
 
11
12
  reporter.report
12
13
 
13
- assert_equal "<testsuite>\n</testsuite>\n", reporter.output
14
+ assert_match(/^<testsuite name="minitest" timestamp="[^"]+" hostname="[^"]+" tests="0" skipped="0" failures="0" errors="0" time="0.000000">\n<\/testsuite>\n$/, reporter.output)
14
15
  end
15
16
 
16
- def test_formats_each_result_with_a_formatter
17
+ def test_formats_each_successful_result_with_a_formatter
17
18
  reporter = create_reporter
18
- results = rand(100).times.map do |i|
19
- result = "test_name#{i}"
19
+
20
+ results = do_formatting_test(reporter, count: rand(100), cause_failures: 0)
21
+
22
+ results.each do |result|
23
+ assert_match("<testcase classname=\"FakeTestName\" name=\"#{result.name}\"", reporter.output)
24
+ end
25
+ end
26
+
27
+ def test_formats_each_failed_result_with_a_formatter
28
+ reporter = create_reporter
29
+
30
+ results = do_formatting_test(reporter, count: rand(100), cause_failures: 1)
31
+
32
+ results.each do |result|
33
+ assert_match("<testcase classname=\"FakeTestName\" name=\"#{result.name}\"", reporter.output)
34
+ assert_match(/<failure/, reporter.output)
35
+ end
36
+ end
37
+
38
+ private
39
+
40
+ def do_formatting_test(reporter, count: 1, cause_failures: 0)
41
+ results = count.times.map do |i|
42
+ result = create_test_result(methodname: "test_name#{i}", failures: cause_failures)
20
43
  reporter.record result
21
44
  result
22
45
  end
23
46
 
24
47
  reporter.report
25
48
 
26
- expected = "<testsuite>\n#{results.join "\n"}\n</testsuite>\n"
27
- assert_equal expected, reporter.output
49
+ results
28
50
  end
29
51
 
30
- private
52
+ def create_test_result(name: FakeTestName, methodname: 'test_method_name', successes: 1, failures: 0)
53
+ test = Class.new Minitest::Test do
54
+ define_method 'class' do
55
+ name
56
+ end
57
+ end.new methodname
58
+ test.time = rand(100)
59
+ test.assertions = successes + failures
60
+ test.failures = failures.times.map do |i|
61
+ Class.new Minitest::Assertion do
62
+ define_method 'backtrace' do
63
+ ["Model failure \##{i}", 'This is a test backtrace']
64
+ end
65
+ end.new
66
+ end
67
+ Minitest::Result.from test
68
+ end
31
69
 
32
- def create_reporter
33
- io = StringIO.new
34
- reporter = Minitest::Junit::Reporter.new io, {}
70
+ def create_reporter(options = {})
71
+ io = StringIO.new ''
72
+ reporter = Minitest::Junit::Reporter.new io, options
35
73
  def reporter.output
36
74
  @io.string
37
75
  end
38
- def reporter.format(result)
39
- result
40
- end
41
76
  reporter.start
42
77
  reporter
43
78
  end
@@ -4,12 +4,20 @@ require 'time'
4
4
 
5
5
  require 'minitest/junit'
6
6
 
7
+ class FakeTestName; end
8
+
9
+ module FirstModule
10
+ module SecondModule
11
+ class TestClass; end
12
+ end
13
+ end
14
+
7
15
  class TestCaseFormatter < Minitest::Test
8
16
  def test_all_tests_generate_testcase_tag
9
17
  test = create_test_result
10
18
  reporter = create_reporter
11
19
 
12
- assert_match test.name, reporter.format(test)
20
+ assert_match test.name, reporter.format(test).target!
13
21
  end
14
22
 
15
23
  def test_skipped_tests_generates_skipped_tag
@@ -20,7 +28,7 @@ class TestCaseFormatter < Minitest::Test
20
28
 
21
29
  reporter.report
22
30
 
23
- assert_match(/<skipped message="[^<>]+"\/><\/testcase>\n<\/testsuite>\n/, reporter.output)
31
+ assert_match(/<skipped message="[^<>]+"\/>\n<\/testcase>\n<\/testsuite>\n/, reporter.output)
24
32
  end
25
33
 
26
34
  def test_failing_tests_creates_failure_tag
@@ -46,7 +54,7 @@ class TestCaseFormatter < Minitest::Test
46
54
  end
47
55
 
48
56
  def test_jenkins_sanitizer_uses_modules_as_packages
49
- test = create_test_result 'FirstModule::SecondModule::TestClass'
57
+ test = create_test_result FirstModule::SecondModule::TestClass
50
58
  reporter = create_reporter junit_jenkins: true
51
59
  reporter.record test
52
60
 
@@ -63,7 +71,7 @@ class TestCaseFormatter < Minitest::Test
63
71
  e
64
72
  end
65
73
 
66
- def create_test_result(name = 'ATestClass')
74
+ def create_test_result(name = FakeTestName)
67
75
  test = Class.new Minitest::Test do
68
76
  define_method 'class' do
69
77
  name
@@ -71,7 +79,7 @@ class TestCaseFormatter < Minitest::Test
71
79
  end.new 'test_method_name'
72
80
  test.time = a_number
73
81
  test.assertions = a_number
74
- test
82
+ Minitest::Result.from test
75
83
  end
76
84
 
77
85
  def a_number
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: 0.3.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Allan Espinosa
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '5.0'
19
+ version: '5.11'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '5.0'
26
+ version: '5.11'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: builder
29
29
  requirement: !ruby/object:Gem::Requirement