coverband 4.2.1 → 4.2.2
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/.travis.yml +2 -9
- data/CODE_OF_CONDUCT.md +76 -0
- data/README.md +32 -28
- data/changes.md +31 -11
- data/coverband.gemspec +0 -5
- data/lib/coverband/adapters/base.rb +8 -13
- data/lib/coverband/adapters/file_store.rb +10 -4
- data/lib/coverband/adapters/hash_redis_store.rb +182 -0
- data/lib/coverband/adapters/redis_store.rb +15 -1
- data/lib/coverband/collectors/coverage.rb +5 -7
- data/lib/coverband/collectors/view_tracker.rb +124 -0
- data/lib/coverband/configuration.rb +21 -1
- data/lib/coverband/integrations/background.rb +2 -1
- data/lib/coverband/reporters/base.rb +4 -5
- data/lib/coverband/reporters/console_report.rb +1 -0
- data/lib/coverband/reporters/web.rb +6 -0
- data/lib/coverband/utils/absolute_file_converter.rb +47 -0
- data/lib/coverband/utils/file_hasher.rb +16 -0
- data/lib/coverband/utils/html_formatter.rb +12 -0
- data/lib/coverband/utils/railtie.rb +15 -3
- data/lib/coverband/utils/relative_file_converter.rb +41 -0
- data/lib/coverband/utils/s3_report.rb +2 -2
- data/lib/coverband/utils/source_file.rb +1 -3
- data/lib/coverband/utils/tasks.rb +1 -0
- data/lib/coverband/version.rb +5 -1
- data/lib/coverband.rb +7 -1
- data/public/application.css +6 -6
- data/test/benchmarks/benchmark.rake +25 -49
- data/test/benchmarks/init_rails.rake +10 -0
- data/test/coverband/adapters/hash_redis_store_test.rb +190 -0
- data/test/coverband/adapters/redis_store_test.rb +90 -88
- data/test/coverband/collectors/coverage_test.rb +6 -2
- data/test/coverband/collectors/view_tracker_test.rb +77 -0
- data/test/coverband/integrations/resque_worker_test.rb +2 -3
- data/test/coverband/reporters/base_test.rb +1 -78
- data/test/coverband/reporters/console_test.rb +1 -4
- data/test/coverband/reporters/html_test.rb +9 -9
- data/test/coverband/utils/absolute_file_converter_test.rb +56 -0
- data/test/coverband/utils/file_hasher_test.rb +29 -0
- data/test/coverband/utils/relative_file_converter_test.rb +39 -0
- data/test/forked/rails_rake_full_stack_test.rb +9 -1
- data/test/integration/full_stack_test.rb +1 -2
- data/test/test_helper.rb +6 -7
- data/test/unique_files.rb +1 -1
- data/views/layout.erb +1 -20
- data/views/nav.erb +35 -0
- data/views/view_tracker.erb +37 -0
- metadata +22 -31
- data/lib/coverband/utils/file_path_helper.rb +0 -68
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'rails'
|
|
4
|
+
require 'coverband'
|
|
5
|
+
|
|
6
|
+
desc 'Initialize rails'
|
|
7
|
+
task 'init_rails' do
|
|
8
|
+
Coverband.configure("./test/rails#{Rails::VERSION::MAJOR}_dummy/config/coverband.rb")
|
|
9
|
+
require "./test/rails#{Rails::VERSION::MAJOR}_dummy/config/environment"
|
|
10
|
+
end
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require File.expand_path('../../test_helper', File.dirname(__FILE__))
|
|
4
|
+
|
|
5
|
+
class HashRedisStoreTest < Minitest::Test
|
|
6
|
+
REDIS_STORAGE_FORMAT_VERSION = Coverband::Adapters::HashRedisStore::REDIS_STORAGE_FORMAT_VERSION
|
|
7
|
+
|
|
8
|
+
class MockRelativeFileConverter
|
|
9
|
+
def self.convert(file)
|
|
10
|
+
file.sub('app_path/', './')
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def setup
|
|
15
|
+
super
|
|
16
|
+
@redis = Redis.new
|
|
17
|
+
# FIXME: remove dependency on configuration and instead pass this in as an argument
|
|
18
|
+
Coverband.configure do |config|
|
|
19
|
+
config.root_paths = ['app_path/']
|
|
20
|
+
end
|
|
21
|
+
@store = Coverband::Adapters::HashRedisStore.new(@redis, redis_namespace: 'coverband_test', relative_file_converter: MockRelativeFileConverter)
|
|
22
|
+
@store.clear!
|
|
23
|
+
Coverband.configuration.store = @store
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def mock_time(time = Time.now)
|
|
27
|
+
Time.stubs(:now).returns(time)
|
|
28
|
+
time
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def test_no_coverage
|
|
32
|
+
@store.save_report({})
|
|
33
|
+
assert_equal({}, @store.coverage)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
class UnsupportedRedis
|
|
37
|
+
def info
|
|
38
|
+
{ 'redis_version' => '2.5.0' }
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def test_unsupported_redis
|
|
43
|
+
assert_raises RuntimeError do
|
|
44
|
+
Coverband::Adapters::HashRedisStore.new(UnsupportedRedis.new)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def test_coverage_for_file
|
|
49
|
+
yesterday = DateTime.now.prev_day.to_time
|
|
50
|
+
today = Time.now
|
|
51
|
+
mock_time(yesterday)
|
|
52
|
+
mock_file_hash
|
|
53
|
+
@store.save_report(
|
|
54
|
+
'app_path/dog.rb' => [0, 1, 2]
|
|
55
|
+
)
|
|
56
|
+
assert_equal(
|
|
57
|
+
{
|
|
58
|
+
'first_updated_at' => yesterday.to_i,
|
|
59
|
+
'last_updated_at' => yesterday.to_i,
|
|
60
|
+
'data' => [0, 1, 2]
|
|
61
|
+
},
|
|
62
|
+
@store.coverage['./dog.rb']
|
|
63
|
+
)
|
|
64
|
+
mock_time(today)
|
|
65
|
+
@store.save_report(
|
|
66
|
+
'app_path/dog.rb' => [1, 1, 0]
|
|
67
|
+
)
|
|
68
|
+
assert_equal(
|
|
69
|
+
{
|
|
70
|
+
'first_updated_at' => yesterday.to_i,
|
|
71
|
+
'last_updated_at' => today.to_i,
|
|
72
|
+
'data' => [1, 2, 2]
|
|
73
|
+
},
|
|
74
|
+
@store.coverage['./dog.rb']
|
|
75
|
+
)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def test_ttl_set
|
|
79
|
+
mock_file_hash(hash: 'abcd')
|
|
80
|
+
@store = Coverband::Adapters::HashRedisStore.new(@redis, redis_namespace: 'coverband_test', ttl: 3600, relative_file_converter: MockRelativeFileConverter)
|
|
81
|
+
@store.save_report(
|
|
82
|
+
'app_path/dog.rb' => [0, 1, 2]
|
|
83
|
+
)
|
|
84
|
+
assert_operator(@redis.ttl("#{REDIS_STORAGE_FORMAT_VERSION}.coverband_test.runtime../dog.rb.abcd"), :>, 0)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def test_no_ttl_set
|
|
88
|
+
mock_file_hash(hash: 'abcd')
|
|
89
|
+
@store = Coverband::Adapters::HashRedisStore.new(@redis, redis_namespace: 'coverband_test', ttl: nil, relative_file_converter: MockRelativeFileConverter)
|
|
90
|
+
@store.save_report(
|
|
91
|
+
'app_path/dog.rb' => [0, 1, 2]
|
|
92
|
+
)
|
|
93
|
+
assert_equal(-1, @redis.ttl("#{REDIS_STORAGE_FORMAT_VERSION}.coverband_test.runtime../dog.rb.abcd"))
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def test_coverage_for_multiple_files
|
|
97
|
+
current_time = mock_time
|
|
98
|
+
mock_file_hash
|
|
99
|
+
data = {
|
|
100
|
+
'app_path/dog.rb' => [0, nil, 1, 2],
|
|
101
|
+
'app_path/cat.rb' => [1, 2, 0, 1, 5],
|
|
102
|
+
'app_path/ferrit.rb' => [1, 5, nil, 2, nil]
|
|
103
|
+
}
|
|
104
|
+
@store.save_report(data)
|
|
105
|
+
coverage = @store.coverage
|
|
106
|
+
assert_equal(
|
|
107
|
+
{
|
|
108
|
+
'first_updated_at' => current_time.to_i,
|
|
109
|
+
'last_updated_at' => current_time.to_i,
|
|
110
|
+
'data' => [0, nil, 1, 2]
|
|
111
|
+
}, @store.coverage['./dog.rb']
|
|
112
|
+
)
|
|
113
|
+
assert_equal [1, 2, 0, 1, 5], @store.coverage['./cat.rb']['data']
|
|
114
|
+
assert_equal [1, 5, nil, 2, nil], @store.coverage['./ferrit.rb']['data']
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def test_file_hash_change
|
|
118
|
+
mock_file_hash(hash: 'abc')
|
|
119
|
+
@store.save_report('app_path/dog.rb' => [0, nil, 1, 2])
|
|
120
|
+
coverage = @store.coverage
|
|
121
|
+
assert_equal [0, nil, 1, 2], @store.coverage['./dog.rb']['data']
|
|
122
|
+
@store.instance_eval { @file_hash_cache = {} }
|
|
123
|
+
mock_file_hash(hash: '123')
|
|
124
|
+
$debug = true
|
|
125
|
+
assert_nil @store.coverage['./dog.rb']
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def test_type
|
|
129
|
+
mock_file_hash
|
|
130
|
+
@store.type = :eager_loading
|
|
131
|
+
data = {
|
|
132
|
+
'app_path/dog.rb' => [0, nil, 1, 2]
|
|
133
|
+
}
|
|
134
|
+
@store.save_report(data)
|
|
135
|
+
assert_equal 1, @store.coverage.length
|
|
136
|
+
assert_equal [0, nil, 1, 2], @store.coverage['./dog.rb']['data']
|
|
137
|
+
@store.type = Coverband::RUNTIME_TYPE
|
|
138
|
+
data = {
|
|
139
|
+
'app_path/cat.rb' => [1, 2, 0, 1, 5]
|
|
140
|
+
}
|
|
141
|
+
@store.save_report(data)
|
|
142
|
+
assert_equal 1, @store.coverage.length
|
|
143
|
+
assert_equal [1, 2, 0, 1, 5], @store.coverage['./cat.rb']['data']
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def test_coverage_type
|
|
147
|
+
mock_file_hash
|
|
148
|
+
@store.type = :eager_loading
|
|
149
|
+
data = {
|
|
150
|
+
'app_path/dog.rb' => [0, nil, 1, 2]
|
|
151
|
+
}
|
|
152
|
+
@store.save_report(data)
|
|
153
|
+
@store.type = Coverband::RUNTIME_TYPE
|
|
154
|
+
assert_equal [0, nil, 1, 2], @store.coverage(:eager_loading)['./dog.rb']['data']
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def test_clear
|
|
158
|
+
mock_file_hash
|
|
159
|
+
@store.type = Coverband::EAGER_TYPE
|
|
160
|
+
data = {
|
|
161
|
+
'app_path/dog.rb' => [0, nil, 1, 2]
|
|
162
|
+
}
|
|
163
|
+
@store.save_report(data)
|
|
164
|
+
assert_equal 1, @store.coverage.length
|
|
165
|
+
@store.type = Coverband::RUNTIME_TYPE
|
|
166
|
+
data = {
|
|
167
|
+
'app_path/cat.rb' => [1, 2, 0, 1, 5]
|
|
168
|
+
}
|
|
169
|
+
@store.save_report(data)
|
|
170
|
+
assert_equal 1, @store.coverage.length
|
|
171
|
+
@redis.set('random', 'data')
|
|
172
|
+
@store.clear!
|
|
173
|
+
@store.type = Coverband::RUNTIME_TYPE
|
|
174
|
+
assert @store.coverage.empty?
|
|
175
|
+
@store.type = :eager_loading
|
|
176
|
+
assert @store.coverage.empty?
|
|
177
|
+
assert_equal 'data', @redis.get('random')
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def test_clear_file
|
|
181
|
+
mock_file_hash
|
|
182
|
+
@store.type = :eager_loading
|
|
183
|
+
@store.save_report('app_path/dog.rb' => [0, 1, 1])
|
|
184
|
+
@store.type = Coverband::RUNTIME_TYPE
|
|
185
|
+
@store.save_report('app_path/dog.rb' => [1, 0, 1])
|
|
186
|
+
assert_equal [1, 1, 2], @store.get_coverage_report[:merged]['./dog.rb']['data']
|
|
187
|
+
@store.clear_file!('app_path/dog.rb')
|
|
188
|
+
assert_nil @store.get_coverage_report[:merged]['./dog.rb']
|
|
189
|
+
end
|
|
190
|
+
end
|
|
@@ -2,108 +2,110 @@
|
|
|
2
2
|
|
|
3
3
|
require File.expand_path('../../test_helper', File.dirname(__FILE__))
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
unless ENV['COVERBAND_HASH_REDIS_STORE']
|
|
6
|
+
class RedisTest < Minitest::Test
|
|
7
|
+
REDIS_STORAGE_FORMAT_VERSION = Coverband::Adapters::RedisStore::REDIS_STORAGE_FORMAT_VERSION
|
|
7
8
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def test_coverage
|
|
18
|
-
mock_file_hash
|
|
19
|
-
expected = basic_coverage
|
|
20
|
-
@store.save_report(expected)
|
|
21
|
-
assert_equal expected.keys, @store.coverage.keys
|
|
22
|
-
@store.coverage.each_pair do |key, data|
|
|
23
|
-
assert_equal expected[key], data['data']
|
|
9
|
+
def setup
|
|
10
|
+
super
|
|
11
|
+
Coverband.configuration.redis_namespace = 'coverband_test'
|
|
12
|
+
@redis = Redis.new
|
|
13
|
+
@store = Coverband::Adapters::RedisStore.new(@redis, redis_namespace: 'coverband_test')
|
|
14
|
+
Coverband.configuration.store = @store
|
|
15
|
+
@store.clear!
|
|
24
16
|
end
|
|
25
|
-
end
|
|
26
17
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
18
|
+
def test_coverage
|
|
19
|
+
mock_file_hash
|
|
20
|
+
expected = basic_coverage
|
|
21
|
+
@store.save_report(expected)
|
|
22
|
+
assert_equal expected.keys, @store.coverage.keys
|
|
23
|
+
@store.coverage.each_pair do |key, data|
|
|
24
|
+
assert_equal expected[key], data['data']
|
|
25
|
+
end
|
|
34
26
|
end
|
|
35
|
-
@store.save_report(basic_coverage.dup)
|
|
36
|
-
assert_equal [0, 2, 4], @store.coverage['app_path/dog.rb']['data']
|
|
37
|
-
end
|
|
38
27
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
28
|
+
def test_coverage_increments
|
|
29
|
+
mock_file_hash
|
|
30
|
+
expected = basic_coverage.dup
|
|
31
|
+
@store.save_report(basic_coverage.dup)
|
|
32
|
+
assert_equal expected.keys, @store.coverage.keys
|
|
33
|
+
@store.coverage.each_pair do |key, data|
|
|
34
|
+
assert_equal expected[key], data['data']
|
|
35
|
+
end
|
|
36
|
+
@store.save_report(basic_coverage.dup)
|
|
37
|
+
assert_equal [0, 2, 4], @store.coverage['app_path/dog.rb']['data']
|
|
47
38
|
end
|
|
48
39
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
40
|
+
def test_store_coverage_by_type
|
|
41
|
+
mock_file_hash
|
|
42
|
+
expected = basic_coverage
|
|
43
|
+
@store.type = :eager_loading
|
|
44
|
+
@store.save_report(expected)
|
|
45
|
+
assert_equal expected.keys, @store.coverage.keys
|
|
46
|
+
@store.coverage.each_pair do |key, data|
|
|
47
|
+
assert_equal expected[key], data['data']
|
|
48
|
+
end
|
|
52
49
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
@store.type = :eager_loading
|
|
57
|
-
@store.save_report('app_path/dog.rb' => [0, 1, 1])
|
|
58
|
-
@store.type = Coverband::RUNTIME_TYPE
|
|
59
|
-
@store.save_report('app_path/dog.rb' => [1, 0, 1])
|
|
60
|
-
assert_equal [1, 1, 2], @store.get_coverage_report[:merged]['app_path/dog.rb']['data']
|
|
61
|
-
assert_equal Coverband::RUNTIME_TYPE, @store.type
|
|
62
|
-
end
|
|
50
|
+
@store.type = Coverband::RUNTIME_TYPE
|
|
51
|
+
assert_equal [], @store.coverage.keys
|
|
52
|
+
end
|
|
63
53
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
54
|
+
def test_merged_coverage_with_types
|
|
55
|
+
mock_file_hash
|
|
56
|
+
assert_equal Coverband::RUNTIME_TYPE, @store.type
|
|
57
|
+
@store.type = :eager_loading
|
|
58
|
+
@store.save_report('app_path/dog.rb' => [0, 1, 1])
|
|
59
|
+
@store.type = Coverband::RUNTIME_TYPE
|
|
60
|
+
@store.save_report('app_path/dog.rb' => [1, 0, 1])
|
|
61
|
+
assert_equal [1, 1, 2], @store.get_coverage_report[:merged]['app_path/dog.rb']['data']
|
|
62
|
+
assert_equal Coverband::RUNTIME_TYPE, @store.type
|
|
63
|
+
end
|
|
70
64
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
end
|
|
65
|
+
def test_coverage_for_file
|
|
66
|
+
mock_file_hash
|
|
67
|
+
expected = basic_coverage
|
|
68
|
+
@store.save_report(expected)
|
|
69
|
+
assert_equal example_line, @store.coverage['app_path/dog.rb']['data']
|
|
70
|
+
end
|
|
78
71
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
72
|
+
def test_coverage_with_simulate_oneshot_lines_coverage
|
|
73
|
+
Coverband.configuration.stubs(:simulate_oneshot_lines_coverage).returns(true)
|
|
74
|
+
mock_file_hash
|
|
75
|
+
expected = basic_coverage
|
|
76
|
+
@store.save_report(expected)
|
|
77
|
+
assert_equal example_line, @store.get_coverage_report[:runtime]['app_path/dog.rb']['data']
|
|
78
|
+
end
|
|
82
79
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
end
|
|
80
|
+
def test_coverage_when_null
|
|
81
|
+
assert_nil @store.coverage['app_path/dog.rb']
|
|
82
|
+
end
|
|
87
83
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
@store.type = Coverband::RUNTIME_TYPE
|
|
93
|
-
@store.save_report('app_path/dog.rb' => [1, 0, 1])
|
|
94
|
-
assert_equal [1, 1, 2], @store.get_coverage_report[:merged]['app_path/dog.rb']['data']
|
|
95
|
-
@store.clear_file!('app_path/dog.rb')
|
|
96
|
-
assert_nil @store.get_coverage_report[:merged]['app_path/dog.rb']
|
|
97
|
-
end
|
|
84
|
+
def test_clear
|
|
85
|
+
@redis.expects(:del).times(3)
|
|
86
|
+
@store.clear!
|
|
87
|
+
end
|
|
98
88
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
89
|
+
def test_clear_file
|
|
90
|
+
mock_file_hash
|
|
91
|
+
@store.type = :eager_loading
|
|
92
|
+
@store.save_report('app_path/dog.rb' => [0, 1, 1])
|
|
93
|
+
@store.type = Coverband::RUNTIME_TYPE
|
|
94
|
+
@store.save_report('app_path/dog.rb' => [1, 0, 1])
|
|
95
|
+
assert_equal [1, 1, 2], @store.get_coverage_report[:merged]['app_path/dog.rb']['data']
|
|
96
|
+
@store.clear_file!('app_path/dog.rb')
|
|
97
|
+
assert_nil @store.get_coverage_report[:merged]['app_path/dog.rb']
|
|
98
|
+
end
|
|
105
99
|
|
|
106
|
-
|
|
107
|
-
|
|
100
|
+
def test_size
|
|
101
|
+
mock_file_hash
|
|
102
|
+
@store.type = :eager_loading
|
|
103
|
+
@store.save_report('app_path/dog.rb' => [0, 1, 1])
|
|
104
|
+
assert @store.size > 1
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def test_base_key
|
|
108
|
+
assert @store.send(:base_key).end_with?(Coverband::RUNTIME_TYPE.to_s)
|
|
109
|
+
end
|
|
108
110
|
end
|
|
109
111
|
end
|
|
@@ -73,7 +73,7 @@ class CollectorsCoverageTest < Minitest::Test
|
|
|
73
73
|
Coverband.configuration.logger = logger
|
|
74
74
|
@coverband.reset_instance
|
|
75
75
|
Coverband::Adapters::RedisStore.any_instance.stubs(:save_report).raises('Oh no')
|
|
76
|
-
logger.expects(:error).
|
|
76
|
+
logger.expects(:error).at_least(3)
|
|
77
77
|
error = assert_raises RuntimeError do
|
|
78
78
|
@coverband.report_coverage
|
|
79
79
|
end
|
|
@@ -87,6 +87,7 @@ class CollectorsCoverageTest < Minitest::Test
|
|
|
87
87
|
|
|
88
88
|
test 'one shot line coverage disabled for ruby >= 2.6' do
|
|
89
89
|
return unless Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.5.0')
|
|
90
|
+
|
|
90
91
|
Coverband::Collectors::Coverage.expects(:ruby_version_greater_than_or_equal_to?).with('2.6.0').returns(true)
|
|
91
92
|
::Coverage.expects(:running?).returns(false)
|
|
92
93
|
::Coverage.expects(:start).with(oneshot_lines: false)
|
|
@@ -95,6 +96,7 @@ class CollectorsCoverageTest < Minitest::Test
|
|
|
95
96
|
|
|
96
97
|
test 'one shot line coverage enabled for ruby >= 2.6' do
|
|
97
98
|
return unless Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.5.0')
|
|
99
|
+
|
|
98
100
|
Coverband.configuration.expects(:use_oneshot_lines_coverage).returns(true)
|
|
99
101
|
Coverband::Collectors::Coverage.expects(:ruby_version_greater_than_or_equal_to?).with('2.6.0').returns(true)
|
|
100
102
|
::Coverage.expects(:running?).returns(false)
|
|
@@ -104,6 +106,7 @@ class CollectorsCoverageTest < Minitest::Test
|
|
|
104
106
|
|
|
105
107
|
test 'one shot line coverage for ruby >= 2.6 when already running' do
|
|
106
108
|
return unless Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.5.0')
|
|
109
|
+
|
|
107
110
|
Coverband::Collectors::Coverage.expects(:ruby_version_greater_than_or_equal_to?).with('2.6.0').returns(true)
|
|
108
111
|
::Coverage.expects(:running?).returns(true)
|
|
109
112
|
::Coverage.expects(:start).never
|
|
@@ -112,10 +115,11 @@ class CollectorsCoverageTest < Minitest::Test
|
|
|
112
115
|
|
|
113
116
|
test 'no one shot line coverage for ruby < 2.6' do
|
|
114
117
|
return unless Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.5.0')
|
|
118
|
+
|
|
115
119
|
Coverband::Collectors::Coverage.expects(:ruby_version_greater_than_or_equal_to?).with('2.6.0').returns(false)
|
|
116
120
|
Coverband::Collectors::Coverage.expects(:ruby_version_greater_than_or_equal_to?).with('2.5.0').returns(true)
|
|
117
121
|
::Coverage.expects(:running?).returns(false)
|
|
118
|
-
::Coverage.expects(:start).with
|
|
122
|
+
::Coverage.expects(:start).with
|
|
119
123
|
Coverband::Collectors::Coverage.send(:new)
|
|
120
124
|
end
|
|
121
125
|
end
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
require File.expand_path('../../test_helper', File.dirname(__FILE__))
|
|
2
|
+
|
|
3
|
+
class ReporterTest < Minitest::Test
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
super
|
|
7
|
+
fake_store.raw_store.del('render_tracker')
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
test "init correctly" do
|
|
11
|
+
Coverband::Collectors::ViewTracker.expects(:supported_version?).returns(true)
|
|
12
|
+
tracker = Coverband::Collectors::ViewTracker.new(:store => "store", :roots => 'dir')
|
|
13
|
+
assert_equal 'dir', tracker.roots.first
|
|
14
|
+
assert_equal 'store', tracker.store
|
|
15
|
+
assert_equal [], tracker.target
|
|
16
|
+
assert_equal [], tracker.logged_views
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
test "track partials" do
|
|
20
|
+
Coverband::Collectors::ViewTracker.expects(:supported_version?).returns(true)
|
|
21
|
+
store = fake_store
|
|
22
|
+
file_path = "#{File.expand_path(Coverband.configuration.root)}/file"
|
|
23
|
+
store.raw_store.expects(:sadd).with('render_tracker', file_path)
|
|
24
|
+
tracker = Coverband::Collectors::ViewTracker.new(store: store, roots: 'dir')
|
|
25
|
+
tracker.track_views('name', 'start', 'finish', 'id', {:identifier => file_path})
|
|
26
|
+
tracker.report_views_tracked
|
|
27
|
+
assert_equal [file_path], tracker.logged_views
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
test "track layouts" do
|
|
31
|
+
Coverband::Collectors::ViewTracker.expects(:supported_version?).returns(true)
|
|
32
|
+
store = fake_store
|
|
33
|
+
file_path = "#{File.expand_path(Coverband.configuration.root)}/layout"
|
|
34
|
+
store.raw_store.expects(:sadd).with('render_tracker', file_path)
|
|
35
|
+
tracker = Coverband::Collectors::ViewTracker.new(store: store, roots: 'dir')
|
|
36
|
+
tracker.track_views('name', 'start', 'finish', 'id', {:layout => file_path})
|
|
37
|
+
tracker.report_views_tracked
|
|
38
|
+
assert_equal [file_path], tracker.logged_views
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
test "report used partials" do
|
|
42
|
+
Coverband::Collectors::ViewTracker.expects(:supported_version?).returns(true)
|
|
43
|
+
store = fake_store
|
|
44
|
+
file_path = "#{File.expand_path(Coverband.configuration.root)}/file"
|
|
45
|
+
tracker = Coverband::Collectors::ViewTracker.new(store: store, roots: 'dir')
|
|
46
|
+
tracker.track_views('name', 'start', 'finish', 'id', {:identifier => file_path})
|
|
47
|
+
tracker.report_views_tracked
|
|
48
|
+
assert_equal [file_path], tracker.used_views
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
test "report unused partials" do
|
|
52
|
+
Coverband::Collectors::ViewTracker.expects(:supported_version?).returns(true)
|
|
53
|
+
store = fake_store
|
|
54
|
+
file_path = "#{File.expand_path(Coverband.configuration.root)}/file"
|
|
55
|
+
target = [file_path, 'not_used']
|
|
56
|
+
tracker = Coverband::Collectors::ViewTracker.new(store: store, roots: 'dir', target: target)
|
|
57
|
+
tracker.track_views('name', 'start', 'finish', 'id', {:identifier => file_path})
|
|
58
|
+
tracker.report_views_tracked
|
|
59
|
+
assert_equal ['not_used'], tracker.unused_views
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
test "reset store" do
|
|
63
|
+
Coverband::Collectors::ViewTracker.expects(:supported_version?).returns(true)
|
|
64
|
+
store = fake_store
|
|
65
|
+
store.raw_store.expects(:del).with('render_tracker')
|
|
66
|
+
tracker = Coverband::Collectors::ViewTracker.new(store: store, roots: 'dir')
|
|
67
|
+
tracker.track_views('name', 'start', 'finish', 'id', {:identifier => 'file'})
|
|
68
|
+
tracker.reset_recordings
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
protected
|
|
72
|
+
|
|
73
|
+
def fake_store
|
|
74
|
+
@fake_store ||= Coverband::Adapters::RedisStore.new(Redis.new, redis_namespace: 'coverband_test')
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
end
|
|
@@ -15,16 +15,15 @@ class ResqueWorkerTest < Minitest::Test
|
|
|
15
15
|
super
|
|
16
16
|
Coverband.configure do |config|
|
|
17
17
|
config.background_reporting_enabled = false
|
|
18
|
-
config.root_paths = ["#{File.expand_path('../', File.dirname(__FILE__))}/"]
|
|
19
18
|
end
|
|
20
19
|
Coverband.configuration.store.instance_variable_set(:@redis_namespace, 'coverband_test')
|
|
21
20
|
Coverband.start
|
|
22
|
-
redis = Coverband.configuration.store.
|
|
21
|
+
redis = Coverband.configuration.store.instance_eval { @redis }
|
|
23
22
|
Resque.redis = redis
|
|
24
23
|
end
|
|
25
24
|
|
|
26
25
|
test 'resque job coverage' do
|
|
27
|
-
relative_job_file = './integrations/test_resque_job.rb'
|
|
26
|
+
relative_job_file = './test/coverband/integrations/test_resque_job.rb'
|
|
28
27
|
resque_job_file = File.expand_path('./test_resque_job.rb', File.dirname(__FILE__))
|
|
29
28
|
require resque_job_file
|
|
30
29
|
|
|
@@ -3,74 +3,6 @@
|
|
|
3
3
|
require File.expand_path('../../test_helper', File.dirname(__FILE__))
|
|
4
4
|
|
|
5
5
|
class ReportsBaseTest < Minitest::Test
|
|
6
|
-
test 'relative_path_to_full fix filename from a key with a swappable path' do
|
|
7
|
-
Coverband.configure do |config|
|
|
8
|
-
config.reporter = 'std_out'
|
|
9
|
-
config.root = '/full/remote_app/path'
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
key = '/app/is/a/path.rb'
|
|
13
|
-
# the code takes config.root expands and adds a '/' for the final path in roots
|
|
14
|
-
roots = ['/app/', '/full/remote_app/path/']
|
|
15
|
-
|
|
16
|
-
expected_path = '/full/remote_app/path/is/a/path.rb'
|
|
17
|
-
File.expects(:exist?).with(key).returns(false)
|
|
18
|
-
File.expects(:exist?).with(expected_path).returns(true)
|
|
19
|
-
assert_equal expected_path, Coverband::Reporters::Base.send(:relative_path_to_full, key, roots)
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
test 'relative_path_to_full fix filename a changing deploy path with quotes' do
|
|
23
|
-
Coverband.configure do |config|
|
|
24
|
-
config.reporter = 'std_out'
|
|
25
|
-
config.root = '/full/remote_app/path'
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
expected_path = '/full/remote_app/path/app/models/user.rb'
|
|
29
|
-
key = '/box/apps/app_name/releases/20140725203539/app/models/user.rb'
|
|
30
|
-
roots = ['/box/apps/app_name/releases/\\d+/', '/full/remote_app/path/']
|
|
31
|
-
File.expects(:exist?).with('/box/apps/app_name/releases/\\d+/app/models/user.rb').returns(false)
|
|
32
|
-
File.expects(:exist?).with(expected_path).returns(true)
|
|
33
|
-
assert_equal expected_path, Coverband::Reporters::Base.send(:relative_path_to_full, key, roots)
|
|
34
|
-
File.expects(:exist?).with('/box/apps/app_name/releases/\\d+/app/models/user.rb').returns(false)
|
|
35
|
-
File.expects(:exist?).with(expected_path).returns(true)
|
|
36
|
-
roots = ['/box/apps/app_name/releases/\d+/', '/full/remote_app/path/']
|
|
37
|
-
assert_equal expected_path, Coverband::Reporters::Base.send(:relative_path_to_full, key, roots)
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
test 'relative_path_to_full fix filename a changing deploy path real world examples' do
|
|
41
|
-
current_app_root = '/var/local/company/company.d/79'
|
|
42
|
-
Coverband.configure do |config|
|
|
43
|
-
config.reporter = 'std_out'
|
|
44
|
-
config.root = current_app_root
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
expected_path = '/var/local/company/company.d/79/app/controllers/dashboard_controller.rb'
|
|
48
|
-
key = '/var/local/company/company.d/78/app/controllers/dashboard_controller.rb'
|
|
49
|
-
|
|
50
|
-
File.expects(:exist?).with('/var/local/company/company.d/[0-9]*/app/controllers/dashboard_controller.rb').returns(false)
|
|
51
|
-
File.expects(:exist?).with(expected_path).returns(true)
|
|
52
|
-
roots = ['/var/local/company/company.d/[0-9]*/', "#{current_app_root}/"]
|
|
53
|
-
assert_equal expected_path, Coverband::Reporters::Base.send(:relative_path_to_full, key, roots)
|
|
54
|
-
File.expects(:exist?).with('/var/local/company/company.d/[0-9]*/app/controllers/dashboard_controller.rb').returns(false)
|
|
55
|
-
File.expects(:exist?).with(expected_path).returns(true)
|
|
56
|
-
roots = ['/var/local/company/company.d/[0-9]*/', "#{current_app_root}/"]
|
|
57
|
-
assert_equal expected_path, Coverband::Reporters::Base.send(:relative_path_to_full, key, roots)
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
test 'relative_path_to_full leave filename from a key with a local path' do
|
|
61
|
-
Coverband.configure do |config|
|
|
62
|
-
config.reporter = 'std_out'
|
|
63
|
-
config.root = '/full/remote_app/path'
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
key = '/full/remote_app/path/is/a/path.rb'
|
|
67
|
-
# the code takes config.root expands and adds a '/' for the final path in roots
|
|
68
|
-
roots = ['/app/', '/full/remote_app/path/']
|
|
69
|
-
|
|
70
|
-
expected_path = '/full/remote_app/path/is/a/path.rb'
|
|
71
|
-
assert_equal expected_path, Coverband::Reporters::Base.send(:relative_path_to_full, key, roots)
|
|
72
|
-
end
|
|
73
|
-
|
|
74
6
|
test '#merge_arrays basic merge preserves order and counts' do
|
|
75
7
|
first = [0, 0, 1, 0, 1]
|
|
76
8
|
second = [nil, 0, 1, 0, 0]
|
|
@@ -139,19 +71,10 @@ class ReportsBaseTest < Minitest::Test
|
|
|
139
71
|
"file_hash"=>"14dc84e940e26cbfb9ac79b43862e762",
|
|
140
72
|
"data"=>[16, 16, 16, nil, 16, 16, nil, nil, 16, nil, 16, 32, 32, nil, 32, 32, 32, 32, 32, 32, 32, nil, nil, 16, nil, 16, 32, 23, 0, 0, 0, 0, nil, nil, nil, nil, 0, 0, nil, nil, 16, 32, 32, 32, nil, nil, nil, nil, nil, 16, 32, nil, nil, 16, 32, nil, nil]}
|
|
141
73
|
}
|
|
142
|
-
@redis = Redis.new
|
|
143
|
-
store = Coverband::Adapters::RedisStore.new(@redis, redis_namespace: 'coverband_test')
|
|
144
|
-
store.clear!
|
|
145
|
-
|
|
146
|
-
Coverband.configure do |config|
|
|
147
|
-
config.reporter = 'std_out'
|
|
148
|
-
config.root = '/base/78/app/'
|
|
149
|
-
config.store = store
|
|
150
|
-
end
|
|
151
|
-
|
|
152
74
|
key = '/base/78/app/app/controllers/dashboard_controller.rb'
|
|
153
75
|
roots = ['/base/[0-9]*/', '/base/78/app/']
|
|
154
76
|
|
|
77
|
+
Coverband.configuration.stubs(:all_root_paths).returns(roots)
|
|
155
78
|
lines_hit = [1, 3, 6]
|
|
156
79
|
store.stubs(:merged_coverage).returns(coverage)
|
|
157
80
|
File.expects(:exist?).at_least_once
|
|
@@ -19,10 +19,7 @@ class HTMLReportTest < Minitest::Test
|
|
|
19
19
|
end
|
|
20
20
|
Coverband.configuration.logger.stubs('info')
|
|
21
21
|
mock_file_hash
|
|
22
|
-
Coverband.
|
|
23
|
-
.expects(:current_root)
|
|
24
|
-
.at_least_once
|
|
25
|
-
.returns('app_path')
|
|
22
|
+
Coverband::Utils::RelativeFileConverter.expects(:convert).with('app_path/dog.rb').returns('./dog.rb')
|
|
26
23
|
@store.send(:save_report, basic_coverage)
|
|
27
24
|
|
|
28
25
|
report = Coverband::Reporters::ConsoleReport.report(@store)[:merged]
|