minitest-reporters-json_reporter 0.1.1 → 0.2.0
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/.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
|
- - ">="
|