rspec_junit_formatter 0.4.0.pre → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- checksums.yaml.gz.sig +0 -0
- data/LICENSE +1 -1
- data/README.md +53 -20
- data/lib/rspec_junit_formatter/rspec2.rb +17 -2
- data/lib/rspec_junit_formatter/rspec3.rb +47 -31
- data/lib/rspec_junit_formatter.rb +36 -3
- data.tar.gz.sig +0 -0
- metadata +82 -20
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: ea46534b4275bee49fd9211ab8d702273475b2cf8ae6ec6fadf70242036b47a6
|
4
|
+
data.tar.gz: 1095a37248d6a758198fc605ff5306efa200051d8b1526ded3b70642169a9bc6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 87a3d85fa44c45b8721b65115636a1d3eaf53dde58077aeb1d37417136350440edf0a1e20b3260604a7135482b710f45a25ed8853755f1bf3c9ca255ab47ef52
|
7
|
+
data.tar.gz: '09b6904589c20fdff3470e7a243b2d018d283fff53cacc60f7c9f6a646506e2c3148e6aa08e825acf56dd4c453a0bca14d9177f6648cb5a17087dfa1fa272ada'
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -1,11 +1,15 @@
|
|
1
1
|
# RSpec JUnit Formatter
|
2
2
|
|
3
|
-
[![Build results](
|
3
|
+
[![Build results](https://github.com/sj26/rspec_junit_formatter/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/sj26/rspec_junit_formatter/actions/workflows/ci.yml?branch=main)
|
4
4
|
[![Gem version](http://img.shields.io/gem/v/rspec_junit_formatter.svg)](https://rubygems.org/gems/rspec_junit_formatter)
|
5
5
|
|
6
|
-
[RSpec][rspec] 2 & 3 results that [Jenkins][jenkins]
|
6
|
+
[RSpec][rspec] 2 & 3 results that your CI can read. [Jenkins][jenkins-junit], [Buildkite][buildkite-junit], [CircleCI][circleci-junit], [Gitlab][gitlab-junit], and probably more, too.
|
7
7
|
|
8
|
-
|
8
|
+
[rspec]: http://rspec.info/
|
9
|
+
[jenkins-junit]: https://jenkins.io/doc/pipeline/steps/junit/
|
10
|
+
[buildkite-junit]: https://github.com/buildkite/rspec-junit-example
|
11
|
+
[circleci-junit]: https://circleci.com/docs/2.0/collect-test-data/
|
12
|
+
[gitlab-junit]: https://docs.gitlab.com/ee/ci/junit_test_reports.html#ruby-example
|
9
13
|
|
10
14
|
## Usage
|
11
15
|
|
@@ -29,6 +33,8 @@ You can use it in combination with other [formatters][rspec-formatters], too:
|
|
29
33
|
rspec --format progress --format RspecJunitFormatter --out rspec.xml
|
30
34
|
```
|
31
35
|
|
36
|
+
[rspec-formatters]: https://relishapp.com/rspec/rspec-core/v/3-6/docs/formatters
|
37
|
+
|
32
38
|
### Using in your project with Bundler
|
33
39
|
|
34
40
|
Add it to your Gemfile if you're using [Bundler][bundler]. Put it in the same groups as rspec.
|
@@ -46,6 +52,8 @@ Put the same arguments as the commands above in [your `.rspec`][rspec-file]:
|
|
46
52
|
--format RspecJunitFormatter
|
47
53
|
--out rspec.xml
|
48
54
|
```
|
55
|
+
[bundler]: https://bundler.io
|
56
|
+
[rspec-file]: https://relishapp.com/rspec/rspec-core/v/3-6/docs/configuration/read-command-line-configuration-options-from-files
|
49
57
|
|
50
58
|
### Parallel tests
|
51
59
|
|
@@ -58,31 +66,56 @@ For use with `parallel_tests`, add `$TEST_ENV_NUMBER` in the output file option
|
|
58
66
|
|
59
67
|
The formatter includes `$TEST_ENV_NUMBER` in the test suite name within the XML, too.
|
60
68
|
|
69
|
+
### Capturing output
|
70
|
+
|
71
|
+
If you like, you can capture the standard output and error streams of each test into the `:stdout` and `:stderr` example metadata which will be added to the junit report, e.g.:
|
72
|
+
|
73
|
+
```ruby
|
74
|
+
# spec_helper.rb
|
75
|
+
|
76
|
+
RSpec.configure do |config|
|
77
|
+
# register around filter that captures stdout and stderr
|
78
|
+
config.around(:each) do |example|
|
79
|
+
$stdout = StringIO.new
|
80
|
+
$stderr = StringIO.new
|
81
|
+
|
82
|
+
example.run
|
83
|
+
|
84
|
+
example.metadata[:stdout] = $stdout.string
|
85
|
+
example.metadata[:stderr] = $stderr.string
|
86
|
+
|
87
|
+
$stdout = STDOUT
|
88
|
+
$stderr = STDERR
|
89
|
+
end
|
90
|
+
end
|
91
|
+
```
|
92
|
+
|
93
|
+
Note that this example captures all output from every example all the time, potentially interfering with local debugging. You might like to restrict this to only on CI, or by using [rspec filters](https://relishapp.com/rspec/rspec-core/docs/hooks/filters).
|
94
|
+
|
61
95
|
## Caveats
|
62
96
|
|
63
|
-
* XML can only represent a [limited subset of characters][xml-charsets] which
|
64
|
-
|
65
|
-
|
66
|
-
|
97
|
+
* XML can only represent a [limited subset of characters][xml-charsets] which excludes null bytes and most control characters. This gem will use character entities where possible and fall back to replacing invalid characters with Ruby-like escape codes otherwise. For example, the null byte becomes `\0`.
|
98
|
+
|
99
|
+
[xml-charsets]: https://www.w3.org/TR/xml/#charsets
|
100
|
+
|
101
|
+
## Development
|
102
|
+
|
103
|
+
Run the specs with `bundle exec rake`, which uses [Appraisal][appraisal] to run the specs against all supported versions of rspec.
|
104
|
+
|
105
|
+
[appraisal]: https://github.com/thoughtbot/appraisal
|
67
106
|
|
68
|
-
##
|
107
|
+
## Releasing
|
69
108
|
|
70
|
-
|
71
|
-
would this correspond to example groups? The subject? The spec file? Not
|
72
|
-
sure yet.
|
109
|
+
Bump the gem version in the gemspec, and commit. Then `bundle exec rake build` to build a gem package, `bundle exec rake install` to install and test it locally, then `bundle exec rake release` to tag and push the commits and gem.
|
73
110
|
|
74
111
|
## License
|
75
112
|
|
76
|
-
The MIT License, see [LICENSE]
|
113
|
+
The MIT License, see [LICENSE](./LICENSE).
|
114
|
+
|
115
|
+
## Thanks
|
116
|
+
|
117
|
+
Inspired by the work of [Diego Souza][dgvncsz0f] on [RSpec Formatters][dgvncsz0f/rspec_formatters] after frustration with [CI Reporter][ci_reporter].
|
77
118
|
|
78
|
-
[rspec]: http://rspec.info/
|
79
|
-
[rspec-formatters]: https://relishapp.com/rspec/rspec-core/v/3-6/docs/formatters
|
80
|
-
[rspec-file]: https://relishapp.com/rspec/rspec-core/v/3-6/docs/configuration/read-command-line-configuration-options-from-files
|
81
|
-
[jenkins]: http://jenkins-ci.org/
|
82
119
|
[dgvncsz0f]: https://github.com/dgvncsz0f
|
83
120
|
[dgvncsz0f/rspec_formatters]: https://github.com/dgvncsz0f/rspec_formatters
|
84
121
|
[ci_reporter]: https://github.com/nicksieger/ci_reporter
|
85
|
-
[bundler]: http://gembundler.com/
|
86
|
-
[fuubar]: http://jeffkreeftmeijer.com/2010/fuubar-the-instafailing-rspec-progress-bar-formatter/
|
87
|
-
[license]: https://github.com/sj26/rspec-junit-formatter/blob/master/LICENSE
|
88
|
-
[xml-charsets]: https://www.w3.org/TR/xml/#charsets
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class RSpecJUnitFormatter < RSpec::Core::Formatters::BaseFormatter
|
2
4
|
attr_reader :started
|
3
5
|
|
@@ -47,18 +49,23 @@ private
|
|
47
49
|
end
|
48
50
|
|
49
51
|
def failure_message_for(example)
|
50
|
-
exception_for(example).to_s
|
52
|
+
strip_diff_colors(exception_for(example).to_s)
|
51
53
|
end
|
52
54
|
|
53
55
|
def failure_for(example)
|
54
56
|
exception = exception_for(example)
|
57
|
+
message = strip_diff_colors(exception.message)
|
55
58
|
backtrace = format_backtrace(exception.backtrace, example)
|
56
59
|
|
57
60
|
if shared_group = find_shared_group(example)
|
58
61
|
backtrace << "Shared Example Group: \"#{shared_group.metadata[:shared_group_name]}\" called from #{shared_group.metadata[:example_group][:location]}"
|
59
62
|
end
|
60
63
|
|
61
|
-
"#{
|
64
|
+
"#{message}\n#{backtrace.join("\n")}"
|
65
|
+
end
|
66
|
+
|
67
|
+
def error_count
|
68
|
+
0
|
62
69
|
end
|
63
70
|
|
64
71
|
def find_shared_group(example)
|
@@ -68,4 +75,12 @@ private
|
|
68
75
|
def group_and_parent_groups(example)
|
69
76
|
example.example_group.parent_groups + [example.example_group]
|
70
77
|
end
|
78
|
+
|
79
|
+
def stdout_for(example)
|
80
|
+
example.metadata[:stdout]
|
81
|
+
end
|
82
|
+
|
83
|
+
def stderr_for(example)
|
84
|
+
example.metadata[:stderr]
|
85
|
+
end
|
71
86
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class RSpecJUnitFormatter < RSpec::Core::Formatters::BaseFormatter
|
2
4
|
RSpec::Core::Formatters.register self,
|
3
5
|
:start,
|
@@ -43,6 +45,15 @@ private
|
|
43
45
|
@examples_notification.notifications
|
44
46
|
end
|
45
47
|
|
48
|
+
def error_count
|
49
|
+
# Introduced in rspec 3.6
|
50
|
+
if @summary_notification.respond_to?(:errors_outside_of_examples_count)
|
51
|
+
@summary_notification.errors_outside_of_examples_count
|
52
|
+
else
|
53
|
+
0
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
46
57
|
def result_of(notification)
|
47
58
|
notification.example.execution_result.status
|
48
59
|
end
|
@@ -84,47 +95,52 @@ private
|
|
84
95
|
notification.example.execution_result.exception
|
85
96
|
end
|
86
97
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
# contain ANSI escape codes for colorizing terminal output if the global
|
93
|
-
# rspec configuration is turned on, regardless of which notification lines
|
94
|
-
# we ask for. We need to strip the codes from the diff part of the message
|
95
|
-
# for XML output here.
|
96
|
-
#
|
97
|
-
# We also only want to target the diff hunks because the failure message
|
98
|
-
# itself might legitimately contain ansi escape codes.
|
99
|
-
#
|
100
|
-
string.sub(STRIP_DIFF_COLORS_BLOCK_REGEXP) { |match| match.gsub(STRIP_DIFF_COLORS_CODES_REGEXP, "".freeze) }
|
101
|
-
end
|
102
|
-
|
103
|
-
# Completely gross hack for forcing off colorising
|
104
|
-
if Gem::Version.new(RSpec::Core::Version::STRING) >= Gem::Version.new("3.6")
|
105
|
-
WITHOUT_COLOR_KEY = :color_mode
|
106
|
-
WITHOUT_COLOR_VALUE = :off
|
107
|
-
else
|
108
|
-
WITHOUT_COLOR_KEY = :color
|
109
|
-
WITHOUT_COLOR_VALUE = false
|
110
|
-
end
|
111
|
-
def without_color
|
98
|
+
# rspec makes it really difficult to swap in configuration temporarily due to
|
99
|
+
# the way it cascades defaults, command line arguments, and user
|
100
|
+
# configuration. This method makes sure configuration gets swapped in
|
101
|
+
# correctly, but also that the original state is definitely restored.
|
102
|
+
def swap_rspec_configuration(key, value)
|
112
103
|
unset = Object.new
|
113
|
-
force = RSpec.configuration.send(:value_for,
|
104
|
+
force = RSpec.configuration.send(:value_for, key) { unset }
|
114
105
|
if unset.equal?(force)
|
115
|
-
previous = RSpec.configuration.send(
|
116
|
-
RSpec.configuration.send(:"#{
|
106
|
+
previous = RSpec.configuration.send(key)
|
107
|
+
RSpec.configuration.send(:"#{key}=", value)
|
117
108
|
else
|
118
|
-
RSpec.configuration.force({
|
109
|
+
RSpec.configuration.force({key => value})
|
119
110
|
end
|
120
111
|
yield
|
121
112
|
ensure
|
122
113
|
if unset.equal?(force)
|
123
|
-
RSpec.configuration.send(:"#{
|
114
|
+
RSpec.configuration.send(:"#{key}=", previous)
|
124
115
|
else
|
125
|
-
RSpec.configuration.force({
|
116
|
+
RSpec.configuration.force({key => force})
|
126
117
|
end
|
127
118
|
end
|
119
|
+
|
120
|
+
# Completely gross hack for absolutely forcing off colorising for the
|
121
|
+
# duration of a block.
|
122
|
+
if RSpec.configuration.respond_to?(:color_mode=)
|
123
|
+
def without_color(&block)
|
124
|
+
swap_rspec_configuration(:color_mode, :off, &block)
|
125
|
+
end
|
126
|
+
elsif RSpec.configuration.respond_to?(:color=)
|
127
|
+
def without_color(&block)
|
128
|
+
swap_rspec_configuration(:color, false, &block)
|
129
|
+
end
|
130
|
+
else
|
131
|
+
warn 'rspec_junit_formatter cannot prevent colorising due to an unexpected RSpec.configuration format'
|
132
|
+
def without_color
|
133
|
+
yield
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
def stdout_for(example_notification)
|
138
|
+
example_notification.example.metadata[:stdout]
|
139
|
+
end
|
140
|
+
|
141
|
+
def stderr_for(example_notification)
|
142
|
+
example_notification.example.metadata[:stderr]
|
143
|
+
end
|
128
144
|
end
|
129
145
|
|
130
146
|
# rspec-core 3.0.x forgot to mark this as a module function which causes:
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "socket"
|
2
4
|
require "time"
|
3
5
|
|
@@ -18,7 +20,7 @@ private
|
|
18
20
|
output << %{ tests="#{example_count}"}
|
19
21
|
output << %{ skipped="#{pending_count}"}
|
20
22
|
output << %{ failures="#{failure_count}"}
|
21
|
-
output << %{ errors="
|
23
|
+
output << %{ errors="#{error_count}"}
|
22
24
|
output << %{ time="#{escape("%.6f" % duration)}"}
|
23
25
|
output << %{ timestamp="#{escape(started.iso8601)}"}
|
24
26
|
output << %{ hostname="#{escape(Socket.gethostname)}"}
|
@@ -71,12 +73,27 @@ private
|
|
71
73
|
output << %{ time="#{escape("%.6f" % duration_for(example))}"}
|
72
74
|
output << %{>}
|
73
75
|
yield if block_given?
|
76
|
+
xml_dump_output(example)
|
74
77
|
output << %{</testcase>\n}
|
75
78
|
end
|
76
79
|
|
80
|
+
def xml_dump_output(example)
|
81
|
+
if (stdout = stdout_for(example)) && !stdout.empty?
|
82
|
+
output << %{<system-out>}
|
83
|
+
output << escape(stdout)
|
84
|
+
output << %{</system-out>}
|
85
|
+
end
|
86
|
+
|
87
|
+
if (stderr = stderr_for(example)) && !stderr.empty?
|
88
|
+
output << %{<system-err>}
|
89
|
+
output << escape(stderr)
|
90
|
+
output << %{</system-err>}
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
77
94
|
# Inversion of character range from https://www.w3.org/TR/xml/#charsets
|
78
95
|
ILLEGAL_REGEXP = Regexp.new(
|
79
|
-
"[^" <<
|
96
|
+
+"[^" <<
|
80
97
|
"\u{9}" << # => \t
|
81
98
|
"\u{a}" << # => \n
|
82
99
|
"\u{d}" << # => \r
|
@@ -108,7 +125,7 @@ private
|
|
108
125
|
# Discouraged characters from https://www.w3.org/TR/xml/#charsets
|
109
126
|
# Plus special characters with well-known entity replacements
|
110
127
|
DISCOURAGED_REGEXP = Regexp.new(
|
111
|
-
"[" <<
|
128
|
+
+"[" <<
|
112
129
|
"\u{22}" << # => "
|
113
130
|
"\u{26}" << # => &
|
114
131
|
"\u{27}" << # => '
|
@@ -149,6 +166,22 @@ private
|
|
149
166
|
# Make sure it's utf-8, replace illegal characters with ruby-like escapes, and replace special and discouraged characters with entities
|
150
167
|
text.to_s.encode(Encoding::UTF_8).gsub(ILLEGAL_REGEXP, ILLEGAL_REPLACEMENT).gsub(DISCOURAGED_REGEXP, DISCOURAGED_REPLACEMENTS)
|
151
168
|
end
|
169
|
+
|
170
|
+
STRIP_DIFF_COLORS_BLOCK_REGEXP = /^ ( [ ]* ) Diff: (?: \e\[ 0 m )? (?: \n \1 \e\[ \d+ (?: ; \d+ )* m .* )* /x
|
171
|
+
STRIP_DIFF_COLORS_CODES_REGEXP = /\e\[ \d+ (?: ; \d+ )* m/x
|
172
|
+
|
173
|
+
def strip_diff_colors(string)
|
174
|
+
# XXX: RSpec diffs are appended to the message lines fairly early and will
|
175
|
+
# contain ANSI escape codes for colorizing terminal output if the global
|
176
|
+
# rspec configuration is turned on, regardless of which notification lines
|
177
|
+
# we ask for. We need to strip the codes from the diff part of the message
|
178
|
+
# for XML output here.
|
179
|
+
#
|
180
|
+
# We also only want to target the diff hunks because the failure message
|
181
|
+
# itself might legitimately contain ansi escape codes.
|
182
|
+
#
|
183
|
+
string.sub(STRIP_DIFF_COLORS_BLOCK_REGEXP) { |match| match.gsub(STRIP_DIFF_COLORS_CODES_REGEXP, "".freeze) }
|
184
|
+
end
|
152
185
|
end
|
153
186
|
|
154
187
|
RspecJunitFormatter = RSpecJUnitFormatter
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec_junit_formatter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Cochran
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain:
|
11
11
|
- |
|
12
12
|
-----BEGIN CERTIFICATE-----
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MIIDKDCCAhCgAwIBAgIBCDANBgkqhkiG9w0BAQsFADA6MQ0wCwYDVQQDDARzajI2
|
14
|
+
MRQwEgYKCZImiZPyLGQBGRYEc2oyNjETMBEGCgmSJomT8ixkARkWA2NvbTAeFw0y
|
15
|
+
MTA0MjcwMzIxMjZaFw0yMjA0MjcwMzIxMjZaMDoxDTALBgNVBAMMBHNqMjYxFDAS
|
16
16
|
BgoJkiaJk/IsZAEZFgRzajI2MRMwEQYKCZImiZPyLGQBGRYDY29tMIIBIjANBgkq
|
17
17
|
hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr60Eo/ttCk8GMTMFiPr3GoYMIMFvLak
|
18
18
|
xSmTk9YGCB6UiEePB4THSSA5w6IPyeaCF/nWkDp3/BAam0eZMWG1IzYQB23TqIM0
|
@@ -21,14 +21,14 @@ cert_chain:
|
|
21
21
|
4O/FL2ChjL2CPCpLZW55ShYyrzphWJwLOJe+FJ/ZBl6YXwrzQM9HKnt4titSNvyU
|
22
22
|
KzE3L63A3PZvExzLrN9u09kuWLLJfXB2sGOlw3n9t72rJiuBr3/OQQIDAQABozkw
|
23
23
|
NzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU99dfRjEKFyczTeIz
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
24
|
+
m3ZsDWrNC80wDQYJKoZIhvcNAQELBQADggEBAInkmTwBeGEJ7Xu9jjZIuFaE197m
|
25
|
+
YfvrzVoE6Q1DlWXpgyhhxbPIKg2acvM/Z18A7kQrF7paYl64Ti84dC64seOFIBNx
|
26
|
+
Qj/lxzPHMBoAYqeXYJhnYIXnvGCZ4Fkic5Bhs+VdcDP/uwYp3adqy+4bT/XDFZQg
|
27
|
+
tSjrAOTg3wck5aI+Tz90ONQJ83bnCRr1UPQ0T3PbWMjnNsEa9CAxUB845Sg+9yUz
|
28
|
+
Tvf+pbX8JT9rawFDogxPhL7eRAbjg4MH9amp5l8HTVCAsW8vqv7wM4rtMNAaXmik
|
29
|
+
LJghfDEf70fTtbs4Zv57pPhn1b7wBNf8fh+TZOlYAA6dFtQXoCwfE6bWgQU=
|
30
30
|
-----END CERTIFICATE-----
|
31
|
-
date:
|
31
|
+
date: 2022-01-04 00:00:00.000000000 Z
|
32
32
|
dependencies:
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: rspec-core
|
@@ -56,20 +56,82 @@ dependencies:
|
|
56
56
|
- - "!="
|
57
57
|
- !ruby/object:Gem::Version
|
58
58
|
version: 2.12.0
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: bundler
|
61
|
+
requirement: !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '0'
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
name: appraisal
|
75
|
+
requirement: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '0'
|
80
|
+
type: :development
|
81
|
+
prerelease: false
|
82
|
+
version_requirements: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
59
87
|
- !ruby/object:Gem::Dependency
|
60
88
|
name: nokogiri
|
61
89
|
requirement: !ruby/object:Gem::Requirement
|
62
90
|
requirements:
|
63
91
|
- - "~>"
|
64
92
|
- !ruby/object:Gem::Version
|
65
|
-
version: '1.
|
93
|
+
version: '1.8'
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 1.8.2
|
66
97
|
type: :development
|
67
98
|
prerelease: false
|
68
99
|
version_requirements: !ruby/object:Gem::Requirement
|
69
100
|
requirements:
|
70
101
|
- - "~>"
|
71
102
|
- !ruby/object:Gem::Version
|
72
|
-
version: '1.
|
103
|
+
version: '1.8'
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: 1.8.2
|
107
|
+
- !ruby/object:Gem::Dependency
|
108
|
+
name: rake
|
109
|
+
requirement: !ruby/object:Gem::Requirement
|
110
|
+
requirements:
|
111
|
+
- - ">="
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: '0'
|
114
|
+
type: :development
|
115
|
+
prerelease: false
|
116
|
+
version_requirements: !ruby/object:Gem::Requirement
|
117
|
+
requirements:
|
118
|
+
- - ">="
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '0'
|
121
|
+
- !ruby/object:Gem::Dependency
|
122
|
+
name: coderay
|
123
|
+
requirement: !ruby/object:Gem::Requirement
|
124
|
+
requirements:
|
125
|
+
- - ">="
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: '0'
|
128
|
+
type: :development
|
129
|
+
prerelease: false
|
130
|
+
version_requirements: !ruby/object:Gem::Requirement
|
131
|
+
requirements:
|
132
|
+
- - ">="
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '0'
|
73
135
|
description: RSpec results that your continuous integration service can read.
|
74
136
|
email: sj26@sj26.com
|
75
137
|
executables: []
|
@@ -81,11 +143,12 @@ files:
|
|
81
143
|
- lib/rspec_junit_formatter.rb
|
82
144
|
- lib/rspec_junit_formatter/rspec2.rb
|
83
145
|
- lib/rspec_junit_formatter/rspec3.rb
|
84
|
-
homepage:
|
146
|
+
homepage: https://github.com/sj26/rspec_junit_formatter
|
85
147
|
licenses:
|
86
148
|
- MIT
|
87
|
-
metadata:
|
88
|
-
|
149
|
+
metadata:
|
150
|
+
changelog_uri: https://github.com/sj26/rspec_junit_formatter/blob/HEAD/CHANGELOG.md
|
151
|
+
post_install_message:
|
89
152
|
rdoc_options: []
|
90
153
|
require_paths:
|
91
154
|
- lib
|
@@ -100,9 +163,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
100
163
|
- !ruby/object:Gem::Version
|
101
164
|
version: 2.0.0
|
102
165
|
requirements: []
|
103
|
-
|
104
|
-
|
105
|
-
signing_key:
|
166
|
+
rubygems_version: 3.2.26
|
167
|
+
signing_key:
|
106
168
|
specification_version: 4
|
107
169
|
summary: RSpec JUnit XML formatter
|
108
170
|
test_files: []
|
metadata.gz.sig
CHANGED
Binary file
|