test-output-parser 0.3.0 → 0.4.1
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/.gitignore +0 -1
- data/.ruby-gemset +1 -1
- data/Gemfile.lock +34 -0
- data/README.md +7 -5
- data/lib/test_output_parser.rb +58 -2
- data/lib/test_output_parser/framework/junit.rb +19 -16
- data/lib/test_output_parser/framework/rspec.rb +7 -7
- data/lib/test_output_parser/framework/test_unit.rb +10 -9
- data/lib/test_output_parser/version.rb +2 -2
- data/spec/fixtures/sample-failed-test-unit-output.txt +34 -12
- data/spec/framework/junit_spec.rb +39 -29
- data/spec/framework/rspec_spec.rb +33 -17
- data/spec/framework/test_unit_spec.rb +56 -24
- data/spec/spec_helper.rb +7 -0
- data/spec/test_output_parser_spec.rb +105 -42
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 57d6d46a7aec97fc80f06fa6e75cf2f60cb4a5e2
|
4
|
+
data.tar.gz: b03073bd93e4f42b9771e97e5e1d5ae4cc4ef2d9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df7e25944c3b9a21dfd0b06bc98921e2d2343df86a93d3e541b1bb9be2da4bddf679ef81ca63f89ebcbe4e87c2dcbb0593f3457be8cce0984d418982edb5b904
|
7
|
+
data.tar.gz: b7ec27e97035a563a4eb1a902ba53431156fcd189920943a8b05b2609bcb5675871c07a58a7a4eeeb68dc3b4ddf2eef830f7236b66cf9144c684a83be1ef4f6d
|
data/.gitignore
CHANGED
data/.ruby-gemset
CHANGED
@@ -1 +1 @@
|
|
1
|
-
test-
|
1
|
+
test-output-parser
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
test-output-parser (0.4.1)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: https://rubygems.org/
|
8
|
+
specs:
|
9
|
+
diff-lcs (1.2.5)
|
10
|
+
rake (10.3.2)
|
11
|
+
rspec (3.1.0)
|
12
|
+
rspec-core (~> 3.1.0)
|
13
|
+
rspec-expectations (~> 3.1.0)
|
14
|
+
rspec-mocks (~> 3.1.0)
|
15
|
+
rspec-core (3.1.7)
|
16
|
+
rspec-support (~> 3.1.0)
|
17
|
+
rspec-expectations (3.1.2)
|
18
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
19
|
+
rspec-support (~> 3.1.0)
|
20
|
+
rspec-mocks (3.1.3)
|
21
|
+
rspec-support (~> 3.1.0)
|
22
|
+
rspec-support (3.1.2)
|
23
|
+
|
24
|
+
PLATFORMS
|
25
|
+
ruby
|
26
|
+
|
27
|
+
DEPENDENCIES
|
28
|
+
bundler (~> 1.3)
|
29
|
+
rake
|
30
|
+
rspec
|
31
|
+
test-output-parser!
|
32
|
+
|
33
|
+
BUNDLED WITH
|
34
|
+
1.11.1
|
data/README.md
CHANGED
@@ -1,12 +1,14 @@
|
|
1
|
-
|
1
|
+
[](https://snap-ci.com/snap-ci/test-output-parser/branch/master)
|
2
2
|
|
3
|
-
|
3
|
+
# TestOutputParser
|
4
|
+
|
5
|
+
Parses common test output formats (RSpec, Test::Unit, JUnit) and provides a way to extract information out of it.
|
4
6
|
|
5
7
|
## Installation
|
6
8
|
|
7
9
|
Add this line to your application's Gemfile:
|
8
10
|
|
9
|
-
gem 'test-
|
11
|
+
gem 'test-output-parser'
|
10
12
|
|
11
13
|
And then execute:
|
12
14
|
|
@@ -14,7 +16,7 @@ And then execute:
|
|
14
16
|
|
15
17
|
Or install it yourself as:
|
16
18
|
|
17
|
-
$ gem install test-
|
19
|
+
$ gem install test-output-parser
|
18
20
|
|
19
21
|
## Usage
|
20
22
|
|
@@ -22,7 +24,7 @@ TODO: Write usage instructions here
|
|
22
24
|
|
23
25
|
## Contributing
|
24
26
|
|
25
|
-
1. Fork it ( http://github.com
|
27
|
+
1. Fork it ( http://github.com/snap-ci/test-output-parser/fork )
|
26
28
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
29
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
30
|
4. Push to the branch (`git push origin my-new-feature`)
|
data/lib/test_output_parser.rb
CHANGED
@@ -1,10 +1,66 @@
|
|
1
1
|
require 'test_output_parser/version'
|
2
2
|
require 'test_output_parser/framework'
|
3
|
+
require 'stringio'
|
3
4
|
|
4
5
|
module TestOutputParser
|
6
|
+
|
7
|
+
class Summary
|
8
|
+
|
9
|
+
ATTRIBUTES = %w(total failed errors pending)
|
10
|
+
|
11
|
+
ATTRIBUTES.each do |suffix|
|
12
|
+
class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
|
13
|
+
attr_accessor :#{suffix}
|
14
|
+
|
15
|
+
def add_#{suffix}(to_add)
|
16
|
+
self.#{suffix} += to_add
|
17
|
+
end
|
18
|
+
|
19
|
+
def #{suffix}
|
20
|
+
@#{suffix} ||= 0
|
21
|
+
end
|
22
|
+
|
23
|
+
RUBY_EVAL
|
24
|
+
end
|
25
|
+
|
26
|
+
def add_failure_lines(lines)
|
27
|
+
return unless lines
|
28
|
+
return if lines.respond_to?(:empty?) && lines.empty?
|
29
|
+
if lines.respond_to?(:to_str)
|
30
|
+
self.failures << lines
|
31
|
+
else
|
32
|
+
self.failures << lines.join
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def failures
|
37
|
+
@failures ||= StringIO.new
|
38
|
+
end
|
39
|
+
|
40
|
+
def to_hash
|
41
|
+
result = {}
|
42
|
+
ATTRIBUTES.each do |attr|
|
43
|
+
next if self.send(attr) == 0
|
44
|
+
result[attr.to_sym] = self.send(attr)
|
45
|
+
end
|
46
|
+
|
47
|
+
if failures.size != 0
|
48
|
+
result[:failures] = failures.string
|
49
|
+
end
|
50
|
+
|
51
|
+
result
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
5
56
|
def self.count(test_output)
|
6
|
-
summary =
|
57
|
+
summary = Summary.new
|
58
|
+
test_output = test_output.encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '')
|
59
|
+
|
60
|
+
TestOutputParser::Framework::RSpec.count(test_output, summary)
|
7
61
|
TestOutputParser::Framework::TestUnit.count(test_output, summary)
|
8
62
|
TestOutputParser::Framework::JUnit.count(test_output, summary)
|
63
|
+
|
64
|
+
summary.to_hash
|
9
65
|
end
|
10
|
-
end
|
66
|
+
end
|
@@ -1,30 +1,33 @@
|
|
1
1
|
module TestOutputParser
|
2
2
|
module Framework
|
3
3
|
class JUnit
|
4
|
-
def self.count(test_output, summary=
|
4
|
+
def self.count(test_output, summary=Summary.new)
|
5
|
+
# normal junit
|
5
6
|
test_output.scan(/Running\s+.*$\nTest[s]?\s+run:\s+(\d+),\s+Failure[s]?:\s+(\d+),\s+Error[s]?:\s+(\d+),\s+Skipped:\s+(\d+)/).each do |arr|
|
6
|
-
summary
|
7
|
-
summary
|
8
|
-
summary
|
9
|
-
summary
|
7
|
+
summary.add_total arr[0].to_i
|
8
|
+
summary.add_failed arr[1].to_i
|
9
|
+
summary.add_errors arr[2].to_i
|
10
|
+
summary.add_pending arr[3].to_i
|
10
11
|
end
|
11
12
|
|
12
|
-
|
13
|
-
summary[:failures] = failures.to_s.strip if failures
|
14
|
-
|
13
|
+
# junit on gradle
|
15
14
|
test_output.scan(/(\d+)\s+test[s]?\s+completed,\s+(\d+)\s+failed/).each do |arr|
|
16
|
-
summary
|
17
|
-
summary
|
15
|
+
summary.add_total arr[0].to_i
|
16
|
+
summary.add_failed arr[1].to_i
|
18
17
|
end
|
19
18
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
19
|
+
# normal junit
|
20
|
+
failures = test_output.scan(/^(Failed\stests:\s+.*)^Tests run/m)
|
21
|
+
summary.add_failure_lines(failures)
|
22
|
+
|
23
|
+
# gradle junit errors
|
24
|
+
if failures.empty?
|
25
|
+
failures = test_output.scan(/^Running\stest:\s.*\n\n.*\s+FAILED\n.*/)
|
26
|
+
summary.add_failure_lines(failures)
|
25
27
|
end
|
28
|
+
|
26
29
|
summary
|
27
30
|
end
|
28
31
|
end
|
29
32
|
end
|
30
|
-
end
|
33
|
+
end
|
@@ -1,17 +1,17 @@
|
|
1
1
|
module TestOutputParser
|
2
2
|
module Framework
|
3
3
|
class RSpec
|
4
|
-
def self.count(test_output, summary=
|
4
|
+
def self.count(test_output, summary=Summary.new)
|
5
5
|
test_output.scan(/(\d+)\s+example[s]?,\s+(\d+)\s+failure[s]?(,\s*(\d+)\s+pending)?/).each do |arr|
|
6
|
-
summary
|
7
|
-
summary
|
8
|
-
summary
|
6
|
+
summary.add_total arr[0].to_i
|
7
|
+
summary.add_failed arr[1].to_i
|
8
|
+
summary.add_pending arr[3].to_i
|
9
9
|
end
|
10
|
-
failures = test_output.scan(/Failures:\n+(.*)Finished in/m)
|
11
|
-
summary[:failures] = failures.flatten.first.strip unless failures.empty?
|
12
10
|
|
11
|
+
failures = test_output.scan(/Failures:\n+(.*)^Finished in/m)
|
12
|
+
summary.add_failure_lines(failures)
|
13
13
|
summary
|
14
14
|
end
|
15
15
|
end
|
16
16
|
end
|
17
|
-
end
|
17
|
+
end
|
@@ -1,19 +1,20 @@
|
|
1
1
|
module TestOutputParser
|
2
2
|
module Framework
|
3
3
|
class TestUnit
|
4
|
-
def self.count(test_output, summary=
|
4
|
+
def self.count(test_output, summary=Summary.new)
|
5
5
|
test_output.scan(/(\d+)\s+test[s]?,\s+(\d+)\s+assertion[s]?(,\s*(\d+)\s+failures)?(,\s*(\d+)\s+error[s]?)?(,\s*(\d+)\s+skip[s]?)?/).each do |arr|
|
6
|
-
summary
|
7
|
-
|
8
|
-
summary
|
9
|
-
summary
|
10
|
-
summary[:pending] += arr[7].to_i
|
6
|
+
summary.add_total arr[0].to_i
|
7
|
+
summary.add_failed arr[3].to_i
|
8
|
+
summary.add_errors arr[5].to_i
|
9
|
+
summary.add_pending arr[7].to_i
|
11
10
|
end
|
12
11
|
|
13
|
-
|
14
|
-
|
12
|
+
|
13
|
+
failures = test_output.scan(/(^\s+\d+\)\sFailure:\n+.*)+\n\n^\d+\stests/m)
|
14
|
+
summary.add_failure_lines(failures)
|
15
|
+
|
15
16
|
summary
|
16
17
|
end
|
17
18
|
end
|
18
19
|
end
|
19
|
-
end
|
20
|
+
end
|
@@ -1,3 +1,3 @@
|
|
1
1
|
module TestOutputParser
|
2
|
-
VERSION =
|
3
|
-
end
|
2
|
+
VERSION = '0.4.1'
|
3
|
+
end
|
@@ -1,20 +1,42 @@
|
|
1
|
-
$
|
2
|
-
/opt/local/ruby/1.9.3-p484/bin/ruby -I"lib:test" -I"/opt/local/ruby/1.9.3-p484/lib/ruby/1.9.1" "/opt/local/ruby/1.9.3-p484/lib/ruby/1.9.1/rake/rake_test_loader.rb" "test/
|
3
|
-
Run options:
|
1
|
+
$ rake test
|
2
|
+
/opt/local/ruby/1.9.3-p484/bin/ruby -I"lib:test" -I"/opt/local/ruby/1.9.3-p484/lib/ruby/1.9.1" "/opt/local/ruby/1.9.3-p484/lib/ruby/1.9.1/rake/rake_test_loader.rb" "test/packages/python_test.rb" "test/packages/nodejs_test.rb" "test/packages/heroku_toolbelt_test.rb" "test/packages/java_test.rb" "test/packages/npm_test.rb" "test/packages/aws_elastic_beanstalk_test.rb" "test/packages/xvfb_test.rb" "test/packages/sbt_test.rb" "test/packages/ruby_test.rb" "test/packages/ant_test.rb" "test/packages/terraform_test.rb" "test/packages/s3cmd_test.rb" "test/packages/maven_test.rb" "test/packages/php_test.rb" "test/packages/snap_deploy_test.rb" "test/packages/foreman_test.rb" "test/packages/lein_test.rb" "test/packages/android_test.rb" "test/packages/gradle_test.rb" "test/packages/awscli_test.rb" "test/user_environment_test.rb" "test/sudo_access_test.rb" "test/nosql/redis_test.rb" "test/nosql/couchdb_test.rb" "test/nosql/mongodb_test.rb" "test/relational_db/postgres_test.rb" "test/relational_db/sqlite_test.rb" "test/relational_db/mysql_test.rb" "test/environment_variables_test.rb"
|
3
|
+
Run options: --seed 13016
|
4
4
|
|
5
5
|
# Running tests:
|
6
6
|
|
7
|
-
|
7
|
+
.........................................................................FE....................
|
8
8
|
|
9
|
-
Finished tests in
|
9
|
+
Finished tests in 48.599332s, 1.9548 tests/s, 5.2676 assertions/s.
|
10
10
|
|
11
11
|
1) Failure:
|
12
|
-
|
13
|
-
|
12
|
+
test_no_additional_rubies(RubyTest) [/var/snap-ci/repo/test/packages/ruby_test.rb:23]:
|
13
|
+
--- expected
|
14
|
+
+++ actual
|
15
|
+
@@ -1 +1 @@
|
16
|
+
-["foo", "bar"]
|
17
|
+
+["baz", "boo"]
|
14
18
|
|
15
|
-
2) Failure:
|
16
|
-
test_passes(FooTest) [/var/go/repo/test/foo_test.rb:10]:
|
17
|
-
Failed assertion, no message given.
|
18
19
|
|
19
|
-
|
20
|
-
|
20
|
+
2) Error:
|
21
|
+
test_rubies_are_installed(RubyTest):
|
22
|
+
Errno::ENOENT: No such file or directory - /opt/local/ruby/2.1.4/bin/ruby --version
|
23
|
+
/tmp/.bundle-repo/ruby/1.9.1/gems/mixlib-shellout-1.2.0/lib/mixlib/shellout/unix.rb:268:in `exec'
|
24
|
+
/tmp/.bundle-repo/ruby/1.9.1/gems/mixlib-shellout-1.2.0/lib/mixlib/shellout/unix.rb:268:in `block in fork_subprocess'
|
25
|
+
/tmp/.bundle-repo/ruby/1.9.1/gems/mixlib-shellout-1.2.0/lib/mixlib/shellout/unix.rb:256:in `fork'
|
26
|
+
/tmp/.bundle-repo/ruby/1.9.1/gems/mixlib-shellout-1.2.0/lib/mixlib/shellout/unix.rb:256:in `fork_subprocess'
|
27
|
+
/tmp/.bundle-repo/ruby/1.9.1/gems/mixlib-shellout-1.2.0/lib/mixlib/shellout/unix.rb:40:in `run_command'
|
28
|
+
/tmp/.bundle-repo/ruby/1.9.1/gems/mixlib-shellout-1.2.0/lib/mixlib/shellout.rb:225:in `run_command'
|
29
|
+
/var/snap-ci/repo/test/mini_test_helper.rb:28:in `block in run_command'
|
30
|
+
/opt/local/ruby/1.9.3-p484/lib/ruby/gems/1.9.1/gems/bundler-1.6.3/lib/bundler.rb:235:in `block in with_clean_env'
|
31
|
+
/opt/local/ruby/1.9.3-p484/lib/ruby/gems/1.9.1/gems/bundler-1.6.3/lib/bundler.rb:222:in `with_original_env'
|
32
|
+
/opt/local/ruby/1.9.3-p484/lib/ruby/gems/1.9.1/gems/bundler-1.6.3/lib/bundler.rb:228:in `with_clean_env'
|
33
|
+
/var/snap-ci/repo/test/mini_test_helper.rb:23:in `run_command'
|
34
|
+
/var/snap-ci/repo/test/packages/ruby_test.rb:11:in `block in test_rubies_are_installed'
|
35
|
+
/var/snap-ci/repo/test/packages/ruby_test.rb:7:in `each'
|
36
|
+
/var/snap-ci/repo/test/packages/ruby_test.rb:7:in `test_rubies_are_installed'
|
37
|
+
|
38
|
+
|
39
|
+
95 tests, 256 assertions, 1 failures, 1 errors, 0 skips
|
40
|
+
rake aborted!
|
41
|
+
Command failed with status (1): [/opt/local/ruby/1.9.3-p484/bin/ruby -I"lib...]
|
42
|
+
|
@@ -2,53 +2,63 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe TestOutputParser::Framework::JUnit do
|
4
4
|
it 'should do nothing when there is no spec summary in the output' do
|
5
|
-
TestOutputParser::Framework::JUnit.count("Tests not run").
|
5
|
+
expect(TestOutputParser::Framework::JUnit.count("Tests not run").to_hash).to eq({})
|
6
6
|
end
|
7
7
|
|
8
8
|
it 'should count the number of specs ran for one example' do
|
9
|
-
TestOutputParser::Framework::JUnit.count("Running com.foo.microblog.core.ErrorResponseTest\nTests run: 1, Failures: 0, Errors: 0, Skipped: 0").
|
10
|
-
|
9
|
+
actual = TestOutputParser::Framework::JUnit.count("Running com.foo.microblog.core.ErrorResponseTest\nTests run: 1, Failures: 0, Errors: 0, Skipped: 0").to_hash
|
10
|
+
expected = { :total => 1 }
|
11
|
+
expect(actual).to eq(expected)
|
11
12
|
end
|
12
13
|
|
13
14
|
it 'should count the number of specs ran for one JUnit run' do
|
14
|
-
TestOutputParser::Framework::JUnit.count("Running com.foo.microblog.core.ErrorResponseTest\nTests run: 10, Failures: 1, Errors: 5, Skipped: 3").
|
15
|
-
|
15
|
+
actual = TestOutputParser::Framework::JUnit.count("Running com.foo.microblog.core.ErrorResponseTest\nTests run: 10, Failures: 1, Errors: 5, Skipped: 3").to_hash
|
16
|
+
expected = { :total => 10, :failed => 1, :errors => 5, :pending => 3 }
|
17
|
+
expect(actual).to eq(expected)
|
16
18
|
end
|
17
19
|
|
18
20
|
it 'should count the number of specs ran for multiple JUnit runs' do
|
19
|
-
TestOutputParser::Framework::JUnit.count("Running com.foo.microblog.core.ErrorResponseTest\nTests run: 10, Failures: 1, Errors: 5, Skipped: 3\n\n\n"
|
20
|
-
|
21
|
-
|
21
|
+
actual = TestOutputParser::Framework::JUnit.count("Running com.foo.microblog.core.ErrorResponseTest\nTests run: 10, Failures: 1, Errors: 5, Skipped: 3\n\n\n" +
|
22
|
+
"Running com.foo.microblog.core.UserResourceTest\nTests run: 1, Failures: 0, Errors: 0, Skipped: 0").to_hash
|
23
|
+
|
24
|
+
expected = { :total => 11, :failed => 1, :errors => 5, :pending => 3 }
|
25
|
+
expect(actual).to eq(expected)
|
22
26
|
end
|
23
27
|
|
24
28
|
it 'should handle gradle output' do
|
25
|
-
TestOutputParser::Framework::JUnit.count("47 tests completed, 1 failed").
|
29
|
+
actual = TestOutputParser::Framework::JUnit.count("47 tests completed, 1 failed").to_hash
|
30
|
+
expected = { :total => 47, :failed => 1 }
|
31
|
+
expect(actual).to eq(expected)
|
26
32
|
end
|
27
33
|
|
28
34
|
it 'should ignore lines not related to JUnit test summary' do
|
29
|
-
TestOutputParser::Framework::JUnit.count(File.read("spec/fixtures/sample-junit-output.txt")).
|
35
|
+
actual = TestOutputParser::Framework::JUnit.count(File.read("spec/fixtures/sample-junit-output.txt")).to_hash
|
36
|
+
expected = { :total => 13 }
|
37
|
+
expect(actual).to eq(expected)
|
30
38
|
end
|
31
39
|
|
32
40
|
it 'should include the failures in the test summary for JUnit output' do
|
33
|
-
TestOutputParser::Framework::JUnit.count(File.read("spec/fixtures/sample-failed-junit-output.txt")).
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
:
|
39
|
-
|
40
|
-
|
41
|
-
|
41
|
+
actual = TestOutputParser::Framework::JUnit.count(File.read("spec/fixtures/sample-failed-junit-output.txt")).to_hash
|
42
|
+
expected = {
|
43
|
+
:total => 13,
|
44
|
+
:failed => 2,
|
45
|
+
:failures => '' +
|
46
|
+
"Failed tests: testFromExceptionWithUniqueConstraintViolation(com.snapci.microblog.core.ErrorResponseTest)\n" +
|
47
|
+
" testFromException(com.snapci.microblog.core.ErrorResponseTest)\n\n"
|
48
|
+
}
|
49
|
+
expect(actual).to eq(expected)
|
42
50
|
end
|
43
51
|
|
44
52
|
it 'should include the failures in the test summary for gradle output' do
|
45
|
-
TestOutputParser::Framework::JUnit.count(File.read("spec/fixtures/sample-gradle-output.txt")).
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
53
|
+
actual = TestOutputParser::Framework::JUnit.count(File.read("spec/fixtures/sample-gradle-output.txt")).to_hash
|
54
|
+
expected = {
|
55
|
+
:total => 47,
|
56
|
+
:failed => 1,
|
57
|
+
:failures => ''+
|
58
|
+
"Running test: test shouldAddBookToDBIfNotInSystem(com.thoughtworks.twu.controller.AddBookControllerTest)\n\n" +
|
59
|
+
"com.thoughtworks.twu.controller.AddBookControllerTest > shouldAddBookToDBIfNotInSystem FAILED\n" +
|
60
|
+
" java.lang.AssertionError at AddBookControllerTest.java:28"
|
61
|
+
}
|
62
|
+
expect(actual).to eq(expected)
|
63
|
+
end
|
64
|
+
end
|
@@ -2,39 +2,55 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe TestOutputParser::Framework::RSpec do
|
4
4
|
it 'should do nothing when there is no spec summary in the output' do
|
5
|
-
TestOutputParser::Framework::RSpec.count("123 foo bar examples").
|
5
|
+
actual = TestOutputParser::Framework::RSpec.count("123 foo bar examples").to_hash
|
6
|
+
expect(actual).to eq({})
|
6
7
|
end
|
7
8
|
|
8
9
|
it 'should count the number of specs ran for one example' do
|
9
|
-
TestOutputParser::Framework::RSpec.count("1 example, 0 failures").
|
10
|
+
actual = TestOutputParser::Framework::RSpec.count("1 example, 0 failures").to_hash
|
11
|
+
expected = { :total => 1 }
|
12
|
+
expect(actual).to eq(expected)
|
10
13
|
end
|
11
14
|
|
12
15
|
it 'should count the number of specs ran for one rspec run' do
|
13
|
-
TestOutputParser::Framework::RSpec.count("25 examples, 0 failures").
|
16
|
+
actual = TestOutputParser::Framework::RSpec.count("25 examples, 0 failures").to_hash
|
17
|
+
expected = { :total => 25 }
|
18
|
+
expect(actual).to eq(expected)
|
14
19
|
end
|
15
20
|
|
16
21
|
it 'should count the number of specs ran for multiple rspec runs' do
|
17
|
-
TestOutputParser::Framework::RSpec.count("25 examples, 1 failure\n\n\n5 examples, 3 failures").
|
22
|
+
actual = TestOutputParser::Framework::RSpec.count("25 examples, 1 failure\n\n\n5 examples, 3 failures").to_hash
|
23
|
+
expected = { :total => 30, :failed => 4 }
|
24
|
+
expect(actual).to eq(expected)
|
18
25
|
end
|
19
26
|
|
20
27
|
it 'should ignore lines not related to rspec test summary' do
|
21
|
-
TestOutputParser::Framework::RSpec.count(File.read("spec/fixtures/sample-rspec-output.txt")).
|
28
|
+
actual = TestOutputParser::Framework::RSpec.count(File.read("spec/fixtures/sample-rspec-output.txt")).to_hash
|
29
|
+
expected = { :total => 67 }
|
30
|
+
expect(actual).to eq(expected)
|
22
31
|
end
|
23
32
|
|
24
33
|
it 'should count the number of pending specs' do
|
25
|
-
TestOutputParser::Framework::RSpec.count("16 examples, 0 failures, 1 pending").
|
34
|
+
actual = TestOutputParser::Framework::RSpec.count("16 examples, 0 failures, 1 pending").to_hash
|
35
|
+
expected = { :total => 16, :pending => 1 }
|
36
|
+
expect(actual).to eq(expected)
|
26
37
|
end
|
27
38
|
|
28
39
|
it 'should count the name of the specs that failed' do
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
40
|
+
expected = {
|
41
|
+
:total => 16,
|
42
|
+
:failed => 1,
|
43
|
+
:failures => '' +
|
44
|
+
" 1) PostsController GET index assigns all posts as @posts\n" +
|
45
|
+
" Failure/Error: assert false\n" +
|
46
|
+
" MiniTest::Assertion:\n" +
|
47
|
+
" Failed assertion, no message given.\n" +
|
48
|
+
" # (eval):2:in `assert'\n" +
|
49
|
+
" # ./spec/controllers/posts_controller_spec.rb:39:in `block (3 levels) in <top (required)>'\n\n"
|
50
|
+
|
51
|
+
}
|
52
|
+
actual = TestOutputParser::Framework::RSpec.count(File.read("spec/fixtures/sample-failed-rspec-output.txt")).to_hash
|
53
|
+
|
54
|
+
expect(actual).to eq(expected)
|
39
55
|
end
|
40
|
-
end
|
56
|
+
end
|
@@ -2,48 +2,80 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe TestOutputParser::Framework::TestUnit do
|
4
4
|
it 'should do nothing when there is no spec summary in the output' do
|
5
|
-
TestOutputParser::Framework::TestUnit.count("1 assertion").
|
5
|
+
actual = TestOutputParser::Framework::TestUnit.count("1 assertion").to_hash
|
6
|
+
expect(actual).to eq({})
|
6
7
|
end
|
7
8
|
|
8
9
|
it 'should count the number of tests ran for one test' do
|
9
|
-
TestOutputParser::Framework::TestUnit.count("1 tests, 1 assertions").
|
10
|
+
actual = TestOutputParser::Framework::TestUnit.count("1 tests, 1 assertions").to_hash
|
11
|
+
expected = { :total => 1 }
|
12
|
+
expect(actual).to eq(expected)
|
10
13
|
end
|
11
14
|
|
12
15
|
it 'should count the number of specs ran for one test-unit run' do
|
13
|
-
TestOutputParser::Framework::TestUnit.count("30 tests, 77 assertions, 3 failures, 4 errors, 2 skips").
|
14
|
-
|
16
|
+
actual = TestOutputParser::Framework::TestUnit.count("30 tests, 77 assertions, 3 failures, 4 errors, 2 skips").to_hash
|
17
|
+
expected = { :total => 30, :failed => 3, :errors => 4, :pending => 2 }
|
18
|
+
expect(actual).to eq(expected)
|
15
19
|
end
|
16
20
|
|
17
21
|
it 'should count the number of specs ran for multiple test-unit runs' do
|
18
|
-
TestOutputParser::Framework::TestUnit.count("30 tests, 77 assertions, 0 failures\n\n\n1 tests, 3 assertions, 1 failures, 1 errors, 1 skips").
|
19
|
-
|
22
|
+
actual = TestOutputParser::Framework::TestUnit.count("30 tests, 77 assertions, 0 failures\n\n\n1 tests, 3 assertions, 1 failures, 1 errors, 1 skips").to_hash
|
23
|
+
expected = { :total => 31, :failed => 1, :errors => 1, :pending => 1 }
|
24
|
+
expect(actual).to eq(expected)
|
20
25
|
end
|
21
26
|
|
22
27
|
it 'should ignore lines not related to test-unit test summary' do
|
23
|
-
TestOutputParser::Framework::TestUnit.count(File.read("spec/fixtures/sample-test-unit-output.txt")).
|
28
|
+
actual = TestOutputParser::Framework::TestUnit.count(File.read("spec/fixtures/sample-test-unit-output.txt")).to_hash
|
29
|
+
expected = { :total => 1 }
|
30
|
+
expect(actual).to eq(expected)
|
24
31
|
end
|
25
32
|
|
26
33
|
it 'should count the number of specs errors' do
|
27
|
-
TestOutputParser::Framework::TestUnit.count(File.read("spec/fixtures/sample-error-test-unit-output.txt")).
|
34
|
+
actual = TestOutputParser::Framework::TestUnit.count(File.read("spec/fixtures/sample-error-test-unit-output.txt")).to_hash
|
35
|
+
expected = { :total => 1, :errors => 1, }
|
36
|
+
expect(actual).to eq(expected)
|
28
37
|
end
|
29
38
|
|
30
39
|
it 'should count the number of specs pending' do
|
31
|
-
TestOutputParser::Framework::TestUnit.count(File.read("spec/fixtures/sample-pending-test-unit-output.txt")).
|
40
|
+
actual = TestOutputParser::Framework::TestUnit.count(File.read("spec/fixtures/sample-pending-test-unit-output.txt")).to_hash
|
41
|
+
expected = { :total => 1, :pending => 1 }
|
42
|
+
expect(actual).to eq(expected)
|
32
43
|
end
|
33
44
|
|
34
45
|
it 'should add the failures to the summary' do
|
35
|
-
TestOutputParser::Framework::TestUnit.count(File.read("spec/fixtures/sample-failed-test-unit-output.txt")).
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
46
|
+
actual = TestOutputParser::Framework::TestUnit.count(File.read("spec/fixtures/sample-failed-test-unit-output.txt")).to_hash
|
47
|
+
expected = {
|
48
|
+
:total => 95,
|
49
|
+
:failed => 1,
|
50
|
+
:errors => 1,
|
51
|
+
:failures => %Q!
|
52
|
+
1) Failure:
|
53
|
+
test_no_additional_rubies(RubyTest) [/var/snap-ci/repo/test/packages/ruby_test.rb:23]:
|
54
|
+
--- expected
|
55
|
+
+++ actual
|
56
|
+
@@ -1 +1 @@
|
57
|
+
-["foo", "bar"]
|
58
|
+
+["baz", "boo"]
|
59
|
+
|
60
|
+
|
61
|
+
2) Error:
|
62
|
+
test_rubies_are_installed(RubyTest):
|
63
|
+
Errno::ENOENT: No such file or directory - /opt/local/ruby/2.1.4/bin/ruby --version
|
64
|
+
/tmp/.bundle-repo/ruby/1.9.1/gems/mixlib-shellout-1.2.0/lib/mixlib/shellout/unix.rb:268:in `exec'
|
65
|
+
/tmp/.bundle-repo/ruby/1.9.1/gems/mixlib-shellout-1.2.0/lib/mixlib/shellout/unix.rb:268:in `block in fork_subprocess'
|
66
|
+
/tmp/.bundle-repo/ruby/1.9.1/gems/mixlib-shellout-1.2.0/lib/mixlib/shellout/unix.rb:256:in `fork'
|
67
|
+
/tmp/.bundle-repo/ruby/1.9.1/gems/mixlib-shellout-1.2.0/lib/mixlib/shellout/unix.rb:256:in `fork_subprocess'
|
68
|
+
/tmp/.bundle-repo/ruby/1.9.1/gems/mixlib-shellout-1.2.0/lib/mixlib/shellout/unix.rb:40:in `run_command'
|
69
|
+
/tmp/.bundle-repo/ruby/1.9.1/gems/mixlib-shellout-1.2.0/lib/mixlib/shellout.rb:225:in `run_command'
|
70
|
+
/var/snap-ci/repo/test/mini_test_helper.rb:28:in `block in run_command'
|
71
|
+
/opt/local/ruby/1.9.3-p484/lib/ruby/gems/1.9.1/gems/bundler-1.6.3/lib/bundler.rb:235:in `block in with_clean_env'
|
72
|
+
/opt/local/ruby/1.9.3-p484/lib/ruby/gems/1.9.1/gems/bundler-1.6.3/lib/bundler.rb:222:in `with_original_env'
|
73
|
+
/opt/local/ruby/1.9.3-p484/lib/ruby/gems/1.9.1/gems/bundler-1.6.3/lib/bundler.rb:228:in `with_clean_env'
|
74
|
+
/var/snap-ci/repo/test/mini_test_helper.rb:23:in `run_command'
|
75
|
+
/var/snap-ci/repo/test/packages/ruby_test.rb:11:in `block in test_rubies_are_installed'
|
76
|
+
/var/snap-ci/repo/test/packages/ruby_test.rb:7:in `each'
|
77
|
+
/var/snap-ci/repo/test/packages/ruby_test.rb:7:in `test_rubies_are_installed'
|
78
|
+
! }
|
79
|
+
expect(actual).to eq(expected)
|
80
|
+
end
|
81
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -6,7 +6,14 @@
|
|
6
6
|
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
7
7
|
require 'test_output_parser'
|
8
8
|
|
9
|
+
module SpecHelper
|
10
|
+
def strip_heredoc(str)
|
11
|
+
str.gsub(/^#{str.scan(/^\s*/).min_by{|l|l.length}}/, "")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
9
15
|
RSpec.configure do |config|
|
16
|
+
config.include SpecHelper
|
10
17
|
config.treat_symbols_as_metadata_keys_with_true_values = true
|
11
18
|
config.run_all_when_everything_filtered = true
|
12
19
|
config.filter_run :focus
|
@@ -2,56 +2,119 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe TestOutputParser do
|
4
4
|
it 'should give the summary of specs for rspec' do
|
5
|
-
TestOutputParser.count(File.read("spec/fixtures/sample-failed-rspec-output.txt"))
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
" Failure/Error: assert false\n"
|
12
|
-
" MiniTest::Assertion:\n"
|
13
|
-
" Failed assertion, no message given.\n"
|
14
|
-
" # (eval):2:in `assert'\n"
|
15
|
-
" # ./spec/controllers/posts_controller_spec.rb:39:in `block (3 levels) in <top (required)>'"
|
16
|
-
|
5
|
+
actual = TestOutputParser.count(File.read("spec/fixtures/sample-failed-rspec-output.txt"))
|
6
|
+
expected = {
|
7
|
+
:total => 16,
|
8
|
+
:failed => 1,
|
9
|
+
:failures => '' +
|
10
|
+
" 1) PostsController GET index assigns all posts as @posts\n" +
|
11
|
+
" Failure/Error: assert false\n" +
|
12
|
+
" MiniTest::Assertion:\n" +
|
13
|
+
" Failed assertion, no message given.\n" +
|
14
|
+
" # (eval):2:in `assert'\n" +
|
15
|
+
" # ./spec/controllers/posts_controller_spec.rb:39:in `block (3 levels) in <top (required)>'\n\n"
|
16
|
+
}
|
17
|
+
expect(actual).to eq(expected)
|
17
18
|
end
|
18
19
|
|
19
20
|
it 'should give the summary of specs for test unit' do
|
20
|
-
TestOutputParser.count(File.read("spec/fixtures/sample-failed-test-unit-output.txt"))
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
21
|
+
actual = TestOutputParser.count(File.read("spec/fixtures/sample-failed-test-unit-output.txt"))
|
22
|
+
expected = {
|
23
|
+
:total => 95,
|
24
|
+
:failed => 1,
|
25
|
+
:errors => 1,
|
26
|
+
:failures => %Q!
|
27
|
+
1) Failure:
|
28
|
+
test_no_additional_rubies(RubyTest) [/var/snap-ci/repo/test/packages/ruby_test.rb:23]:
|
29
|
+
--- expected
|
30
|
+
+++ actual
|
31
|
+
@@ -1 +1 @@
|
32
|
+
-["foo", "bar"]
|
33
|
+
+["baz", "boo"]
|
34
|
+
|
35
|
+
|
36
|
+
2) Error:
|
37
|
+
test_rubies_are_installed(RubyTest):
|
38
|
+
Errno::ENOENT: No such file or directory - /opt/local/ruby/2.1.4/bin/ruby --version
|
39
|
+
/tmp/.bundle-repo/ruby/1.9.1/gems/mixlib-shellout-1.2.0/lib/mixlib/shellout/unix.rb:268:in `exec'
|
40
|
+
/tmp/.bundle-repo/ruby/1.9.1/gems/mixlib-shellout-1.2.0/lib/mixlib/shellout/unix.rb:268:in `block in fork_subprocess'
|
41
|
+
/tmp/.bundle-repo/ruby/1.9.1/gems/mixlib-shellout-1.2.0/lib/mixlib/shellout/unix.rb:256:in `fork'
|
42
|
+
/tmp/.bundle-repo/ruby/1.9.1/gems/mixlib-shellout-1.2.0/lib/mixlib/shellout/unix.rb:256:in `fork_subprocess'
|
43
|
+
/tmp/.bundle-repo/ruby/1.9.1/gems/mixlib-shellout-1.2.0/lib/mixlib/shellout/unix.rb:40:in `run_command'
|
44
|
+
/tmp/.bundle-repo/ruby/1.9.1/gems/mixlib-shellout-1.2.0/lib/mixlib/shellout.rb:225:in `run_command'
|
45
|
+
/var/snap-ci/repo/test/mini_test_helper.rb:28:in `block in run_command'
|
46
|
+
/opt/local/ruby/1.9.3-p484/lib/ruby/gems/1.9.1/gems/bundler-1.6.3/lib/bundler.rb:235:in `block in with_clean_env'
|
47
|
+
/opt/local/ruby/1.9.3-p484/lib/ruby/gems/1.9.1/gems/bundler-1.6.3/lib/bundler.rb:222:in `with_original_env'
|
48
|
+
/opt/local/ruby/1.9.3-p484/lib/ruby/gems/1.9.1/gems/bundler-1.6.3/lib/bundler.rb:228:in `with_clean_env'
|
49
|
+
/var/snap-ci/repo/test/mini_test_helper.rb:23:in `run_command'
|
50
|
+
/var/snap-ci/repo/test/packages/ruby_test.rb:11:in `block in test_rubies_are_installed'
|
51
|
+
/var/snap-ci/repo/test/packages/ruby_test.rb:7:in `each'
|
52
|
+
/var/snap-ci/repo/test/packages/ruby_test.rb:7:in `test_rubies_are_installed'
|
53
|
+
!
|
54
|
+
}
|
55
|
+
expect(actual).to eq(expected)
|
30
56
|
end
|
31
57
|
|
32
58
|
it 'should give the summary of specs for junit' do
|
33
|
-
TestOutputParser.count(File.read("spec/fixtures/sample-gradle-output.txt"))
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
"com.thoughtworks.twu.controller.AddBookControllerTest > shouldAddBookToDBIfNotInSystem FAILED\n"
|
59
|
+
actual = TestOutputParser.count(File.read("spec/fixtures/sample-gradle-output.txt"))
|
60
|
+
expected = {
|
61
|
+
:total => 47,
|
62
|
+
:failed => 1,
|
63
|
+
:failures => "Running test: test shouldAddBookToDBIfNotInSystem(com.thoughtworks.twu.controller.AddBookControllerTest)\n\n" +
|
64
|
+
"com.thoughtworks.twu.controller.AddBookControllerTest > shouldAddBookToDBIfNotInSystem FAILED\n" +
|
39
65
|
" java.lang.AssertionError at AddBookControllerTest.java:28"
|
40
|
-
|
66
|
+
}
|
67
|
+
expect(actual).to eq(expected)
|
41
68
|
end
|
42
69
|
|
43
70
|
it 'should add up the summaries when there are specs for multiple frameworks' do
|
44
|
-
TestOutputParser.count(File.read("spec/fixtures/sample-failed-test-unit-output.txt") + File.read("spec/fixtures/sample-failed-rspec-output.txt"))
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
71
|
+
actual = TestOutputParser.count(File.read("spec/fixtures/sample-failed-test-unit-output.txt") + "\n" + File.read("spec/fixtures/sample-failed-rspec-output.txt"))
|
72
|
+
expected = {
|
73
|
+
:total => 111,
|
74
|
+
:failed => 2,
|
75
|
+
:failures => %Q! 1) PostsController GET index assigns all posts as @posts
|
76
|
+
Failure/Error: assert false
|
77
|
+
MiniTest::Assertion:
|
78
|
+
Failed assertion, no message given.
|
79
|
+
# (eval):2:in `assert'
|
80
|
+
# ./spec/controllers/posts_controller_spec.rb:39:in `block (3 levels) in <top (required)>'
|
81
|
+
|
82
|
+
|
83
|
+
1) Failure:
|
84
|
+
test_no_additional_rubies(RubyTest) [/var/snap-ci/repo/test/packages/ruby_test.rb:23]:
|
85
|
+
--- expected
|
86
|
+
+++ actual
|
87
|
+
@@ -1 +1 @@
|
88
|
+
-["foo", "bar"]
|
89
|
+
+["baz", "boo"]
|
90
|
+
|
91
|
+
|
92
|
+
2) Error:
|
93
|
+
test_rubies_are_installed(RubyTest):
|
94
|
+
Errno::ENOENT: No such file or directory - /opt/local/ruby/2.1.4/bin/ruby --version
|
95
|
+
/tmp/.bundle-repo/ruby/1.9.1/gems/mixlib-shellout-1.2.0/lib/mixlib/shellout/unix.rb:268:in `exec'
|
96
|
+
/tmp/.bundle-repo/ruby/1.9.1/gems/mixlib-shellout-1.2.0/lib/mixlib/shellout/unix.rb:268:in `block in fork_subprocess'
|
97
|
+
/tmp/.bundle-repo/ruby/1.9.1/gems/mixlib-shellout-1.2.0/lib/mixlib/shellout/unix.rb:256:in `fork'
|
98
|
+
/tmp/.bundle-repo/ruby/1.9.1/gems/mixlib-shellout-1.2.0/lib/mixlib/shellout/unix.rb:256:in `fork_subprocess'
|
99
|
+
/tmp/.bundle-repo/ruby/1.9.1/gems/mixlib-shellout-1.2.0/lib/mixlib/shellout/unix.rb:40:in `run_command'
|
100
|
+
/tmp/.bundle-repo/ruby/1.9.1/gems/mixlib-shellout-1.2.0/lib/mixlib/shellout.rb:225:in `run_command'
|
101
|
+
/var/snap-ci/repo/test/mini_test_helper.rb:28:in `block in run_command'
|
102
|
+
/opt/local/ruby/1.9.3-p484/lib/ruby/gems/1.9.1/gems/bundler-1.6.3/lib/bundler.rb:235:in `block in with_clean_env'
|
103
|
+
/opt/local/ruby/1.9.3-p484/lib/ruby/gems/1.9.1/gems/bundler-1.6.3/lib/bundler.rb:222:in `with_original_env'
|
104
|
+
/opt/local/ruby/1.9.3-p484/lib/ruby/gems/1.9.1/gems/bundler-1.6.3/lib/bundler.rb:228:in `with_clean_env'
|
105
|
+
/var/snap-ci/repo/test/mini_test_helper.rb:23:in `run_command'
|
106
|
+
/var/snap-ci/repo/test/packages/ruby_test.rb:11:in `block in test_rubies_are_installed'
|
107
|
+
/var/snap-ci/repo/test/packages/ruby_test.rb:7:in `each'
|
108
|
+
/var/snap-ci/repo/test/packages/ruby_test.rb:7:in `test_rubies_are_installed'
|
109
|
+
!,
|
110
|
+
:errors => 1
|
111
|
+
}
|
112
|
+
expect(actual).to eq(expected)
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'should ignore invalid UTF-8 characters' do
|
116
|
+
actual = TestOutputParser.count("16 exa\255mples, 0 failures")
|
117
|
+
expected = { :total => 16 }
|
118
|
+
expect(actual).to eq(expected)
|
56
119
|
end
|
57
|
-
end
|
120
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: test-output-parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Akshay Karle
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -64,6 +64,7 @@ files:
|
|
64
64
|
- ".ruby-gemset"
|
65
65
|
- ".ruby-version"
|
66
66
|
- Gemfile
|
67
|
+
- Gemfile.lock
|
67
68
|
- LICENSE.txt
|
68
69
|
- README.md
|
69
70
|
- Rakefile
|
@@ -108,7 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
108
109
|
version: '0'
|
109
110
|
requirements: []
|
110
111
|
rubyforge_project:
|
111
|
-
rubygems_version: 2.2.
|
112
|
+
rubygems_version: 2.2.2
|
112
113
|
signing_key:
|
113
114
|
specification_version: 4
|
114
115
|
summary: A gem to get the summary of test outputs for further processing
|