covered 0.12.0 → 0.13.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/covered.gemspec +1 -1
- data/lib/covered/summary.rb +74 -51
- data/lib/covered/version.rb +1 -1
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 207e7d403aa0d5e2e726aea8b87afd7632e951b874d5fea251af9dc8e979b064
|
4
|
+
data.tar.gz: 0e3a010f8cade8119c2b8bfd55556a984208b99cb7b529181f537de3ddf351df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 371e5d865b5cc02ffc87f3b457e1b8243d24a56965022482a3fb9c86d7a2a1485ba899b72e012132cd274699a247d19f9d477b71780fd378d11fb52431009690
|
7
|
+
data.tar.gz: fb7be0ffc88ddbe8ad9d5fd2e8bfb09efff89f1d91edef63e4b5d52e6f17b3d1881d5cb0ae0563bffa4e8c221c7bfadaf9bdbb1bc208480290ad860bd0ff74e5
|
data/covered.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_dependency "
|
21
|
+
spec.add_dependency "event", "~> 1.5"
|
22
22
|
spec.add_dependency "parser"
|
23
23
|
spec.add_dependency "msgpack"
|
24
24
|
|
data/lib/covered/summary.rb
CHANGED
@@ -21,7 +21,7 @@
|
|
21
21
|
require_relative 'statistics'
|
22
22
|
require_relative 'wrapper'
|
23
23
|
|
24
|
-
require '
|
24
|
+
require 'event/terminal'
|
25
25
|
|
26
26
|
module Covered
|
27
27
|
class Summary
|
@@ -29,6 +29,24 @@ module Covered
|
|
29
29
|
@threshold = threshold
|
30
30
|
end
|
31
31
|
|
32
|
+
def terminal(output)
|
33
|
+
Event::Terminal.for(output).tap do |terminal|
|
34
|
+
terminal[:path] ||= terminal.style(nil, nil, :bold, :underline)
|
35
|
+
terminal[:brief_path] ||= terminal.style(:yellow)
|
36
|
+
|
37
|
+
terminal[:uncovered_prefix] ||= terminal.style(:red)
|
38
|
+
terminal[:covered_prefix] ||= terminal.style(:green)
|
39
|
+
terminal[:ignored_prefix] ||= terminal.style(nil, nil, :faint)
|
40
|
+
terminal[:header_prefix] ||= terminal.style(nil, nil, :faint)
|
41
|
+
|
42
|
+
terminal[:uncovered_code] ||= terminal.style(:red)
|
43
|
+
terminal[:covered_code] ||= terminal.style(:green)
|
44
|
+
terminal[:ignored_code] ||= terminal.style(nil, nil, :faint)
|
45
|
+
|
46
|
+
terminal[:annotations] ||= terminal.style(:blue)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
32
50
|
def each(wrapper)
|
33
51
|
statistics = Statistics.new
|
34
52
|
|
@@ -43,49 +61,64 @@ module Covered
|
|
43
61
|
return statistics
|
44
62
|
end
|
45
63
|
|
46
|
-
def print_annotations(
|
64
|
+
def print_annotations(terminal, coverage, line, line_offset)
|
47
65
|
if annotations = coverage.annotations[line_offset]
|
48
|
-
|
49
|
-
|
66
|
+
prefix = "#{line_offset}|".rjust(8) + "*|".rjust(8)
|
67
|
+
terminal.write prefix, style: :ignored_prefix
|
50
68
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
69
|
+
terminal.write line.match(/^\s+/)
|
70
|
+
terminal.puts "\# #{annotations.join(", ")}", style: :annotations
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def print_line_header(terminal)
|
75
|
+
prefix = "Line|".rjust(8) + "Hits|".rjust(8)
|
76
|
+
|
77
|
+
terminal.puts prefix, style: :header_prefix
|
78
|
+
end
|
79
|
+
|
80
|
+
def print_line(terminal, line, line_offset, count)
|
81
|
+
prefix = "#{line_offset}|".rjust(8) + "#{count}|".rjust(8)
|
82
|
+
|
83
|
+
if count == nil
|
84
|
+
terminal.write prefix, style: :ignored_prefix
|
85
|
+
terminal.write line, style: :ignored_code
|
86
|
+
elsif count == 0
|
87
|
+
terminal.write prefix, style: :uncovered_prefix
|
88
|
+
terminal.write line, style: :uncovered_code
|
89
|
+
else
|
90
|
+
terminal.write prefix, style: :covered_prefix
|
91
|
+
terminal.write line, style: :covered_code
|
92
|
+
end
|
93
|
+
|
94
|
+
# If there was no newline at end of file, we add one:
|
95
|
+
unless line.end_with? $/
|
96
|
+
terminal.puts
|
55
97
|
end
|
56
98
|
end
|
57
99
|
|
58
100
|
# A coverage array gives, for each line, the number of line execution by the interpreter. A nil value means coverage is disabled for this line (lines like else and end).
|
59
101
|
def call(wrapper, output = $stdout)
|
102
|
+
terminal = self.terminal(output)
|
103
|
+
|
60
104
|
statistics = self.each(wrapper) do |coverage|
|
61
105
|
line_offset = 1
|
62
106
|
|
63
107
|
path = wrapper.relative_path(coverage.path)
|
64
|
-
|
108
|
+
terminal.puts ""
|
109
|
+
terminal.puts path, style: :path
|
65
110
|
|
66
111
|
counts = coverage.counts
|
67
112
|
|
68
113
|
coverage.read do |file|
|
114
|
+
print_line_header(terminal)
|
115
|
+
|
69
116
|
file.each_line do |line|
|
70
117
|
count = counts[line_offset]
|
71
118
|
|
72
|
-
print_annotations(
|
73
|
-
|
74
|
-
output.write("#{line_offset}|".rjust(8))
|
75
|
-
output.write("#{count}|".rjust(8))
|
119
|
+
print_annotations(terminal, coverage, line, line_offset)
|
76
120
|
|
77
|
-
|
78
|
-
output.write Rainbow(line).faint
|
79
|
-
elsif count == 0
|
80
|
-
output.write Rainbow(line).red
|
81
|
-
else
|
82
|
-
output.write Rainbow(line).green
|
83
|
-
end
|
84
|
-
|
85
|
-
# If there was no newline at end of file, we add one:
|
86
|
-
unless line.end_with? $/
|
87
|
-
output.puts
|
88
|
-
end
|
121
|
+
print_line(terminal, line, line_offset, count)
|
89
122
|
|
90
123
|
line_offset += 1
|
91
124
|
end
|
@@ -100,24 +133,26 @@ module Covered
|
|
100
133
|
|
101
134
|
class BriefSummary < Summary
|
102
135
|
def call(wrapper, output = $stdout, before: 4, after: 4)
|
136
|
+
terminal = self.terminal(output)
|
137
|
+
|
103
138
|
ordered = []
|
104
139
|
|
105
140
|
statistics = self.each(wrapper) do |coverage|
|
106
141
|
ordered << coverage unless coverage.complete?
|
107
142
|
end
|
108
143
|
|
109
|
-
|
144
|
+
terminal.puts
|
110
145
|
statistics.print(output)
|
111
146
|
|
112
147
|
if ordered.any?
|
113
|
-
|
148
|
+
terminal.puts "", "Least Coverage:"
|
114
149
|
ordered.sort_by!(&:missing_count).reverse!
|
115
150
|
|
116
151
|
ordered.first(5).each do |coverage|
|
117
152
|
path = wrapper.relative_path(coverage.path)
|
118
153
|
|
119
|
-
|
120
|
-
|
154
|
+
terminal.write path, style: :brief_path
|
155
|
+
terminal.puts ": #{coverage.missing_count} lines not executed!"
|
121
156
|
end
|
122
157
|
end
|
123
158
|
end
|
@@ -125,16 +160,21 @@ module Covered
|
|
125
160
|
|
126
161
|
class PartialSummary < Summary
|
127
162
|
def call(wrapper, output = $stdout, before: 4, after: 4)
|
163
|
+
terminal = self.terminal(output)
|
164
|
+
|
128
165
|
statistics = self.each(wrapper) do |coverage|
|
129
166
|
line_offset = 1
|
130
167
|
|
131
168
|
path = wrapper.relative_path(coverage.path)
|
132
|
-
|
169
|
+
terminal.puts ""
|
170
|
+
terminal.puts path, style: :path
|
133
171
|
|
134
172
|
counts = coverage.counts
|
135
173
|
last_line = nil
|
136
174
|
|
137
175
|
unless coverage.zero?
|
176
|
+
print_line_header(terminal)
|
177
|
+
|
138
178
|
coverage.read do |file|
|
139
179
|
file.each_line do |line|
|
140
180
|
range = Range.new([line_offset - before, 0].max, line_offset+after)
|
@@ -143,28 +183,11 @@ module Covered
|
|
143
183
|
count = counts[line_offset]
|
144
184
|
|
145
185
|
if last_line and last_line != line_offset-1
|
146
|
-
|
186
|
+
terminal.puts ":".rjust(16)
|
147
187
|
end
|
148
188
|
|
149
|
-
print_annotations(
|
150
|
-
|
151
|
-
prefix = "#{line_offset}|".rjust(8) + "#{count}|".rjust(8)
|
152
|
-
|
153
|
-
if count == nil
|
154
|
-
output.write prefix
|
155
|
-
output.write Rainbow(line).faint
|
156
|
-
elsif count == 0
|
157
|
-
output.write Rainbow(prefix).background(:darkred)
|
158
|
-
output.write Rainbow(line).red
|
159
|
-
else
|
160
|
-
output.write Rainbow(prefix).background(:darkgreen)
|
161
|
-
output.write Rainbow(line).green
|
162
|
-
end
|
163
|
-
|
164
|
-
# If there was no newline at end of file, we add one:
|
165
|
-
unless line.end_with? $/
|
166
|
-
output.puts
|
167
|
-
end
|
189
|
+
print_annotations(terminal, coverage, line, line_offset)
|
190
|
+
print_line(terminal, line, line_offset, count)
|
168
191
|
|
169
192
|
last_line = line_offset
|
170
193
|
end
|
@@ -177,7 +200,7 @@ module Covered
|
|
177
200
|
coverage.print(output)
|
178
201
|
end
|
179
202
|
|
180
|
-
|
203
|
+
terminal.puts
|
181
204
|
statistics.print(output)
|
182
205
|
end
|
183
206
|
end
|
data/lib/covered/version.rb
CHANGED
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: covered
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Williams
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-03-
|
11
|
+
date: 2019-03-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: event
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '1.5'
|
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: '
|
26
|
+
version: '1.5'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: parser
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -192,7 +192,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
192
192
|
- !ruby/object:Gem::Version
|
193
193
|
version: '0'
|
194
194
|
requirements: []
|
195
|
-
rubygems_version: 3.0.
|
195
|
+
rubygems_version: 3.0.3
|
196
196
|
signing_key:
|
197
197
|
specification_version: 4
|
198
198
|
summary: A modern approach to code coverage.
|