coverband 1.5.4 → 2.0.0.alpha
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 +3 -0
- data/.travis.yml +3 -0
- data/Gemfile +2 -1
- data/Rakefile +5 -3
- data/coverband.gemspec +27 -23
- data/lib/coverband.rb +10 -14
- data/lib/coverband/adapters/file_store.rb +6 -7
- data/lib/coverband/adapters/memory_cache_store.rb +8 -5
- data/lib/coverband/adapters/redis_store.rb +10 -50
- data/lib/coverband/baseline.rb +5 -5
- data/lib/coverband/collectors/base.rb +140 -0
- data/lib/coverband/collectors/coverage.rb +148 -0
- data/lib/coverband/collectors/trace.rb +100 -0
- data/lib/coverband/configuration.rb +8 -10
- data/lib/coverband/middleware.rb +5 -5
- data/lib/coverband/reporters/base.rb +26 -31
- data/lib/coverband/reporters/console_report.rb +2 -3
- data/lib/coverband/reporters/simple_cov_report.rb +5 -6
- data/lib/coverband/s3_report_writer.rb +7 -8
- data/lib/coverband/s3_web.rb +3 -5
- data/lib/coverband/tasks.rb +23 -26
- data/lib/coverband/version.rb +3 -1
- data/test/benchmarks/benchmark.rake +38 -32
- data/test/benchmarks/dog.rb +3 -3
- data/test/fake_app/basic_rack.rb +4 -2
- data/test/test_helper.rb +17 -11
- data/test/unit/adapters_file_store_test.rb +12 -11
- data/test/unit/adapters_memory_cache_store_test.rb +3 -4
- data/test/unit/adapters_redis_store_test.rb +42 -118
- data/test/unit/baseline_test.rb +17 -20
- data/test/unit/collectors_base_test.rb +96 -0
- data/test/unit/collectors_coverage_test.rb +137 -0
- data/test/unit/collectors_trace_test.rb +96 -0
- data/test/unit/configuration_test.rb +8 -8
- data/test/unit/dog.rb +3 -1
- data/test/unit/middleware_test.rb +70 -61
- data/test/unit/reports_base_test.rb +62 -62
- data/test/unit/reports_console_test.rb +18 -21
- data/test/unit/reports_simple_cov_test.rb +23 -26
- data/test/unit/s3_report_writer_test.rb +6 -8
- data/test/unit/s3_web_test.rb +2 -1
- metadata +45 -25
- data/lib/coverband/base.rb +0 -210
- data/test/unit/base_test.rb +0 -100
@@ -1,37 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require File.expand_path('../test_helper', File.dirname(__FILE__))
|
2
4
|
|
3
5
|
class SimpleCovReportTest < Test::Unit::TestCase
|
4
6
|
BASE_KEY = Coverband::Adapters::RedisStore::BASE_KEY
|
5
7
|
|
6
8
|
def setup
|
7
|
-
@
|
8
|
-
@
|
9
|
+
@redis = Redis.new
|
10
|
+
@redis.flushdb
|
11
|
+
@store = Coverband::Adapters::RedisStore.new(@redis)
|
12
|
+
end
|
13
|
+
|
14
|
+
def example_hash
|
15
|
+
{'1' => '1', '2' => '2'}
|
9
16
|
end
|
10
17
|
|
11
|
-
test
|
18
|
+
test 'report data' do
|
12
19
|
Coverband.configure do |config|
|
13
|
-
config.redis = @
|
20
|
+
config.redis = @redis
|
14
21
|
config.reporter = 'std_out'
|
22
|
+
config.store = @store
|
15
23
|
end
|
16
|
-
|
17
|
-
Coverband::Reporters::ConsoleReport.expects(:current_root).returns('/tmp/root_dir')
|
18
|
-
@fake_redis.expects(:smembers).with(BASE_KEY).returns(fake_coverband_members)
|
19
|
-
|
20
|
-
fake_coverband_members.each do |key|
|
21
|
-
File.expects(:exists?).with(key).returns(true)
|
22
|
-
File.expects(:foreach).with(key).returns(Array.new(4){'LOC'})
|
23
|
-
@fake_redis.expects(:smembers).with("#{BASE_KEY}.#{key}").returns(["1", "3"])
|
24
|
-
end
|
25
|
-
|
26
24
|
Coverband.configuration.logger.stubs('info')
|
25
|
+
Coverband::Reporters::ConsoleReport.expects(:current_root).returns('./test/unit')
|
27
26
|
|
28
|
-
|
29
|
-
|
30
|
-
[1, nil, 1, nil],
|
31
|
-
"/Users/danmayer/projects/hearno/app/models/account.rb"=>[1, nil, 1, nil],
|
32
|
-
"/Users/danmayer/projects/hearno/script/tester.rb"=>[1, nil, 1, nil]}
|
27
|
+
@redis.sadd(BASE_KEY, 'test/unit/dog.rb')
|
28
|
+
@store.send(:store_map, "#{BASE_KEY}.test/unit/dog.rb", example_hash)
|
33
29
|
|
30
|
+
report = Coverband::Reporters::ConsoleReport.report(@store)
|
31
|
+
expected = {"test/unit/dog.rb"=>[1, 2, nil, nil, nil, nil, nil]}
|
34
32
|
assert_equal(expected, report)
|
35
33
|
end
|
36
|
-
|
37
|
-
end
|
34
|
+
end
|
@@ -1,61 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require File.expand_path('../test_helper', File.dirname(__FILE__))
|
2
4
|
|
3
5
|
class ReportsSimpleCovTest < Test::Unit::TestCase
|
4
6
|
BASE_KEY = Coverband::Adapters::RedisStore::BASE_KEY
|
5
7
|
|
6
8
|
def setup
|
7
|
-
@
|
8
|
-
@
|
9
|
+
@redis = Redis.new
|
10
|
+
@redis.flushdb
|
11
|
+
@store = Coverband::Adapters::RedisStore.new(@redis)
|
12
|
+
end
|
13
|
+
|
14
|
+
def example_hash
|
15
|
+
{'1' => '1', '2' => '2'}
|
9
16
|
end
|
10
17
|
|
11
|
-
test
|
18
|
+
test 'generate scov report' do
|
12
19
|
Coverband.configure do |config|
|
13
|
-
config.redis = @
|
20
|
+
config.redis = @redis
|
14
21
|
config.reporter = 'scov'
|
15
22
|
config.s3_bucket = nil
|
16
|
-
config.
|
23
|
+
config.store = @store
|
24
|
+
config.ignore = ['notsomething.rb']
|
17
25
|
end
|
26
|
+
Coverband.configuration.logger.stubs('info')
|
18
27
|
|
19
|
-
|
20
|
-
@
|
28
|
+
@redis.sadd(BASE_KEY, 'test/unit/dog.rb')
|
29
|
+
@store.send(:store_map, "#{BASE_KEY}.test/unit/dog.rb", example_hash)
|
21
30
|
|
22
31
|
SimpleCov.expects(:track_files)
|
23
32
|
SimpleCov.expects(:add_not_loaded_files).returns({})
|
24
33
|
SimpleCov::Result.any_instance.expects(:format!)
|
25
34
|
SimpleCov.stubs(:root)
|
26
35
|
|
27
|
-
fake_coverband_members.each do |key|
|
28
|
-
File.expects(:exists?).with(key).returns(true)
|
29
|
-
File.expects(:foreach).with(key).returns(Array.new(60){'LOC'})
|
30
|
-
@fake_redis.expects(:smembers).with("#{BASE_KEY}.#{key}").returns(["54", "55"])
|
31
|
-
end
|
32
|
-
|
33
|
-
Coverband.configuration.logger.stubs('info')
|
34
|
-
|
35
36
|
Coverband::Reporters::SimpleCovReport.report(@store, open_report: false)
|
36
37
|
end
|
37
38
|
|
38
|
-
test
|
39
|
+
test 'generate scov report with additional data' do
|
39
40
|
Coverband.configure do |config|
|
40
|
-
config.redis = @
|
41
|
+
config.redis = @redis
|
41
42
|
config.reporter = 'scov'
|
42
43
|
config.s3_bucket = nil
|
43
|
-
config.
|
44
|
+
config.store = @store
|
45
|
+
config.ignore = ['notsomething.rb']
|
44
46
|
end
|
45
47
|
|
46
48
|
Coverband::Reporters::SimpleCovReport.expects(:current_root).at_least_once.returns('/tmp/root_dir')
|
47
|
-
@fake_redis.expects(:smembers).with(BASE_KEY).returns(fake_coverband_members)
|
48
49
|
|
50
|
+
@redis.sadd(BASE_KEY, 'test/unit/dog.rb')
|
51
|
+
@store.send(:store_map, "#{BASE_KEY}.test/unit/dog.rb", example_hash)
|
49
52
|
SimpleCov.expects(:track_files)
|
50
|
-
SimpleCov.expects(:add_not_loaded_files).returns(
|
53
|
+
SimpleCov.expects(:add_not_loaded_files).returns('fake_file.rb' => [1])
|
51
54
|
SimpleCov::Result.any_instance.expects(:format!)
|
52
55
|
SimpleCov.stubs(:root)
|
53
56
|
|
54
|
-
fake_coverband_members.each do |key|
|
55
|
-
File.expects(:exists?).with(key).returns(true)
|
56
|
-
File.expects(:foreach).with(key).returns(['a','b','c'])
|
57
|
-
@fake_redis.expects(:smembers).with("#{BASE_KEY}.#{key}").returns(["54", "55"])
|
58
|
-
end
|
59
57
|
|
60
58
|
Coverband.configuration.logger.stubs('info')
|
61
59
|
additional_data = [
|
@@ -64,5 +62,4 @@ class ReportsSimpleCovTest < Test::Unit::TestCase
|
|
64
62
|
|
65
63
|
Coverband::Reporters::SimpleCovReport.report(@store, open_report: false, additional_scov_data: additional_data)
|
66
64
|
end
|
67
|
-
|
68
65
|
end
|
@@ -1,16 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require File.expand_path('../test_helper', File.dirname(__FILE__))
|
2
4
|
require 'aws-sdk'
|
3
5
|
|
4
6
|
module Coverband
|
5
|
-
|
6
7
|
class S3ReportWriterTest < Test::Unit::TestCase
|
7
|
-
|
8
8
|
def html_version
|
9
|
-
|
10
|
-
rescue
|
11
|
-
|
9
|
+
Gem::Specification.find_by_name('simplecov-html').version.version.to_s
|
10
|
+
rescue StandardError
|
11
|
+
'0.10.1'
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
test 'it writes the coverage report to s3' do
|
15
15
|
s3 = mock('s3_resource')
|
16
16
|
bucket = mock('bucket')
|
@@ -22,7 +22,5 @@ module Coverband
|
|
22
22
|
Aws::S3::Resource.expects(:new).returns(s3)
|
23
23
|
S3ReportWriter.new('coverage-bucket').persist!
|
24
24
|
end
|
25
|
-
|
26
25
|
end
|
27
|
-
|
28
26
|
end
|
data/test/unit/s3_web_test.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require File.expand_path('../test_helper', File.dirname(__FILE__))
|
2
4
|
require File.expand_path('../../lib/coverband/s3_web', File.dirname(__FILE__))
|
3
5
|
require 'rack/test'
|
@@ -6,7 +8,6 @@ ENV['RACK_ENV'] = 'test'
|
|
6
8
|
|
7
9
|
module Coverband
|
8
10
|
class S3WebTest < Test::Unit::TestCase
|
9
|
-
|
10
11
|
include Rack::Test::Methods
|
11
12
|
|
12
13
|
def app
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: coverband
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0.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:
|
11
|
+
date: 2018-04-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: aws-sdk
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -25,7 +39,7 @@ dependencies:
|
|
25
39
|
- !ruby/object:Gem::Version
|
26
40
|
version: '1.3'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
42
|
+
name: classifier-reborn
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
30
44
|
requirements:
|
31
45
|
- - ">="
|
@@ -81,7 +95,7 @@ dependencies:
|
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
98
|
+
name: rake
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
101
|
- - ">="
|
@@ -109,7 +123,7 @@ dependencies:
|
|
109
123
|
- !ruby/object:Gem::Version
|
110
124
|
version: '0'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
126
|
+
name: test-unit
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
114
128
|
requirements:
|
115
129
|
- - ">="
|
@@ -123,47 +137,47 @@ dependencies:
|
|
123
137
|
- !ruby/object:Gem::Version
|
124
138
|
version: '0'
|
125
139
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
140
|
+
name: byebug
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
128
142
|
requirements:
|
129
|
-
- - "
|
143
|
+
- - ">="
|
130
144
|
- !ruby/object:Gem::Version
|
131
|
-
version: '
|
145
|
+
version: '0'
|
132
146
|
type: :development
|
133
147
|
prerelease: false
|
134
148
|
version_requirements: !ruby/object:Gem::Requirement
|
135
149
|
requirements:
|
136
|
-
- - "
|
150
|
+
- - ">="
|
137
151
|
- !ruby/object:Gem::Version
|
138
|
-
version: '
|
152
|
+
version: '0'
|
139
153
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
154
|
+
name: json
|
141
155
|
requirement: !ruby/object:Gem::Requirement
|
142
156
|
requirements:
|
143
|
-
- - "
|
157
|
+
- - ">="
|
144
158
|
- !ruby/object:Gem::Version
|
145
|
-
version: 0
|
159
|
+
version: '0'
|
146
160
|
type: :runtime
|
147
161
|
prerelease: false
|
148
162
|
version_requirements: !ruby/object:Gem::Requirement
|
149
163
|
requirements:
|
150
|
-
- - "
|
164
|
+
- - ">="
|
151
165
|
- !ruby/object:Gem::Version
|
152
|
-
version: 0
|
166
|
+
version: '0'
|
153
167
|
- !ruby/object:Gem::Dependency
|
154
|
-
name:
|
168
|
+
name: simplecov
|
155
169
|
requirement: !ruby/object:Gem::Requirement
|
156
170
|
requirements:
|
157
|
-
- - "
|
171
|
+
- - ">"
|
158
172
|
- !ruby/object:Gem::Version
|
159
|
-
version:
|
173
|
+
version: 0.11.1
|
160
174
|
type: :runtime
|
161
175
|
prerelease: false
|
162
176
|
version_requirements: !ruby/object:Gem::Requirement
|
163
177
|
requirements:
|
164
|
-
- - "
|
178
|
+
- - ">"
|
165
179
|
- !ruby/object:Gem::Version
|
166
|
-
version:
|
180
|
+
version: 0.11.1
|
167
181
|
- !ruby/object:Gem::Dependency
|
168
182
|
name: redis
|
169
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -200,8 +214,10 @@ files:
|
|
200
214
|
- lib/coverband/adapters/file_store.rb
|
201
215
|
- lib/coverband/adapters/memory_cache_store.rb
|
202
216
|
- lib/coverband/adapters/redis_store.rb
|
203
|
-
- lib/coverband/base.rb
|
204
217
|
- lib/coverband/baseline.rb
|
218
|
+
- lib/coverband/collectors/base.rb
|
219
|
+
- lib/coverband/collectors/coverage.rb
|
220
|
+
- lib/coverband/collectors/trace.rb
|
205
221
|
- lib/coverband/configuration.rb
|
206
222
|
- lib/coverband/middleware.rb
|
207
223
|
- lib/coverband/reporters/base.rb
|
@@ -219,8 +235,10 @@ files:
|
|
219
235
|
- test/unit/adapters_file_store_test.rb
|
220
236
|
- test/unit/adapters_memory_cache_store_test.rb
|
221
237
|
- test/unit/adapters_redis_store_test.rb
|
222
|
-
- test/unit/base_test.rb
|
223
238
|
- test/unit/baseline_test.rb
|
239
|
+
- test/unit/collectors_base_test.rb
|
240
|
+
- test/unit/collectors_coverage_test.rb
|
241
|
+
- test/unit/collectors_trace_test.rb
|
224
242
|
- test/unit/configuration_test.rb
|
225
243
|
- test/unit/dog.rb
|
226
244
|
- test/unit/middleware_test.rb
|
@@ -244,9 +262,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
244
262
|
version: '0'
|
245
263
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
246
264
|
requirements:
|
247
|
-
- - "
|
265
|
+
- - ">"
|
248
266
|
- !ruby/object:Gem::Version
|
249
|
-
version:
|
267
|
+
version: 1.3.1
|
250
268
|
requirements: []
|
251
269
|
rubyforge_project:
|
252
270
|
rubygems_version: 2.5.1
|
@@ -262,8 +280,10 @@ test_files:
|
|
262
280
|
- test/unit/adapters_file_store_test.rb
|
263
281
|
- test/unit/adapters_memory_cache_store_test.rb
|
264
282
|
- test/unit/adapters_redis_store_test.rb
|
265
|
-
- test/unit/base_test.rb
|
266
283
|
- test/unit/baseline_test.rb
|
284
|
+
- test/unit/collectors_base_test.rb
|
285
|
+
- test/unit/collectors_coverage_test.rb
|
286
|
+
- test/unit/collectors_trace_test.rb
|
267
287
|
- test/unit/configuration_test.rb
|
268
288
|
- test/unit/dog.rb
|
269
289
|
- test/unit/middleware_test.rb
|
data/lib/coverband/base.rb
DELETED
@@ -1,210 +0,0 @@
|
|
1
|
-
require 'singleton'
|
2
|
-
require 'set'
|
3
|
-
|
4
|
-
module Coverband
|
5
|
-
class Base
|
6
|
-
|
7
|
-
def self.instance
|
8
|
-
Thread.current[:coverband_instance] ||= Coverband::Base.new
|
9
|
-
end
|
10
|
-
|
11
|
-
def start
|
12
|
-
@enabled = true
|
13
|
-
record_coverage
|
14
|
-
end
|
15
|
-
|
16
|
-
def stop
|
17
|
-
@enabled = false
|
18
|
-
unset_tracer
|
19
|
-
end
|
20
|
-
|
21
|
-
def sample
|
22
|
-
configure_sampling
|
23
|
-
record_coverage
|
24
|
-
result = yield
|
25
|
-
report_coverage
|
26
|
-
result
|
27
|
-
end
|
28
|
-
|
29
|
-
def save
|
30
|
-
@enabled = true
|
31
|
-
report_coverage
|
32
|
-
@enabled = false
|
33
|
-
end
|
34
|
-
|
35
|
-
def extended?
|
36
|
-
false
|
37
|
-
end
|
38
|
-
|
39
|
-
def reset_instance
|
40
|
-
@project_directory = File.expand_path(Coverband.configuration.root)
|
41
|
-
@enabled = false
|
42
|
-
@disable_on_failure_for = Coverband.configuration.disable_on_failure_for
|
43
|
-
@tracer_set = false
|
44
|
-
@file_line_usage = {}
|
45
|
-
@ignored_files = Set.new
|
46
|
-
@startup_delay = Coverband.configuration.startup_delay
|
47
|
-
@ignore_patterns = Coverband.configuration.ignore + ['internal:prelude', 'schema.rb']
|
48
|
-
@ignore_patterns += ['gems'] unless Coverband.configuration.include_gems
|
49
|
-
@sample_percentage = Coverband.configuration.percentage
|
50
|
-
@store = Coverband.configuration.store
|
51
|
-
@store = Coverband::Adapters::MemoryCacheStore.new(@store) if Coverband.configuration.memory_caching
|
52
|
-
@stats = Coverband.configuration.stats
|
53
|
-
@verbose = Coverband.configuration.verbose
|
54
|
-
@logger = Coverband.configuration.logger
|
55
|
-
@current_thread = Thread.current
|
56
|
-
@trace = create_trace_point
|
57
|
-
self
|
58
|
-
end
|
59
|
-
|
60
|
-
def configure_sampling
|
61
|
-
if @startup_delay!=0 || (rand * 100.0) > @sample_percentage
|
62
|
-
@startup_delay -= 1 if @startup_delay > 0
|
63
|
-
@enabled = false
|
64
|
-
else
|
65
|
-
@enabled = true
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
def record_coverage
|
70
|
-
if @enabled && !failed_recently?
|
71
|
-
set_tracer
|
72
|
-
else
|
73
|
-
unset_tracer
|
74
|
-
end
|
75
|
-
@stats.increment "coverband.request.recorded.#{@enabled}" if @stats
|
76
|
-
rescue RuntimeError => err
|
77
|
-
failed!
|
78
|
-
if @verbose
|
79
|
-
@logger.info "error stating recording coverage"
|
80
|
-
@logger.info "error: #{err.inspect} #{err.message}"
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
def report_coverage
|
85
|
-
unless @enabled
|
86
|
-
@logger.info "coverage disabled" if @verbose
|
87
|
-
return
|
88
|
-
end
|
89
|
-
|
90
|
-
unset_tracer
|
91
|
-
|
92
|
-
if failed_recently?
|
93
|
-
@logger.info "coverage reporting sanding-by because of recent failure" if @verbose
|
94
|
-
return
|
95
|
-
end
|
96
|
-
|
97
|
-
if @verbose
|
98
|
-
@logger.info "coverband file usage: #{file_usage.inspect}"
|
99
|
-
if @verbose=="debug"
|
100
|
-
output_file_line_usage
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
if @store
|
105
|
-
if @stats
|
106
|
-
@before_time = Time.now
|
107
|
-
@stats.count "coverband.files.recorded_files", @file_line_usage.length
|
108
|
-
end
|
109
|
-
@store.save_report(@file_line_usage)
|
110
|
-
if @stats
|
111
|
-
@time_spent = Time.now - @before_time
|
112
|
-
@stats.timing "coverband.files.recorded_time", @time_spent
|
113
|
-
end
|
114
|
-
@file_line_usage.clear
|
115
|
-
elsif @verbose
|
116
|
-
@logger.info "coverage report: "
|
117
|
-
@logger.info @file_line_usage.inspect
|
118
|
-
end
|
119
|
-
rescue RuntimeError => err
|
120
|
-
failed!
|
121
|
-
if @verbose
|
122
|
-
@logger.info "coverage missing"
|
123
|
-
@logger.info "error: #{err.inspect} #{err.message}"
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
protected
|
128
|
-
|
129
|
-
def track_file? file
|
130
|
-
!@ignore_patterns.any?{ |pattern| file.include?(pattern) } && file.start_with?(@project_directory)
|
131
|
-
end
|
132
|
-
|
133
|
-
def set_tracer
|
134
|
-
unless @tracer_set
|
135
|
-
@trace.enable
|
136
|
-
@tracer_set = true
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
def unset_tracer
|
141
|
-
@trace.disable
|
142
|
-
@tracer_set = false
|
143
|
-
end
|
144
|
-
|
145
|
-
def output_file_line_usage
|
146
|
-
@logger.info "coverband debug coverband file:line usage:"
|
147
|
-
@file_line_usage.sort_by {|_key, value| value.length}.each do |pair|
|
148
|
-
file = pair.first
|
149
|
-
lines = pair.last
|
150
|
-
@logger.info "file: #{file} => #{lines.sort_by {|_key, value| value}}"
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
private
|
155
|
-
|
156
|
-
def failed_at_thread_key
|
157
|
-
"__#{self.class.name}__failed_at"
|
158
|
-
end
|
159
|
-
|
160
|
-
def failed_at
|
161
|
-
Thread.current[failed_at_thread_key]
|
162
|
-
end
|
163
|
-
|
164
|
-
def failed_at=(time)
|
165
|
-
Thread.current[failed_at_thread_key] = time
|
166
|
-
end
|
167
|
-
|
168
|
-
def failed!
|
169
|
-
self.failed_at = Time.now
|
170
|
-
end
|
171
|
-
|
172
|
-
def failed_recently?
|
173
|
-
return false unless @disable_on_failure_for && failed_at
|
174
|
-
failed_at + @disable_on_failure_for > Time.now
|
175
|
-
end
|
176
|
-
|
177
|
-
def file_usage
|
178
|
-
hash = {}
|
179
|
-
@file_line_usage.each do |file, lines|
|
180
|
-
hash[file] = lines.values.inject(0, :+)
|
181
|
-
end
|
182
|
-
hash.sort_by {|_key, value| value}
|
183
|
-
end
|
184
|
-
|
185
|
-
def add_file(file, line)
|
186
|
-
@file_line_usage[file] = Hash.new(0) unless @file_line_usage.include?(file)
|
187
|
-
@file_line_usage[file][line] += 1
|
188
|
-
end
|
189
|
-
|
190
|
-
def create_trace_point
|
191
|
-
TracePoint.new(*Coverband.configuration.trace_point_events) do |tp|
|
192
|
-
if Thread.current == @current_thread
|
193
|
-
file = tp.path
|
194
|
-
if !@ignored_files.include?(file)
|
195
|
-
if track_file?(file)
|
196
|
-
add_file(file, tp.lineno)
|
197
|
-
else
|
198
|
-
@ignored_files << file
|
199
|
-
end
|
200
|
-
end
|
201
|
-
end
|
202
|
-
end
|
203
|
-
end
|
204
|
-
|
205
|
-
def initialize
|
206
|
-
reset_instance
|
207
|
-
end
|
208
|
-
|
209
|
-
end
|
210
|
-
end
|