coverband 4.0.1 → 4.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 +5 -5
- data/.gitignore +6 -1
- data/.travis.yml +8 -2
- data/Gemfile +2 -0
- data/Gemfile.rails4 +2 -0
- data/README.md +135 -157
- data/Rakefile +1 -1
- data/changes.md +56 -5
- data/coverband.gemspec +5 -3
- data/lib/coverband/adapters/base.rb +44 -11
- data/lib/coverband/adapters/file_store.rb +8 -0
- data/lib/coverband/adapters/redis_store.rb +65 -8
- data/lib/coverband/at_exit.rb +37 -0
- data/lib/coverband/collectors/coverage.rb +43 -72
- data/lib/coverband/collectors/delta.rb +67 -0
- data/lib/coverband/configuration.rb +71 -2
- data/lib/coverband/integrations/background.rb +9 -10
- data/lib/coverband/integrations/middleware.rb +3 -2
- data/lib/coverband/integrations/rack_server_check.rb +4 -1
- data/lib/coverband/integrations/resque.rb +27 -0
- data/lib/coverband/reporters/base.rb +24 -36
- data/lib/coverband/reporters/html_report.rb +40 -15
- data/lib/coverband/reporters/web.rb +52 -10
- data/lib/coverband/utils/file_groups.rb +53 -0
- data/lib/coverband/utils/file_path_helper.rb +57 -0
- data/lib/coverband/utils/gem_list.rb +31 -0
- data/lib/coverband/utils/html_formatter.rb +50 -8
- data/lib/coverband/utils/railtie.rb +9 -1
- data/lib/coverband/utils/result.rb +16 -19
- data/lib/coverband/utils/results.rb +63 -0
- data/lib/coverband/utils/source_file.rb +23 -1
- data/lib/coverband/utils/tasks.rb +17 -17
- data/lib/coverband/version.rb +1 -1
- data/lib/coverband.rb +32 -2
- data/public/application.css +5 -0
- data/public/application.js +117 -1640
- data/public/dependencies.js +1581 -0
- data/public/favicon.png +0 -0
- data/test/benchmarks/benchmark.rake +36 -1
- data/test/benchmarks/coverage_fork.sh +37 -0
- data/test/{unit/adapters_base_test.rb → coverband/adapters/base_test.rb} +1 -1
- data/test/{unit/adapters_file_store_test.rb → coverband/adapters/file_store_test.rb} +1 -1
- data/test/{unit/adapters_redis_store_test.rb → coverband/adapters/redis_store_test.rb} +28 -11
- data/test/coverband/at_exit_test.rb +13 -0
- data/test/coverband/collectors/coverage_test.rb +73 -0
- data/test/coverband/collectors/delta_test.rb +52 -0
- data/test/coverband/configuration_test.rb +67 -0
- data/test/{unit → coverband}/coverband_test.rb +7 -0
- data/test/coverband/integrations/background_test.rb +31 -0
- data/test/{unit → coverband/integrations}/middleware_test.rb +3 -2
- data/test/{unit/rack_server_checkout_test.rb → coverband/integrations/rack_server_check_test.rb} +1 -1
- data/test/coverband/integrations/resque_worker_test.rb +42 -0
- data/test/coverband/integrations/test_resque_job.rb +7 -0
- data/test/coverband/reporters/base_test.rb +168 -0
- data/test/{unit/reports_console_test.rb → coverband/reporters/console_test.rb} +8 -7
- data/test/coverband/reporters/html_test.rb +45 -0
- data/test/coverband/reporters/web_test.rb +52 -0
- data/test/coverband/utils/file_groups_test.rb +55 -0
- data/test/{unit → coverband}/utils/file_list_test.rb +1 -1
- data/test/coverband/utils/gem_list_test.rb +48 -0
- data/test/{unit → coverband}/utils/source_file_test.rb +1 -1
- data/test/{unit → integration}/full_stack_test.rb +25 -12
- data/test/{unit → integration}/rails_full_stack_test.rb +27 -7
- data/test/rails4_dummy/config/application.rb +1 -1
- data/test/rails4_dummy/config/coverband.rb +4 -1
- data/test/rails4_dummy/tmp/.keep +0 -0
- data/test/rails5_dummy/config/application.rb +1 -1
- data/test/rails5_dummy/config/coverband.rb +3 -1
- data/test/rails5_dummy/tmp/.keep +0 -0
- data/test/rails_test_helper.rb +13 -8
- data/test/test_helper.rb +12 -17
- data/test/unique_files.rb +23 -0
- data/views/file_list.erb +33 -20
- data/views/gem_list.erb +54 -0
- data/views/layout.erb +13 -4
- data/views/settings.erb +35 -0
- data/views/source_file.erb +16 -4
- data/views/source_file_loader.erb +7 -0
- metadata +108 -62
- data/test/unit/background_test.rb +0 -29
- data/test/unit/collectors_coverage_test.rb +0 -48
- data/test/unit/configuration_test.rb +0 -23
- data/test/unit/reports_base_test.rb +0 -109
- data/test/unit/reports_html_test.rb +0 -29
- data/test/unit/reports_web_test.rb +0 -39
- /data/test/{unit → coverband}/utils/lines_classifier_test.rb +0 -0
- /data/test/{unit → coverband}/utils/result_test.rb +0 -0
- /data/test/{unit → coverband}/utils/s3_report_test.rb +0 -0
- /data/test/{unit → coverband}/utils/source_file_line_test.rb +0 -0
- /data/test/{unit/dog.rb → dog.rb} +0 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
####
|
|
4
|
+
# A way to access the various coverage data breakdowns
|
|
5
|
+
####
|
|
6
|
+
module Coverband
|
|
7
|
+
module Utils
|
|
8
|
+
class Results
|
|
9
|
+
attr_accessor :type, :report
|
|
10
|
+
|
|
11
|
+
def initialize(report)
|
|
12
|
+
self.report = report
|
|
13
|
+
self.type = Coverband::MERGED_TYPE
|
|
14
|
+
@results = {}
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def file_with_type(source_file, results_type)
|
|
18
|
+
return unless get_results(results_type)
|
|
19
|
+
|
|
20
|
+
get_results(results_type).source_files.find { |file| file.filename == source_file.filename }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def file_from_path_with_type(full_path, results_type = :merged)
|
|
24
|
+
return unless get_results(results_type)
|
|
25
|
+
|
|
26
|
+
get_results(results_type).source_files.find { |file| file.filename == full_path }
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def method_missing(method, *args)
|
|
30
|
+
if get_results(type).respond_to?(method)
|
|
31
|
+
get_results(type).send(method, *args)
|
|
32
|
+
else
|
|
33
|
+
super
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def respond_to_missing?(method)
|
|
38
|
+
if get_results(type).respond_to?(method)
|
|
39
|
+
true
|
|
40
|
+
else
|
|
41
|
+
false
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
private
|
|
46
|
+
|
|
47
|
+
###
|
|
48
|
+
# This is a first version of lazy loading the results
|
|
49
|
+
# for the full advantage we need to push lazy loading to the file level
|
|
50
|
+
# inside Coverband::Utils::Result
|
|
51
|
+
###
|
|
52
|
+
def get_results(type)
|
|
53
|
+
return nil unless Coverband::ALL_TYPES.include?(type)
|
|
54
|
+
|
|
55
|
+
if @results.key?(type)
|
|
56
|
+
@results[type]
|
|
57
|
+
else
|
|
58
|
+
@results[type] = Coverband::Utils::Result.new(report[type])
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
module Coverband
|
|
11
11
|
module Utils
|
|
12
12
|
class SourceFile
|
|
13
|
+
include Coverband::Utils::FilePathHelper
|
|
13
14
|
# Representation of a single line in a source file including
|
|
14
15
|
# this specific line's source code, line_number and code coverage,
|
|
15
16
|
# with the coverage being either nil (coverage not applicable, e.g. comment
|
|
@@ -133,7 +134,7 @@ module Coverband
|
|
|
133
134
|
|
|
134
135
|
# Warning to identify condition from Issue #56
|
|
135
136
|
def coverage_exceeding_source_warn
|
|
136
|
-
warn "Warning: coverage data
|
|
137
|
+
warn "Warning: coverage data from Coverage [#{coverage.size}] exceeds line count in #{filename} [#{src.size}]"
|
|
137
138
|
end
|
|
138
139
|
|
|
139
140
|
# Access SimpleCov::SourceFile::Line source lines by line number
|
|
@@ -210,6 +211,27 @@ module Coverband
|
|
|
210
211
|
end
|
|
211
212
|
end
|
|
212
213
|
|
|
214
|
+
# a bug that existed in simplecov was not checking that root
|
|
215
|
+
# was at the start of the file name
|
|
216
|
+
# I had previously patched this in my local Rails app
|
|
217
|
+
def short_name
|
|
218
|
+
filename.sub(/^#{Coverband.configuration.root}/, '.')
|
|
219
|
+
.sub(%r{^.*\/gems}, '.')
|
|
220
|
+
.gsub(%r{^\.\/}, '')
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
def relative_path
|
|
224
|
+
full_path_to_relative(filename)
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
def gem?
|
|
228
|
+
filename =~ %r{^.*\/gems\/}
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
def gem_name
|
|
232
|
+
gem? ? short_name.split('/').first : nil
|
|
233
|
+
end
|
|
234
|
+
|
|
213
235
|
private
|
|
214
236
|
|
|
215
237
|
# ruby 1.9 could use Float#round(places) instead
|
|
@@ -3,27 +3,17 @@
|
|
|
3
3
|
namespace :coverband do
|
|
4
4
|
Coverband.configure
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
# You might want to override them and clear the filters.
|
|
9
|
-
# Or run the task `coverage_no_filters` below.
|
|
10
|
-
###
|
|
11
|
-
desc 'report runtime Coverband code coverage'
|
|
12
|
-
task coverage: :environment do
|
|
13
|
-
if Coverband.configuration.reporter == 'scov'
|
|
14
|
-
Coverband::Reporters::HTMLReport.report(Coverband.configuration.store)
|
|
15
|
-
else
|
|
16
|
-
Coverband::Reporters::ConsoleReport.report(Coverband.configuration.store)
|
|
17
|
-
end
|
|
6
|
+
def environment
|
|
7
|
+
Rake.application['environment'].invoke if Rake::Task.task_defined?('environment')
|
|
18
8
|
end
|
|
19
9
|
|
|
20
|
-
desc 'report runtime
|
|
21
|
-
task
|
|
10
|
+
desc 'report runtime Coverband code coverage'
|
|
11
|
+
task :coverage do
|
|
12
|
+
environment
|
|
22
13
|
if Coverband.configuration.reporter == 'scov'
|
|
23
|
-
clear_simplecov_filters
|
|
24
14
|
Coverband::Reporters::HTMLReport.report(Coverband.configuration.store)
|
|
25
15
|
else
|
|
26
|
-
|
|
16
|
+
Coverband::Reporters::ConsoleReport.report(Coverband.configuration.store)
|
|
27
17
|
end
|
|
28
18
|
end
|
|
29
19
|
|
|
@@ -31,7 +21,17 @@ namespace :coverband do
|
|
|
31
21
|
# clear data helpful for development or after configuration issues
|
|
32
22
|
###
|
|
33
23
|
desc 'reset Coverband coverage data, helpful for development, debugging, etc'
|
|
34
|
-
task clear
|
|
24
|
+
task :clear do
|
|
25
|
+
environment
|
|
35
26
|
Coverband.configuration.store.clear!
|
|
36
27
|
end
|
|
28
|
+
|
|
29
|
+
###
|
|
30
|
+
# clear data helpful for development or after configuration issues
|
|
31
|
+
###
|
|
32
|
+
desc 'upgrade previous Coverband datastore to latest format'
|
|
33
|
+
task :migrate do
|
|
34
|
+
environment
|
|
35
|
+
Coverband.configuration.store.migrate!
|
|
36
|
+
end
|
|
37
37
|
end
|
data/lib/coverband/version.rb
CHANGED
data/lib/coverband.rb
CHANGED
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
require 'logger'
|
|
4
4
|
require 'json'
|
|
5
5
|
require 'redis'
|
|
6
|
-
|
|
7
6
|
require 'coverband/version'
|
|
7
|
+
require 'coverband/at_exit'
|
|
8
8
|
require 'coverband/configuration'
|
|
9
|
+
require 'coverband/utils/file_path_helper'
|
|
9
10
|
require 'coverband/adapters/base'
|
|
10
11
|
require 'coverband/adapters/redis_store'
|
|
11
12
|
require 'coverband/adapters/file_store'
|
|
@@ -13,9 +14,11 @@ require 'coverband/utils/s3_report'
|
|
|
13
14
|
require 'coverband/utils/html_formatter'
|
|
14
15
|
require 'coverband/utils/result'
|
|
15
16
|
require 'coverband/utils/file_list'
|
|
17
|
+
require 'coverband/utils/gem_list'
|
|
16
18
|
require 'coverband/utils/source_file'
|
|
19
|
+
require 'coverband/utils/file_groups'
|
|
17
20
|
require 'coverband/utils/lines_classifier'
|
|
18
|
-
require 'coverband/utils/
|
|
21
|
+
require 'coverband/utils/results'
|
|
19
22
|
require 'coverband/collectors/coverage'
|
|
20
23
|
require 'coverband/reporters/base'
|
|
21
24
|
require 'coverband/reporters/html_report'
|
|
@@ -28,6 +31,11 @@ require 'coverband/integrations/background'
|
|
|
28
31
|
|
|
29
32
|
module Coverband
|
|
30
33
|
CONFIG_FILE = './config/coverband.rb'
|
|
34
|
+
RUNTIME_TYPE = nil
|
|
35
|
+
EAGER_TYPE = :eager_loading
|
|
36
|
+
MERGED_TYPE = :merged
|
|
37
|
+
TYPES = [RUNTIME_TYPE, EAGER_TYPE]
|
|
38
|
+
ALL_TYPES = TYPES + [:merged]
|
|
31
39
|
|
|
32
40
|
class << self
|
|
33
41
|
attr_accessor :configuration_data
|
|
@@ -43,6 +51,11 @@ module Coverband
|
|
|
43
51
|
else
|
|
44
52
|
configuration.logger&.debug('using default configuration')
|
|
45
53
|
end
|
|
54
|
+
coverage.reset_instance
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def self.report_coverage(force_report = false)
|
|
58
|
+
Coverband::Collectors::Coverage.instance.report_coverage(force_report)
|
|
46
59
|
end
|
|
47
60
|
|
|
48
61
|
def self.configuration
|
|
@@ -51,13 +64,30 @@ module Coverband
|
|
|
51
64
|
|
|
52
65
|
def self.start
|
|
53
66
|
Coverband::Collectors::Coverage.instance
|
|
67
|
+
# TODO Railtie sets up at_exit after forks, via middleware, perhaps this hsould be
|
|
68
|
+
# added if not rails or if rails but not rackserverrunning
|
|
69
|
+
AtExit.register
|
|
54
70
|
Background.start if configuration.background_reporting_enabled && !RackServerCheck.running?
|
|
55
71
|
end
|
|
56
72
|
|
|
73
|
+
def self.eager_loading_coverage!
|
|
74
|
+
coverage.eager_loading!
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def self.runtime_coverage!
|
|
78
|
+
coverage.runtime!
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def self.coverage
|
|
82
|
+
Coverband::Collectors::Coverage.instance
|
|
83
|
+
end
|
|
84
|
+
|
|
57
85
|
unless ENV['COVERBAND_DISABLE_AUTO_START']
|
|
58
86
|
# Coverband should be setup as early as possible
|
|
59
87
|
# to capture usage of things loaded by initializers or other Rails engines
|
|
60
88
|
configure
|
|
61
89
|
start
|
|
90
|
+
require 'coverband/utils/railtie' if defined? ::Rails::Railtie
|
|
91
|
+
require 'coverband/integrations/resque' if defined? Resque
|
|
62
92
|
end
|
|
63
93
|
end
|