minitest-reporters-json_reporter 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +0 -1
- data/.rubocop.yml +9 -2
- data/Announcement.txt +131 -0
- data/README.md +80 -9
- data/Rakefile +11 -0
- data/doc/Minitest.html +126 -0
- data/doc/Minitest/Reporters.html +126 -0
- data/doc/Minitest/Reporters/ErrorDetail.html +390 -0
- data/doc/Minitest/Reporters/FailDetail.html +248 -0
- data/doc/Minitest/Reporters/FaultDetail.html +374 -0
- data/doc/Minitest/Reporters/JsonReporter.html +799 -0
- data/doc/Minitest/Reporters/PassDetail.html +235 -0
- data/doc/Minitest/Reporters/SkipDetail.html +220 -0
- data/doc/Minitest/Reporters/TestDetail.html +509 -0
- data/doc/_index.html +237 -0
- data/doc/class_list.html +58 -0
- data/doc/css/common.css +1 -0
- data/doc/css/full_list.css +57 -0
- data/doc/css/style.css +339 -0
- data/doc/file.README.html +142 -0
- data/doc/file_list.html +60 -0
- data/doc/frames.html +26 -0
- data/doc/index.html +142 -0
- data/doc/js/app.js +219 -0
- data/doc/js/full_list.js +181 -0
- data/doc/js/jquery.js +4 -0
- data/doc/method_list.html +195 -0
- data/doc/top-level-namespace.html +112 -0
- data/lib/minitest/reporters/json_reporter.rb +67 -62
- data/lib/minitest/reporters/json_reporter/error_detail.rb +25 -0
- data/lib/minitest/reporters/json_reporter/fail_detail.rb +16 -0
- data/lib/minitest/reporters/json_reporter/fault_detail.rb +39 -0
- data/lib/minitest/reporters/json_reporter/pass_detail.rb +16 -0
- data/lib/minitest/reporters/json_reporter/skip_detail.rb +16 -0
- data/lib/minitest/reporters/json_reporter/test_detail.rb +43 -0
- data/lib/minitest/reporters/json_reporter/version.rb +6 -6
- data/minitest-reporters-json_reporter.gemspec +3 -2
- metadata +35 -5
@@ -1,4 +1,4 @@
|
|
1
|
-
# json_reporter.rb - class
|
1
|
+
# json_reporter.rb - class Minitest::Reporters::JsonReporter
|
2
2
|
|
3
3
|
require 'json'
|
4
4
|
require 'time'
|
@@ -6,15 +6,21 @@ require 'minitest'
|
|
6
6
|
require 'minitest/reporters'
|
7
7
|
|
8
8
|
require_relative 'json_reporter/version'
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
require_relative 'json_reporter/test_detail'
|
10
|
+
require_relative 'json_reporter/pass_detail'
|
11
|
+
require_relative 'json_reporter/fault_detail'
|
12
|
+
require_relative 'json_reporter/skip_detail'
|
13
|
+
require_relative 'json_reporter/error_detail'
|
14
|
+
require_relative 'json_reporter/fail_detail'
|
15
|
+
|
16
|
+
# Minitest namespace - plugins must live here
|
17
|
+
module Minitest
|
18
|
+
# Minitest::Reporters from minitest-reporters gem: See: https://github.com/kern/minitest-reporters
|
13
19
|
module Reporters
|
14
|
-
#
|
20
|
+
# Minitest Reporter that produces a JSON output for interface in IDEs, editor
|
15
21
|
class JsonReporter < BaseReporter
|
16
|
-
def initialize(
|
17
|
-
super
|
22
|
+
def initialize(my_options = {})
|
23
|
+
super my_options
|
18
24
|
@skipped = 0
|
19
25
|
@failed = 0
|
20
26
|
@errored = 0
|
@@ -22,19 +28,21 @@ module MiniTest
|
|
22
28
|
@storage = init_status
|
23
29
|
end
|
24
30
|
|
31
|
+
attr_reader :storage
|
32
|
+
|
25
33
|
def metadata_h
|
26
34
|
{
|
27
35
|
generated_by: self.class.name,
|
28
|
-
version:
|
36
|
+
version: Minitest::Reporters::JsonReporter::VERSION,
|
29
37
|
time: Time.now.utc.iso8601
|
30
38
|
}
|
31
39
|
end
|
32
40
|
|
33
41
|
def init_status
|
34
42
|
{
|
35
|
-
status:
|
43
|
+
status: green_status,
|
36
44
|
metadata: metadata_h,
|
37
|
-
statistics:
|
45
|
+
statistics: statistics_h,
|
38
46
|
fails: [],
|
39
47
|
skips: []
|
40
48
|
}
|
@@ -47,15 +55,15 @@ module MiniTest
|
|
47
55
|
|
48
56
|
def report
|
49
57
|
super
|
50
|
-
set_status # sets the sucess or failure and color in the status object
|
51
|
-
@storage[:statistics][:total] = @passed + @skipped + @failed + @errored
|
52
|
-
@storage[:statistics][:failed] = @failed
|
53
|
-
@storage[:statistics][:errored] = @errored
|
54
|
-
@storage[:statistics][:skipped] = @skipped
|
55
|
-
@storage[:statistics][:passed] = @passed
|
56
58
|
|
57
|
-
#
|
58
|
-
|
59
|
+
set_status # sets the success or failure and color in the status object
|
60
|
+
# options only exists once test run starts
|
61
|
+
@storage[:metadata][:options] = transform_store(options)
|
62
|
+
@storage[:statistics] = statistics_h
|
63
|
+
# Only add this if not already added and verbose option is set
|
64
|
+
@storage[:passes] ||= [] if options[:verbose]
|
65
|
+
|
66
|
+
io.write(JSON.dump(@storage))
|
59
67
|
end
|
60
68
|
|
61
69
|
def yellow?
|
@@ -73,11 +81,13 @@ module MiniTest
|
|
73
81
|
private
|
74
82
|
|
75
83
|
def set_status
|
76
|
-
if
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
84
|
+
@storage[:status] = if red?
|
85
|
+
red_status
|
86
|
+
elsif yellow?
|
87
|
+
yellow_status
|
88
|
+
else
|
89
|
+
green_status
|
90
|
+
end
|
81
91
|
end
|
82
92
|
|
83
93
|
def color_h(code, color)
|
@@ -96,65 +106,60 @@ module MiniTest
|
|
96
106
|
color_h('Success', 'green')
|
97
107
|
end
|
98
108
|
|
99
|
-
def
|
100
|
-
last_before_assertion = ''
|
101
|
-
|
102
|
-
exception.backtrace.reverse_each do |s|
|
103
|
-
break if s =~ /in .(assert|refute|flunk|pass|fail|raise|must|wont)/
|
104
|
-
last_before_assertion = s
|
105
|
-
end
|
106
|
-
|
107
|
-
last_before_assertion.sub(/:in .*$/, '')
|
108
|
-
end
|
109
|
-
|
110
|
-
def fault_h(type, test, e)
|
109
|
+
def statistics_h
|
111
110
|
{
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
111
|
+
total: @failed + @errored + @skipped + @passed,
|
112
|
+
failed: @failed,
|
113
|
+
errored: @errored,
|
114
|
+
skipped: @skipped,
|
115
|
+
passed: @passed
|
117
116
|
}
|
118
117
|
end
|
119
118
|
|
120
|
-
def status(type, test, msg, &_blk)
|
121
|
-
result = test.send(msg)
|
122
|
-
if result
|
123
|
-
e = fault_h(type, test, test.failure)
|
124
|
-
yield(e)
|
125
|
-
end
|
126
|
-
|
127
|
-
result
|
128
|
-
end
|
129
|
-
|
130
119
|
def skipped(test)
|
131
|
-
|
132
|
-
@storage[:skips] << e
|
120
|
+
Minitest::Reporters::SkipDetail.new(test).query do |d|
|
133
121
|
@skipped += 1
|
122
|
+
@storage[:skips] << d.to_h
|
134
123
|
end
|
135
124
|
end
|
136
125
|
|
137
126
|
def errored(test)
|
138
|
-
|
139
|
-
|
127
|
+
Minitest::Reporters::ErrorDetail.new(test).query do |d|
|
128
|
+
d.backtrace = filter_backtrace(d.backtrace)
|
129
|
+
@storage[:fails] << d.to_h
|
140
130
|
@errored += 1
|
141
131
|
end
|
142
132
|
end
|
143
133
|
|
144
134
|
def failed(test)
|
145
|
-
|
146
|
-
@storage[:fails] <<
|
135
|
+
Minitest::Reporters::FailDetail.new(test).query do |d|
|
136
|
+
@storage[:fails] << d.to_h
|
147
137
|
@failed += 1
|
148
138
|
end
|
149
139
|
end
|
150
140
|
|
151
|
-
|
152
|
-
|
141
|
+
# If it is increments @passed and optionally adds PassDetail object
|
142
|
+
# to .passes array
|
143
|
+
# if options[:verbose] == true
|
144
|
+
def passed(test)
|
145
|
+
Minitest::Reporters::PassDetail.new(test).query do |d|
|
146
|
+
@passed += 1
|
147
|
+
if options[:verbose]
|
148
|
+
@storage[:passes] ||= []
|
149
|
+
@storage[:passes] << d.to_h
|
150
|
+
end
|
151
|
+
end
|
153
152
|
end
|
154
153
|
|
155
|
-
#
|
156
|
-
|
157
|
-
|
154
|
+
# transform_store options: make pretty object for our JSON [metadata.options]
|
155
|
+
# If :io is the IO class and == $stdout: "STDOUT"
|
156
|
+
# Delete key: total_count
|
157
|
+
def transform_store(opts)
|
158
|
+
o = opts.clone
|
159
|
+
o[:io] = o[:io].class.name
|
160
|
+
o[:io] = 'STDOUT' if opts[:io] == $stdout
|
161
|
+
o.delete(:total_count)
|
162
|
+
o
|
158
163
|
end
|
159
164
|
end
|
160
165
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
|
2
|
+
# error_detail.rb - class Minitest::Reporters::ErrorDetail
|
3
|
+
|
4
|
+
# Minitest Namespace for all things Minitest
|
5
|
+
module Minitest
|
6
|
+
# Reporters Namespace for Minitest::Reporters reporters
|
7
|
+
module Reporters
|
8
|
+
# How to handle an error detail
|
9
|
+
class ErrorDetail < FaultDetail
|
10
|
+
def initialize(test)
|
11
|
+
super
|
12
|
+
@type = 'error'
|
13
|
+
@predicate = :error?
|
14
|
+
end
|
15
|
+
|
16
|
+
attr_accessor :backtrace
|
17
|
+
|
18
|
+
def to_h
|
19
|
+
h = super
|
20
|
+
h[:backtrace] = @backtrace
|
21
|
+
h
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# fail_detail.rb - class Minitest::Reporters::FailDetail
|
2
|
+
|
3
|
+
# Minitest Namespace for all things Minitest
|
4
|
+
module Minitest
|
5
|
+
# Reporters Extensible reporting framework for Minitest runs
|
6
|
+
module Reporters
|
7
|
+
# FailDetail Detail of failed test
|
8
|
+
class FailDetail < FaultDetail
|
9
|
+
def initialize(test)
|
10
|
+
super
|
11
|
+
@type = 'failure'
|
12
|
+
@predicate = :failure
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# fault_detail.rb - class Minitest::Reporters::FaultDetail
|
2
|
+
|
3
|
+
# Minitest Base namespace for Minitest related objects
|
4
|
+
module Minitest
|
5
|
+
# Reporters - Extensible Reporting framework for Minitest
|
6
|
+
module Reporters
|
7
|
+
# superclass for SkipDetail, FailDetail and ErrorDetail
|
8
|
+
class FaultDetail < TestDetail
|
9
|
+
def initialize(test)
|
10
|
+
# Initialize for FaultDetail - sets up
|
11
|
+
# exception stuff: message, location and backtrace
|
12
|
+
super test
|
13
|
+
end
|
14
|
+
|
15
|
+
# returns string of found location of this test from backtrace
|
16
|
+
def location
|
17
|
+
@backtrace.reverse.reduce('') do |a, e|
|
18
|
+
break a if e =~ /in .(assert|refute|flunk|pass|fail|raise|must|wont)/
|
19
|
+
e.sub(/:in .*$/, '')
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_h
|
24
|
+
h = super
|
25
|
+
h[:message] = @message
|
26
|
+
h[:location] = location
|
27
|
+
h
|
28
|
+
end
|
29
|
+
|
30
|
+
protected
|
31
|
+
|
32
|
+
def setup_state
|
33
|
+
@exception = @test_obj.failure
|
34
|
+
@message = @exception.message
|
35
|
+
@backtrace = @exception.backtrace
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# pass_detail.rb - class Minitest::Reporters::PassDetail
|
2
|
+
|
3
|
+
# Minitest Namespace for all things Minitest
|
4
|
+
module Minitest
|
5
|
+
# Reporters Extensible framework for custom Minitest reporters
|
6
|
+
module Reporters
|
7
|
+
# Handler for detail of passed tests
|
8
|
+
class PassDetail < Minitest::Reporters::TestDetail
|
9
|
+
def initialize(test)
|
10
|
+
super
|
11
|
+
@type = 'passed'
|
12
|
+
@predicate = :passed?
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# skip_detail.rb - class Minitest::Reporters::SkipDetail
|
2
|
+
|
3
|
+
# Minitest Namespace for all things Minitest
|
4
|
+
module Minitest
|
5
|
+
# Reporters - Extensible reporting framework for Minitest
|
6
|
+
module Reporters
|
7
|
+
# How to handle a skipped test.
|
8
|
+
class SkipDetail < Minitest::Reporters::FaultDetail
|
9
|
+
def initialize(test)
|
10
|
+
super
|
11
|
+
@type = 'skipped'
|
12
|
+
@predicate = :skipped?
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# test_detail.rb - class Minitest::Reporters::TestDetail
|
2
|
+
|
3
|
+
# Minitest Namespace for all things Minitest
|
4
|
+
module Minitest
|
5
|
+
# Reporters Extensible framework for custom Minitest reporters
|
6
|
+
module Reporters
|
7
|
+
# Base class for detail handlers
|
8
|
+
class TestDetail
|
9
|
+
def initialize(test)
|
10
|
+
@type = 'unknown'
|
11
|
+
@class_name = test.class.name
|
12
|
+
@name = test.name
|
13
|
+
@predicate = :nil?
|
14
|
+
@test_obj = test
|
15
|
+
end
|
16
|
+
|
17
|
+
attr_reader :test_obj, :predicate
|
18
|
+
|
19
|
+
def query(&_blk)
|
20
|
+
# force result to be boolean because of failure in Test is not a predicate ?
|
21
|
+
result = (@test_obj.send(@predicate) ? true : false)
|
22
|
+
if result
|
23
|
+
setup_state
|
24
|
+
yield self if block_given?
|
25
|
+
end
|
26
|
+
result
|
27
|
+
end
|
28
|
+
|
29
|
+
def to_h
|
30
|
+
{
|
31
|
+
type: @type,
|
32
|
+
class: @class_name,
|
33
|
+
name: @name
|
34
|
+
}
|
35
|
+
end
|
36
|
+
|
37
|
+
protected
|
38
|
+
|
39
|
+
def setup_state
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -1,12 +1,12 @@
|
|
1
|
-
# version.rb - version constant:
|
1
|
+
# version.rb - version constant: Minitest::Reporters::JsonReporter::VERSION
|
2
2
|
|
3
|
-
#
|
4
|
-
module
|
5
|
-
#
|
3
|
+
# Minitest namespace - plugins must live here
|
4
|
+
module Minitest
|
5
|
+
# Minitest::Reporters from minitest-reporters gem: See: https://github.com/kern/minitest-reporters
|
6
6
|
module Reporters
|
7
|
-
#
|
7
|
+
# Minitest Reporter that produces a JSON output for interface in IDEs, editor.
|
8
8
|
class JsonReporter < BaseReporter
|
9
|
-
VERSION = '0.
|
9
|
+
VERSION = '0.2.0'.freeze
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
@@ -12,15 +12,16 @@ Gem::Specification.new do |spec|
|
|
12
12
|
spec.email = ['ed.howland@gmail.com']
|
13
13
|
|
14
14
|
spec.summary = 'JSON Reporter format for minitest-reporters gem.'
|
15
|
-
spec.description = ' Formats the output of a
|
15
|
+
spec.description = ' Formats the output of a Minitest run as JSON. Useful for interfacing Minitest or MiniSpec to IDEs or programming text editors, such as the Atom editor.
|
16
16
|
See: https://atom.io. Originally written to interface with the Viper Audible editor for blind programmers. See https://github.com/edhowland/viper'
|
17
|
-
spec.homepage =
|
17
|
+
spec.homepage = 'https://github.com/edhowland/minitest-reporters-json_reporter'
|
18
18
|
spec.license = 'MIT'
|
19
19
|
|
20
20
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
21
21
|
spec.bindir = 'exe'
|
22
22
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
23
23
|
spec.require_paths = ['lib']
|
24
|
+
spec.required_ruby_version = '~> 2.0'
|
24
25
|
spec.add_runtime_dependency 'minitest', '~> 5.7'
|
25
26
|
spec.add_runtime_dependency 'minitest-reporters', '~> 1.1.8'
|
26
27
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: minitest-reporters-json_reporter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- edhowland
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-04-
|
11
|
+
date: 2016-04-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
@@ -67,7 +67,7 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '10.0'
|
69
69
|
description: |2-
|
70
|
-
Formats the output of a
|
70
|
+
Formats the output of a Minitest run as JSON. Useful for interfacing Minitest or MiniSpec to IDEs or programming text editors, such as the Atom editor.
|
71
71
|
See: https://atom.io. Originally written to interface with the Viper Audible editor for blind programmers. See https://github.com/edhowland/viper
|
72
72
|
email:
|
73
73
|
- ed.howland@gmail.com
|
@@ -78,13 +78,43 @@ files:
|
|
78
78
|
- ".gitignore"
|
79
79
|
- ".rubocop.yml"
|
80
80
|
- ".travis.yml"
|
81
|
+
- Announcement.txt
|
81
82
|
- CODE_OF_CONDUCT.md
|
82
83
|
- Gemfile
|
83
84
|
- LICENSE.txt
|
84
85
|
- README.md
|
85
86
|
- Rakefile
|
86
87
|
- TODO.txt
|
88
|
+
- doc/Minitest.html
|
89
|
+
- doc/Minitest/Reporters.html
|
90
|
+
- doc/Minitest/Reporters/ErrorDetail.html
|
91
|
+
- doc/Minitest/Reporters/FailDetail.html
|
92
|
+
- doc/Minitest/Reporters/FaultDetail.html
|
93
|
+
- doc/Minitest/Reporters/JsonReporter.html
|
94
|
+
- doc/Minitest/Reporters/PassDetail.html
|
95
|
+
- doc/Minitest/Reporters/SkipDetail.html
|
96
|
+
- doc/Minitest/Reporters/TestDetail.html
|
97
|
+
- doc/_index.html
|
98
|
+
- doc/class_list.html
|
99
|
+
- doc/css/common.css
|
100
|
+
- doc/css/full_list.css
|
101
|
+
- doc/css/style.css
|
102
|
+
- doc/file.README.html
|
103
|
+
- doc/file_list.html
|
104
|
+
- doc/frames.html
|
105
|
+
- doc/index.html
|
106
|
+
- doc/js/app.js
|
107
|
+
- doc/js/full_list.js
|
108
|
+
- doc/js/jquery.js
|
109
|
+
- doc/method_list.html
|
110
|
+
- doc/top-level-namespace.html
|
87
111
|
- lib/minitest/reporters/json_reporter.rb
|
112
|
+
- lib/minitest/reporters/json_reporter/error_detail.rb
|
113
|
+
- lib/minitest/reporters/json_reporter/fail_detail.rb
|
114
|
+
- lib/minitest/reporters/json_reporter/fault_detail.rb
|
115
|
+
- lib/minitest/reporters/json_reporter/pass_detail.rb
|
116
|
+
- lib/minitest/reporters/json_reporter/skip_detail.rb
|
117
|
+
- lib/minitest/reporters/json_reporter/test_detail.rb
|
88
118
|
- lib/minitest/reporters/json_reporter/version.rb
|
89
119
|
- minitest-reporters-json_reporter.gemspec
|
90
120
|
homepage: https://github.com/edhowland/minitest-reporters-json_reporter
|
@@ -97,9 +127,9 @@ require_paths:
|
|
97
127
|
- lib
|
98
128
|
required_ruby_version: !ruby/object:Gem::Requirement
|
99
129
|
requirements:
|
100
|
-
- - "
|
130
|
+
- - "~>"
|
101
131
|
- !ruby/object:Gem::Version
|
102
|
-
version: '0'
|
132
|
+
version: '2.0'
|
103
133
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
134
|
requirements:
|
105
135
|
- - ">="
|