coverband 4.0.0 → 4.0.1.alpha
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +0 -4
- data/changes.md +57 -52
- data/coverband.gemspec +3 -5
- data/lib/coverband.rb +6 -1
- data/lib/coverband/reporters/html_report.rb +36 -0
- data/lib/coverband/reporters/web.rb +16 -13
- data/lib/coverband/utils/file_list.rb +68 -0
- data/lib/coverband/utils/html_formatter.rb +119 -0
- data/lib/coverband/utils/lines_classifier.rb +54 -0
- data/lib/coverband/utils/result.rb +108 -0
- data/lib/coverband/utils/s3_report.rb +2 -4
- data/lib/coverband/utils/source_file.rb +208 -0
- data/lib/coverband/utils/tasks.rb +2 -6
- data/lib/coverband/version.rb +1 -1
- data/public/application.css +799 -0
- data/public/application.js +1708 -0
- data/public/colorbox/border.png +0 -0
- data/public/colorbox/controls.png +0 -0
- data/public/colorbox/loading.gif +0 -0
- data/public/colorbox/loading_background.png +0 -0
- data/public/favicon_green.png +0 -0
- data/public/favicon_red.png +0 -0
- data/public/favicon_yellow.png +0 -0
- data/public/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/public/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/public/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/public/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/public/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/public/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/public/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/public/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/public/images/ui-icons_222222_256x240.png +0 -0
- data/public/images/ui-icons_2e83ff_256x240.png +0 -0
- data/public/images/ui-icons_454545_256x240.png +0 -0
- data/public/images/ui-icons_888888_256x240.png +0 -0
- data/public/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/public/loading.gif +0 -0
- data/public/magnify.png +0 -0
- data/test/unit/full_stack_test.rb +2 -2
- data/test/unit/reports_console_test.rb +1 -1
- data/test/unit/{reports_simple_cov_test.rb → reports_html_test.rb} +4 -7
- data/test/unit/reports_web_test.rb +3 -4
- data/test/unit/utils_s3_report_test.rb +1 -3
- data/views/file_list.erb +45 -0
- data/views/layout.erb +39 -0
- data/views/source_file.erb +23 -0
- metadata +49 -17
- data/lib/coverband/reporters/simple_cov_report.rb +0 -45
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/public/loading.gif
ADDED
Binary file
|
data/public/magnify.png
ADDED
Binary file
|
@@ -34,9 +34,9 @@ class FullStackTest < Test::Unit::TestCase
|
|
34
34
|
expected = [nil, nil, 1, nil, 1, 1, 2, nil, nil]
|
35
35
|
assert_equal expected, Coverband.configuration.store.coverage[@rack_file]
|
36
36
|
|
37
|
-
expected = nil
|
37
|
+
# expected = nil
|
38
38
|
# TODO: read the html to test it matches expectations? or return data as a hash?
|
39
|
-
# actual = Coverband::Reporters::
|
39
|
+
# actual = Coverband::Reporters::HTMLReport.report(Coverband.configuration.store, open_report: false)
|
40
40
|
# assert_equal expected, actual
|
41
41
|
end
|
42
42
|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
require File.expand_path('../test_helper', File.dirname(__FILE__))
|
4
4
|
|
5
|
-
class
|
5
|
+
class ReportHTMLTest < Test::Unit::TestCase
|
6
6
|
BASE_KEY = Coverband::Adapters::RedisStore::BASE_KEY
|
7
7
|
|
8
8
|
def setup
|
@@ -18,14 +18,11 @@ class ReportsSimpleCovTest < Test::Unit::TestCase
|
|
18
18
|
config.s3_bucket = nil
|
19
19
|
config.ignore = ['notsomething.rb']
|
20
20
|
end
|
21
|
-
Coverband.configuration.logger.stubs('info')
|
22
21
|
mock_file_hash
|
23
22
|
@store.send(:save_report, basic_coverage)
|
24
23
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
SimpleCov.stubs(:root)
|
29
|
-
Coverband::Reporters::SimpleCovReport.report(@store, open_report: false)
|
24
|
+
html = Coverband::Reporters::HTMLReport.report(@store,
|
25
|
+
html: true, open_report: false)
|
26
|
+
assert_match 'Generated by', html
|
30
27
|
end
|
31
28
|
end
|
@@ -9,7 +9,7 @@ ENV['RACK_ENV'] = 'test'
|
|
9
9
|
|
10
10
|
if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.2.0')
|
11
11
|
module Coverband
|
12
|
-
class
|
12
|
+
class WebTest < Test::Unit::TestCase
|
13
13
|
include Rack::Test::Methods
|
14
14
|
|
15
15
|
def app
|
@@ -20,7 +20,7 @@ if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.2.0')
|
|
20
20
|
Coverband.configuration.s3_bucket = nil
|
21
21
|
end
|
22
22
|
|
23
|
-
# TODO add tests for all endpoints
|
23
|
+
# TODO: add tests for all endpoints
|
24
24
|
test 'renders index content' do
|
25
25
|
get '/'
|
26
26
|
assert last_response.ok?
|
@@ -28,8 +28,7 @@ if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.2.0')
|
|
28
28
|
end
|
29
29
|
|
30
30
|
test 'renders show content' do
|
31
|
-
Coverband.
|
32
|
-
Coverband::Utils::S3Report.any_instance.expects(:retrieve).returns('content')
|
31
|
+
Coverband::Reporters::HTMLReport.expects(:report).returns('content')
|
33
32
|
get '/show'
|
34
33
|
assert last_response.ok?
|
35
34
|
assert_equal 'content', last_response.body
|
@@ -4,9 +4,7 @@ require 'aws-sdk'
|
|
4
4
|
module Coverband
|
5
5
|
class S3ReportTest < Test::Unit::TestCase
|
6
6
|
def html_version
|
7
|
-
|
8
|
-
rescue StandardError
|
9
|
-
'0.10.1'
|
7
|
+
Coverband::VERSION
|
10
8
|
end
|
11
9
|
|
12
10
|
test 'it writes the coverage report to s3' do
|
data/views/file_list.erb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
<div class="file_list_container" id="<%= title_id %>">
|
2
|
+
<h2>
|
3
|
+
<span class="group_name"><%= title %></span>
|
4
|
+
(<span class="covered_percent"><span class="<%= coverage_css_class(source_files.covered_percent) %>"><%= source_files.covered_percent.round(2) %>%</span></span>
|
5
|
+
covered at
|
6
|
+
<span class="covered_strength">
|
7
|
+
<span class="<%= strength_css_class(source_files.covered_strength) %>">
|
8
|
+
<%= source_files.covered_strength.round(2) %>
|
9
|
+
</span>
|
10
|
+
</span> hits/line)
|
11
|
+
</h2>
|
12
|
+
<a name="<%= title_id %>"></a>
|
13
|
+
<div>
|
14
|
+
<b><%= source_files.length %></b> files in total.
|
15
|
+
<b><%= source_files.lines_of_code %></b> relevant lines.
|
16
|
+
<span class="green"><b><%= source_files.covered_lines %></b> lines covered</span> and
|
17
|
+
<span class="red"><b><%= source_files.missed_lines %></b> lines missed </span>
|
18
|
+
</div>
|
19
|
+
<table class="file_list">
|
20
|
+
<thead>
|
21
|
+
<tr>
|
22
|
+
<th>File</th>
|
23
|
+
<th>% covered</th>
|
24
|
+
<th>Lines</th>
|
25
|
+
<th>Relevant Lines</th>
|
26
|
+
<th>Lines covered</th>
|
27
|
+
<th>Lines missed</th>
|
28
|
+
<th>Avg. Hits / Line</th>
|
29
|
+
</tr>
|
30
|
+
</thead>
|
31
|
+
<tbody>
|
32
|
+
<% source_files.each do |source_file| %>
|
33
|
+
<tr>
|
34
|
+
<td class="strong"><%= link_to_source_file(source_file) %></td>
|
35
|
+
<td class="<%= coverage_css_class(source_file.covered_percent) %> strong"><%= source_file.covered_percent.round(2).to_s %> %</td>
|
36
|
+
<td><%= source_file.lines.count %></td>
|
37
|
+
<td><%= source_file.covered_lines.count + source_file.missed_lines.count %></td>
|
38
|
+
<td><%= source_file.covered_lines.count %></td>
|
39
|
+
<td><%= source_file.missed_lines.count %></td>
|
40
|
+
<td><%= source_file.covered_strength %></td>
|
41
|
+
</tr>
|
42
|
+
<% end %>
|
43
|
+
</tbody>
|
44
|
+
</table>
|
45
|
+
</div>
|
data/views/layout.erb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html xmlns='http://www.w3.org/1999/xhtml'>
|
3
|
+
<head>
|
4
|
+
<title>Code coverage for <%= Coverband::VERSION %></title>
|
5
|
+
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
6
|
+
<script src='<%= assets_path('application.js') %>' type='text/javascript'></script>
|
7
|
+
<link href='<%= assets_path('application.css') %>' media='screen, projection, print' rel='stylesheet' type='text/css'>
|
8
|
+
<link rel="shortcut icon" type="image/png" href="<%= assets_path("favicon_#{coverage_css_class(result.source_files.covered_percent)}.png") %>" />
|
9
|
+
<link rel="icon" type="image/png" href="<%= assets_path('favicon.png') %>" />
|
10
|
+
</head>
|
11
|
+
|
12
|
+
<body>
|
13
|
+
<div id="loading">
|
14
|
+
<img src="<%= assets_path('loading.gif') %>" alt="loading"/>
|
15
|
+
</div>
|
16
|
+
<div id="wrapper" style="display:none;">
|
17
|
+
<div class="timestamp">Generated <%= timeago(Time.now) %></div>
|
18
|
+
<ul class="group_tabs"></ul>
|
19
|
+
|
20
|
+
<div id="content">
|
21
|
+
<%= formatted_file_list("All Files", result.source_files) %>
|
22
|
+
|
23
|
+
<% result.groups.each do |name, files| %>
|
24
|
+
<%= formatted_file_list(name, files) %>
|
25
|
+
<% end %>
|
26
|
+
</div>
|
27
|
+
|
28
|
+
<div id="footer">
|
29
|
+
Generated by <a href="http://github.com/danmayer/coverband">Coverband</a> v<%= Coverband::VERSION %>
|
30
|
+
</div>
|
31
|
+
|
32
|
+
<div class="source_files">
|
33
|
+
<% result.source_files.each do |source_file| %>
|
34
|
+
<%= formatted_source_file(source_file) %>
|
35
|
+
<% end %>
|
36
|
+
</div>
|
37
|
+
</div>
|
38
|
+
</body>
|
39
|
+
</html>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<div class="source_table" id="<%= id source_file %>">
|
2
|
+
<div class="header">
|
3
|
+
<h3><%= shortened_filename source_file %></h3>
|
4
|
+
<h4><span class="<%= coverage_css_class(source_file.covered_percent) %>"><%= source_file.covered_percent.round(2).to_s %> %</span> covered</h4>
|
5
|
+
<div>
|
6
|
+
<b><%= source_file.lines_of_code %></b> relevant lines.
|
7
|
+
<span class="green"><b><%= source_file.covered_lines.count %></b> lines covered</span> and
|
8
|
+
<span class="red"><b><%= source_file.missed_lines.count %></b> lines missed.</span>
|
9
|
+
</div>
|
10
|
+
</div>
|
11
|
+
|
12
|
+
<pre>
|
13
|
+
<ol>
|
14
|
+
<% source_file.lines.each do |line| %>
|
15
|
+
<li class="<%= line.status %>" data-hits="<%= line.coverage ? line.coverage : '' %>" data-linenumber="<%= line.number %>">
|
16
|
+
<% if line.covered? %><span class="hits"><%= line.coverage %></span><% end %>
|
17
|
+
<% if line.skipped? %><span class="hits">skipped</span><% end %>
|
18
|
+
<code class="ruby"><%= CGI.escapeHTML(line.src.chomp) %></code>
|
19
|
+
</li>
|
20
|
+
<% end %>
|
21
|
+
</ol>
|
22
|
+
</pre>
|
23
|
+
</div>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: coverband
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.
|
4
|
+
version: 4.0.1.alpha
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dan Mayer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-12-
|
11
|
+
date: 2018-12-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk
|
@@ -137,7 +137,7 @@ dependencies:
|
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
140
|
+
name: simplecov
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
143
|
- - ">="
|
@@ -151,7 +151,7 @@ dependencies:
|
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0'
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
|
-
name:
|
154
|
+
name: test-unit
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
157
|
- - ">="
|
@@ -165,7 +165,7 @@ dependencies:
|
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: '0'
|
167
167
|
- !ruby/object:Gem::Dependency
|
168
|
-
name:
|
168
|
+
name: classifier-reborn
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
170
170
|
requirements:
|
171
171
|
- - ">="
|
@@ -179,13 +179,13 @@ dependencies:
|
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: '0'
|
181
181
|
- !ruby/object:Gem::Dependency
|
182
|
-
name:
|
182
|
+
name: pry-byebug
|
183
183
|
requirement: !ruby/object:Gem::Requirement
|
184
184
|
requirements:
|
185
185
|
- - ">="
|
186
186
|
- !ruby/object:Gem::Version
|
187
187
|
version: '0'
|
188
|
-
type: :
|
188
|
+
type: :development
|
189
189
|
prerelease: false
|
190
190
|
version_requirements: !ruby/object:Gem::Requirement
|
191
191
|
requirements:
|
@@ -193,19 +193,19 @@ dependencies:
|
|
193
193
|
- !ruby/object:Gem::Version
|
194
194
|
version: '0'
|
195
195
|
- !ruby/object:Gem::Dependency
|
196
|
-
name:
|
196
|
+
name: redis
|
197
197
|
requirement: !ruby/object:Gem::Requirement
|
198
198
|
requirements:
|
199
|
-
- - "
|
199
|
+
- - ">="
|
200
200
|
- !ruby/object:Gem::Version
|
201
|
-
version: 0
|
201
|
+
version: '0'
|
202
202
|
type: :runtime
|
203
203
|
prerelease: false
|
204
204
|
version_requirements: !ruby/object:Gem::Requirement
|
205
205
|
requirements:
|
206
|
-
- - "
|
206
|
+
- - ">="
|
207
207
|
- !ruby/object:Gem::Version
|
208
|
-
version: 0
|
208
|
+
version: '0'
|
209
209
|
description: Rack middleware to help measure production code usage (LOC runtime usage)
|
210
210
|
email:
|
211
211
|
- dan@mayerdan.com
|
@@ -237,12 +237,41 @@ files:
|
|
237
237
|
- lib/coverband/integrations/rack_server_check.rb
|
238
238
|
- lib/coverband/reporters/base.rb
|
239
239
|
- lib/coverband/reporters/console_report.rb
|
240
|
-
- lib/coverband/reporters/
|
240
|
+
- lib/coverband/reporters/html_report.rb
|
241
241
|
- lib/coverband/reporters/web.rb
|
242
|
+
- lib/coverband/utils/file_list.rb
|
243
|
+
- lib/coverband/utils/html_formatter.rb
|
244
|
+
- lib/coverband/utils/lines_classifier.rb
|
242
245
|
- lib/coverband/utils/railtie.rb
|
246
|
+
- lib/coverband/utils/result.rb
|
243
247
|
- lib/coverband/utils/s3_report.rb
|
248
|
+
- lib/coverband/utils/source_file.rb
|
244
249
|
- lib/coverband/utils/tasks.rb
|
245
250
|
- lib/coverband/version.rb
|
251
|
+
- public/application.css
|
252
|
+
- public/application.js
|
253
|
+
- public/colorbox/border.png
|
254
|
+
- public/colorbox/controls.png
|
255
|
+
- public/colorbox/loading.gif
|
256
|
+
- public/colorbox/loading_background.png
|
257
|
+
- public/favicon_green.png
|
258
|
+
- public/favicon_red.png
|
259
|
+
- public/favicon_yellow.png
|
260
|
+
- public/images/ui-bg_flat_0_aaaaaa_40x100.png
|
261
|
+
- public/images/ui-bg_flat_75_ffffff_40x100.png
|
262
|
+
- public/images/ui-bg_glass_55_fbf9ee_1x400.png
|
263
|
+
- public/images/ui-bg_glass_65_ffffff_1x400.png
|
264
|
+
- public/images/ui-bg_glass_75_dadada_1x400.png
|
265
|
+
- public/images/ui-bg_glass_75_e6e6e6_1x400.png
|
266
|
+
- public/images/ui-bg_glass_95_fef1ec_1x400.png
|
267
|
+
- public/images/ui-bg_highlight-soft_75_cccccc_1x100.png
|
268
|
+
- public/images/ui-icons_222222_256x240.png
|
269
|
+
- public/images/ui-icons_2e83ff_256x240.png
|
270
|
+
- public/images/ui-icons_454545_256x240.png
|
271
|
+
- public/images/ui-icons_888888_256x240.png
|
272
|
+
- public/images/ui-icons_cd0a0a_256x240.png
|
273
|
+
- public/loading.gif
|
274
|
+
- public/magnify.png
|
246
275
|
- test/benchmarks/.gitignore
|
247
276
|
- test/benchmarks/benchmark.rake
|
248
277
|
- test/benchmarks/dog.rb
|
@@ -278,9 +307,12 @@ files:
|
|
278
307
|
- test/unit/rails_full_stack_test.rb
|
279
308
|
- test/unit/reports_base_test.rb
|
280
309
|
- test/unit/reports_console_test.rb
|
281
|
-
- test/unit/
|
310
|
+
- test/unit/reports_html_test.rb
|
282
311
|
- test/unit/reports_web_test.rb
|
283
312
|
- test/unit/utils_s3_report_test.rb
|
313
|
+
- views/file_list.erb
|
314
|
+
- views/layout.erb
|
315
|
+
- views/source_file.erb
|
284
316
|
homepage: https://github.com/danmayer/coverband
|
285
317
|
licenses:
|
286
318
|
- MIT
|
@@ -296,9 +328,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
296
328
|
version: '0'
|
297
329
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
298
330
|
requirements:
|
299
|
-
- - "
|
331
|
+
- - ">"
|
300
332
|
- !ruby/object:Gem::Version
|
301
|
-
version:
|
333
|
+
version: 1.3.1
|
302
334
|
requirements: []
|
303
335
|
rubyforge_project:
|
304
336
|
rubygems_version: 2.7.3
|
@@ -341,6 +373,6 @@ test_files:
|
|
341
373
|
- test/unit/rails_full_stack_test.rb
|
342
374
|
- test/unit/reports_base_test.rb
|
343
375
|
- test/unit/reports_console_test.rb
|
344
|
-
- test/unit/
|
376
|
+
- test/unit/reports_html_test.rb
|
345
377
|
- test/unit/reports_web_test.rb
|
346
378
|
- test/unit/utils_s3_report_test.rb
|
@@ -1,45 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Coverband
|
4
|
-
module Reporters
|
5
|
-
class SimpleCovReport < Base
|
6
|
-
def self.report(store, options = {})
|
7
|
-
begin
|
8
|
-
require 'simplecov'
|
9
|
-
rescue StandardError
|
10
|
-
msg = 'coverband requires simplecov to generate a report, when config.reporter=scov'
|
11
|
-
Coverband.configuration.logger.error msg
|
12
|
-
return
|
13
|
-
end
|
14
|
-
|
15
|
-
scov_style_report = super(store, options)
|
16
|
-
open_report = options.fetch(:open_report) { true }
|
17
|
-
|
18
|
-
# set root to show files if user has simplecov profiles
|
19
|
-
# https://github.com/danmayer/coverband/issues/59
|
20
|
-
SimpleCov.root(current_root)
|
21
|
-
|
22
|
-
# add in files never hit in coverband
|
23
|
-
SimpleCov.track_files "#{current_root}/{app,lib,config}/**/*.{rb,haml,erb,slim}"
|
24
|
-
|
25
|
-
# still apply coverband filters
|
26
|
-
report_files = SimpleCov.add_not_loaded_files(scov_style_report)
|
27
|
-
filtered_report_files = {}
|
28
|
-
report_files.each_pair do |file, data|
|
29
|
-
next if Coverband.configuration.ignore.any? { |i| file.match(i) }
|
30
|
-
filtered_report_files[file] = data
|
31
|
-
end
|
32
|
-
|
33
|
-
SimpleCov::Result.new(filtered_report_files).format!
|
34
|
-
|
35
|
-
if open_report
|
36
|
-
`open #{SimpleCov.coverage_dir}/index.html`
|
37
|
-
else
|
38
|
-
Coverband.configuration.logger.info "report is ready and viewable: open #{SimpleCov.coverage_dir}/index.html"
|
39
|
-
end
|
40
|
-
|
41
|
-
Coverband::Utils::S3Report.instance.persist! if Coverband.configuration.s3_bucket
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|