coverband 4.2.0 → 4.2.4
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/.rubocop.yml +29 -10
- data/.travis.yml +16 -8
- data/CODE_OF_CONDUCT.md +76 -0
- data/Gemfile +3 -1
- data/Gemfile.rails4 +1 -0
- data/README.md +108 -59
- data/Rakefile +19 -3
- data/changes.md +85 -10
- data/coverband.gemspec +3 -5
- data/lib/coverband/adapters/base.rb +64 -45
- data/lib/coverband/adapters/file_store.rb +15 -9
- data/lib/coverband/adapters/hash_redis_store.rb +190 -0
- data/lib/coverband/adapters/redis_store.rb +35 -11
- data/lib/coverband/at_exit.rb +2 -11
- data/lib/coverband/collectors/coverage.rb +35 -41
- data/lib/coverband/collectors/delta.rb +34 -28
- data/lib/coverband/collectors/view_tracker.rb +157 -0
- data/lib/coverband/configuration.rb +115 -33
- data/lib/coverband/integrations/background.rb +12 -4
- data/lib/coverband/integrations/{middleware.rb → background_middleware.rb} +2 -6
- data/lib/coverband/integrations/bundler.rb +8 -0
- data/lib/coverband/integrations/report_middleware.rb +15 -0
- data/lib/coverband/integrations/resque.rb +3 -5
- data/lib/coverband/reporters/base.rb +40 -16
- data/lib/coverband/reporters/console_report.rb +1 -0
- data/lib/coverband/reporters/html_report.rb +31 -27
- data/lib/coverband/reporters/web.rb +63 -18
- data/lib/coverband/utils/absolute_file_converter.rb +47 -0
- data/lib/coverband/utils/file_hasher.rb +16 -0
- data/lib/coverband/utils/file_list.rb +16 -5
- data/lib/coverband/utils/html_formatter.rb +45 -8
- data/lib/coverband/utils/lines_classifier.rb +5 -0
- data/lib/coverband/utils/railtie.rb +28 -10
- data/lib/coverband/utils/relative_file_converter.rb +41 -0
- data/lib/coverband/utils/result.rb +6 -39
- data/lib/coverband/utils/results.rb +51 -0
- data/lib/coverband/utils/s3_report.rb +2 -3
- data/lib/coverband/utils/source_file.rb +34 -8
- data/lib/coverband/utils/tasks.rb +10 -10
- data/lib/coverband/version.rb +5 -1
- data/lib/coverband.rb +49 -27
- data/lua/install.sh +15 -0
- data/lua/lib/persist-coverage.lua +28 -0
- data/lua/test/bootstrap.lua +5 -0
- data/lua/test/harness.lua +19 -0
- data/lua/test/redis-call.lua +55 -0
- data/lua/test/test-persist-coverage.lua +132 -0
- data/public/application.css +14 -6
- data/public/application.js +27 -0
- data/test/benchmarks/benchmark.rake +167 -73
- data/test/benchmarks/init_rails.rake +10 -0
- data/test/coverband/adapters/base_test.rb +73 -42
- data/test/coverband/adapters/file_store_test.rb +48 -37
- data/test/coverband/adapters/hash_redis_store_test.rb +195 -0
- data/test/coverband/adapters/redis_store_test.rb +102 -59
- data/test/coverband/at_exit_test.rb +0 -2
- data/test/coverband/collectors/coverage_test.rb +71 -13
- data/test/coverband/collectors/delta_test.rb +36 -6
- data/test/coverband/collectors/view_tracker_test.rb +113 -0
- data/test/coverband/configuration_test.rb +47 -7
- data/test/coverband/coverband_test.rb +14 -2
- data/test/coverband/integrations/background_middleware_test.rb +44 -0
- data/test/coverband/integrations/background_test.rb +11 -3
- data/test/coverband/integrations/report_middleware_test.rb +44 -0
- data/test/coverband/integrations/resque_worker_test.rb +5 -6
- data/test/coverband/integrations/test_resque_job.rb +3 -1
- data/test/coverband/reporters/base_test.rb +5 -81
- data/test/coverband/reporters/console_test.rb +3 -10
- data/test/coverband/reporters/html_test.rb +71 -21
- data/test/coverband/reporters/web_test.rb +0 -10
- data/test/coverband/utils/absolute_file_converter_test.rb +56 -0
- data/test/coverband/utils/file_groups_test.rb +11 -5
- data/test/coverband/utils/file_hasher_test.rb +29 -0
- data/test/coverband/utils/file_list_test.rb +5 -5
- data/test/coverband/utils/html_formatter_test.rb +41 -0
- data/test/coverband/utils/relative_file_converter_test.rb +39 -0
- data/test/coverband/utils/result_test.rb +6 -47
- data/test/coverband/utils/results_test.rb +54 -0
- data/test/coverband/utils/s3_report_test.rb +2 -0
- data/test/coverband/utils/source_file_test.rb +54 -0
- data/test/dog.rb.erb +12 -0
- data/test/forked/rails_full_stack_test.rb +106 -0
- data/test/forked/rails_rake_full_stack_test.rb +58 -0
- data/test/integration/full_stack_test.rb +15 -16
- data/test/rails4_dummy/Rakefile +6 -0
- data/test/rails4_dummy/config/application.rb +8 -9
- data/test/rails4_dummy/config/coverband.rb +3 -11
- data/test/rails4_dummy/config/coverband_missing_redis.rb +3 -0
- data/test/rails5_dummy/Rakefile +6 -0
- data/test/rails5_dummy/config/application.rb +6 -10
- data/test/rails5_dummy/config/coverband.rb +7 -3
- data/test/rails5_dummy/config/coverband_missing_redis.rb +15 -0
- data/test/rails_test_helper.rb +22 -5
- data/test/test_helper.rb +52 -11
- data/test/unique_files.rb +17 -9
- data/views/data.erb +1 -0
- data/views/file_list.erb +13 -12
- data/views/gem_list.erb +10 -1
- data/views/layout.erb +6 -18
- data/views/nav.erb +36 -0
- data/views/source_file.erb +20 -4
- data/views/source_file_loader.erb +1 -1
- data/views/view_tracker.erb +52 -0
- metadata +71 -12
- data/lib/coverband/utils/file_path_helper.rb +0 -57
- data/test/coverband/integrations/middleware_test.rb +0 -96
- data/test/integration/rails_full_stack_test.rb +0 -95
|
@@ -3,49 +3,80 @@
|
|
|
3
3
|
require File.expand_path('../../test_helper', File.dirname(__FILE__))
|
|
4
4
|
|
|
5
5
|
class AdaptersBaseTest < Minitest::Test
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
|
|
7
|
+
def test_abstract_methods
|
|
8
|
+
abstract_methods = %w(clear! clear_file! migrate! size save_coverage coverage)
|
|
9
|
+
abstract_methods.each do |method|
|
|
10
|
+
assert_raises RuntimeError do
|
|
11
|
+
Coverband::Adapters::Base.new.send(method.to_sym)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_size_in_mib
|
|
17
|
+
base = Coverband::Adapters::Base.new
|
|
18
|
+
def base.size
|
|
19
|
+
3.0
|
|
20
|
+
end
|
|
21
|
+
assert_equal "0.00", base.size_in_mib
|
|
11
22
|
end
|
|
12
23
|
|
|
13
|
-
def
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
'/projects/coverband_demo/config/
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
24
|
+
def test_array_add
|
|
25
|
+
original = [5, 7, nil, nil]
|
|
26
|
+
latest = [3, 4, nil, 1]
|
|
27
|
+
assert_equal [8, 11, nil, nil], Coverband::Adapters::Base.new.send(:array_add, latest, original)
|
|
28
|
+
Coverband.configuration.stubs(:use_oneshot_lines_coverage).returns(true)
|
|
29
|
+
assert_equal [1, 1, nil, nil], Coverband::Adapters::Base.new.send(:array_add, latest, original)
|
|
30
|
+
Coverband.configuration.stubs(:use_oneshot_lines_coverage).returns(false)
|
|
31
|
+
Coverband.configuration.stubs(:simulate_oneshot_lines_coverage).returns(true)
|
|
32
|
+
assert_equal [1, 1, nil, nil], Coverband::Adapters::Base.new.send(:array_add, latest, original)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
describe 'Coverband::Adapters::Base using file' do
|
|
36
|
+
def setup
|
|
37
|
+
super
|
|
38
|
+
@test_file_path = '/tmp/coverband_filestore_test_path.json'
|
|
39
|
+
@store = Coverband::Adapters::FileStore.new(@test_file_path)
|
|
40
|
+
mock_file_hash
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def test_covered_merge
|
|
44
|
+
old_time = 1541958097
|
|
45
|
+
current_time = Time.now.to_i
|
|
46
|
+
old_data = {
|
|
47
|
+
'first_updated_at' => old_time,
|
|
48
|
+
'last_updated_at' => current_time,
|
|
49
|
+
'file_hash' => 'abcd',
|
|
50
|
+
'data' => [5, 7, nil]
|
|
51
|
+
}
|
|
52
|
+
old_report = { '/projects/coverband_demo/config/coverband.rb' => old_data,
|
|
53
|
+
'/projects/coverband_demo/config/initializers/assets.rb' => old_data,
|
|
54
|
+
'/projects/coverband_demo/config/initializers/cookies_serializer.rb' => old_data }
|
|
55
|
+
new_report = { '/projects/coverband_demo/config/coverband.rb' => [5, 7, nil],
|
|
56
|
+
'/projects/coverband_demo/config/initializers/filter_logging.rb' => [5, 7, nil],
|
|
57
|
+
'/projects/coverband_demo/config/initializers/wrap_parameters.rb' => [5, 7, nil],
|
|
58
|
+
'/projects/coverband_demo/app/controllers/application_controller.rb' => [5, 7, nil] }
|
|
59
|
+
expected_merge = {
|
|
60
|
+
'first_updated_at' => old_time,
|
|
61
|
+
'last_updated_at' => current_time,
|
|
62
|
+
'file_hash' => 'abcd',
|
|
63
|
+
'data' => [10, 14, nil]
|
|
64
|
+
}
|
|
65
|
+
new_data = {
|
|
66
|
+
'first_updated_at' => current_time,
|
|
67
|
+
'last_updated_at' => current_time,
|
|
68
|
+
'file_hash' => 'abcd',
|
|
69
|
+
'data' => [5, 7, nil]
|
|
70
|
+
}
|
|
71
|
+
expected_result = {
|
|
72
|
+
'/projects/coverband_demo/app/controllers/application_controller.rb' => new_data,
|
|
73
|
+
'/projects/coverband_demo/config/coverband.rb' => expected_merge,
|
|
74
|
+
'/projects/coverband_demo/config/initializers/assets.rb' => old_data,
|
|
75
|
+
'/projects/coverband_demo/config/initializers/cookies_serializer.rb' => old_data,
|
|
76
|
+
'/projects/coverband_demo/config/initializers/filter_logging.rb' => new_data,
|
|
77
|
+
'/projects/coverband_demo/config/initializers/wrap_parameters.rb' => new_data
|
|
78
|
+
}
|
|
79
|
+
assert_equal expected_result, @store.send(:merge_reports, new_report, old_report)
|
|
80
|
+
end
|
|
50
81
|
end
|
|
51
82
|
end
|
|
@@ -3,45 +3,56 @@
|
|
|
3
3
|
require File.expand_path('../../test_helper', File.dirname(__FILE__))
|
|
4
4
|
|
|
5
5
|
class AdaptersFileStoreTest < Minitest::Test
|
|
6
|
-
def setup
|
|
7
|
-
super
|
|
8
|
-
@test_file_path = '/tmp/coverband_filestore_test_path.json'
|
|
9
|
-
File.open(@test_file_path, 'w') { |f| f.write(test_data.to_json) }
|
|
10
|
-
@store = Coverband::Adapters::FileStore.new(@test_file_path)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def test_covered_lines_for_file
|
|
14
|
-
assert_equal @store.covered_lines_for_file('dog.rb')[0], 1
|
|
15
|
-
assert_equal @store.covered_lines_for_file('dog.rb')[1], 2
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def test_covered_lines_when_null
|
|
19
|
-
assert_equal @store.covered_lines_for_file('none.rb'), []
|
|
20
|
-
end
|
|
21
6
|
|
|
22
|
-
def
|
|
23
|
-
|
|
7
|
+
def test_covered_lines_when_no_file
|
|
8
|
+
@store = Coverband::Adapters::FileStore.new('')
|
|
9
|
+
expected = {}
|
|
10
|
+
assert_equal expected, @store.coverage
|
|
24
11
|
end
|
|
25
12
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
13
|
+
describe 'Coverband::Adapters::FileStore with file' do
|
|
14
|
+
def setup
|
|
15
|
+
super
|
|
16
|
+
@test_file_path = '/tmp/coverband_filestore_test_path.json'
|
|
17
|
+
File.open(@test_file_path, 'w') { |f| f.write(test_data.to_json) }
|
|
18
|
+
@store = Coverband::Adapters::FileStore.new(@test_file_path)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test_size
|
|
22
|
+
assert @store.size > 1
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def test_coverage
|
|
26
|
+
assert_equal @store.coverage['dog.rb']['data'][0], 1
|
|
27
|
+
assert_equal @store.coverage['dog.rb']['data'][1], 2
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def test_covered_lines_when_null
|
|
31
|
+
assert_nil @store.coverage['none.rb']
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def test_covered_files
|
|
35
|
+
assert_equal @store.covered_files, ['dog.rb']
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def test_clear
|
|
39
|
+
@store.clear!
|
|
40
|
+
assert_equal false, File.exist?(@test_file_path)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def test_save_report
|
|
44
|
+
mock_file_hash
|
|
45
|
+
@store.send(:save_report, 'cat.rb' => [0, 1])
|
|
46
|
+
assert_equal @store.coverage['cat.rb']['data'][1], 1
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def test_data
|
|
50
|
+
{
|
|
51
|
+
'dog.rb' => { 'data' => [1, 2, nil],
|
|
52
|
+
'file_hash' => 'abcd',
|
|
53
|
+
'first_updated_at' => 1541968729,
|
|
54
|
+
'last_updated_at' => 1541968729 }
|
|
55
|
+
}
|
|
56
|
+
end
|
|
46
57
|
end
|
|
47
58
|
end
|
|
@@ -0,0 +1,195 @@
|
|
|
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 = Coverband::Test.redis
|
|
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
|
+
Coverband.configuration.store = @store
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def mock_time(time = Time.now)
|
|
26
|
+
Time.stubs(:now).returns(time)
|
|
27
|
+
time
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def test_no_coverage
|
|
31
|
+
@store.save_report({})
|
|
32
|
+
assert_equal({}, @store.coverage)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
class UnsupportedRedis
|
|
36
|
+
def info
|
|
37
|
+
{ 'redis_version' => '2.5.0' }
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def test_unsupported_redis
|
|
42
|
+
assert_raises RuntimeError do
|
|
43
|
+
Coverband::Adapters::HashRedisStore.new(UnsupportedRedis.new)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def test_coverage_for_file
|
|
48
|
+
yesterday = DateTime.now.prev_day.to_time
|
|
49
|
+
today = Time.now
|
|
50
|
+
mock_time(yesterday)
|
|
51
|
+
mock_file_hash
|
|
52
|
+
@store.save_report(
|
|
53
|
+
'app_path/dog.rb' => [0, 1, 2]
|
|
54
|
+
)
|
|
55
|
+
assert_equal(
|
|
56
|
+
{
|
|
57
|
+
'first_updated_at' => yesterday.to_i,
|
|
58
|
+
'last_updated_at' => yesterday.to_i,
|
|
59
|
+
'file_hash' => 'abcd',
|
|
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
|
+
'file_hash' => 'abcd',
|
|
73
|
+
'data' => [1, 2, 2]
|
|
74
|
+
},
|
|
75
|
+
@store.coverage['./dog.rb']
|
|
76
|
+
)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def test_ttl_set
|
|
80
|
+
mock_file_hash(hash: 'abcd')
|
|
81
|
+
@store = Coverband::Adapters::HashRedisStore.new(@redis, redis_namespace: 'coverband_test', ttl: 3600, relative_file_converter: MockRelativeFileConverter)
|
|
82
|
+
@store.save_report(
|
|
83
|
+
'app_path/dog.rb' => [0, 1, 2]
|
|
84
|
+
)
|
|
85
|
+
assert_operator(@redis.ttl("#{REDIS_STORAGE_FORMAT_VERSION}.coverband_test.runtime../dog.rb.abcd"), :>, 0)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def test_no_ttl_set
|
|
89
|
+
mock_file_hash(hash: 'abcd')
|
|
90
|
+
@store = Coverband::Adapters::HashRedisStore.new(@redis, redis_namespace: 'coverband_test', ttl: nil, relative_file_converter: MockRelativeFileConverter)
|
|
91
|
+
@store.save_report(
|
|
92
|
+
'app_path/dog.rb' => [0, 1, 2]
|
|
93
|
+
)
|
|
94
|
+
assert_equal(-1, @redis.ttl("#{REDIS_STORAGE_FORMAT_VERSION}.coverband_test.runtime../dog.rb.abcd"))
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def test_coverage_for_multiple_files
|
|
98
|
+
current_time = mock_time
|
|
99
|
+
mock_file_hash
|
|
100
|
+
data = {
|
|
101
|
+
'app_path/dog.rb' => [0, nil, 1, 2],
|
|
102
|
+
'app_path/cat.rb' => [1, 2, 0, 1, 5],
|
|
103
|
+
'app_path/ferrit.rb' => [1, 5, nil, 2, nil]
|
|
104
|
+
}
|
|
105
|
+
@store.save_report(data)
|
|
106
|
+
coverage = @store.coverage
|
|
107
|
+
assert_equal(
|
|
108
|
+
{
|
|
109
|
+
'first_updated_at' => current_time.to_i,
|
|
110
|
+
'last_updated_at' => current_time.to_i,
|
|
111
|
+
'file_hash' => 'abcd',
|
|
112
|
+
'data' => [0, nil, 1, 2]
|
|
113
|
+
}, @store.coverage['./dog.rb']
|
|
114
|
+
)
|
|
115
|
+
assert_equal [1, 2, 0, 1, 5], @store.coverage['./cat.rb']['data']
|
|
116
|
+
assert_equal [1, 5, nil, 2, nil], @store.coverage['./ferrit.rb']['data']
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def test_file_hash_change
|
|
120
|
+
mock_file_hash(hash: 'abc')
|
|
121
|
+
@store.save_report('app_path/dog.rb' => [0, nil, 1, 2])
|
|
122
|
+
coverage = @store.coverage
|
|
123
|
+
assert_equal [0, nil, 1, 2], @store.coverage['./dog.rb']['data']
|
|
124
|
+
@store.instance_eval { @file_hash_cache = {} }
|
|
125
|
+
mock_file_hash(hash: '123')
|
|
126
|
+
assert_nil @store.coverage['./dog.rb']
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def test_type
|
|
130
|
+
mock_file_hash
|
|
131
|
+
@store.type = :eager_loading
|
|
132
|
+
data = {
|
|
133
|
+
'app_path/dog.rb' => [0, nil, 1, 2]
|
|
134
|
+
}
|
|
135
|
+
@store.save_report(data)
|
|
136
|
+
assert_equal 1, @store.coverage.length
|
|
137
|
+
assert_equal [0, nil, 1, 2], @store.coverage['./dog.rb']['data']
|
|
138
|
+
# eager_loading doesn't set last_updated_at
|
|
139
|
+
assert_nil @store.coverage['./dog.rb']['last_updated_at']
|
|
140
|
+
@store.type = Coverband::RUNTIME_TYPE
|
|
141
|
+
data = {
|
|
142
|
+
'app_path/cat.rb' => [1, 2, 0, 1, 5]
|
|
143
|
+
}
|
|
144
|
+
current_time = Time.now.to_i
|
|
145
|
+
@store.save_report(data)
|
|
146
|
+
assert_equal 1, @store.coverage.length
|
|
147
|
+
assert_equal [1, 2, 0, 1, 5], @store.coverage['./cat.rb']['data']
|
|
148
|
+
assert current_time <= @store.coverage['./cat.rb']['last_updated_at']
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def test_coverage_type
|
|
152
|
+
mock_file_hash
|
|
153
|
+
@store.type = :eager_loading
|
|
154
|
+
data = {
|
|
155
|
+
'app_path/dog.rb' => [0, nil, 1, 2]
|
|
156
|
+
}
|
|
157
|
+
@store.save_report(data)
|
|
158
|
+
@store.type = Coverband::RUNTIME_TYPE
|
|
159
|
+
assert_equal [0, nil, 1, 2], @store.coverage(:eager_loading)['./dog.rb']['data']
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def test_clear
|
|
163
|
+
mock_file_hash
|
|
164
|
+
@store.type = Coverband::EAGER_TYPE
|
|
165
|
+
data = {
|
|
166
|
+
'app_path/dog.rb' => [0, nil, 1, 2]
|
|
167
|
+
}
|
|
168
|
+
@store.save_report(data)
|
|
169
|
+
assert_equal 1, @store.coverage.length
|
|
170
|
+
@store.type = Coverband::RUNTIME_TYPE
|
|
171
|
+
data = {
|
|
172
|
+
'app_path/cat.rb' => [1, 2, 0, 1, 5]
|
|
173
|
+
}
|
|
174
|
+
@store.save_report(data)
|
|
175
|
+
assert_equal 1, @store.coverage.length
|
|
176
|
+
@redis.set('random', 'data')
|
|
177
|
+
@store.clear!
|
|
178
|
+
@store.type = Coverband::RUNTIME_TYPE
|
|
179
|
+
assert @store.coverage.empty?
|
|
180
|
+
@store.type = :eager_loading
|
|
181
|
+
assert @store.coverage.empty?
|
|
182
|
+
assert_equal 'data', @redis.get('random')
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
def test_clear_file
|
|
186
|
+
mock_file_hash
|
|
187
|
+
@store.type = :eager_loading
|
|
188
|
+
@store.save_report('app_path/dog.rb' => [0, 1, 1])
|
|
189
|
+
@store.type = Coverband::RUNTIME_TYPE
|
|
190
|
+
@store.save_report('app_path/dog.rb' => [1, 0, 1])
|
|
191
|
+
assert_equal [1, 1, 2], @store.get_coverage_report[:merged]['./dog.rb']['data']
|
|
192
|
+
@store.clear_file!('app_path/dog.rb')
|
|
193
|
+
assert_nil @store.get_coverage_report[:merged]['./dog.rb']
|
|
194
|
+
end
|
|
195
|
+
end
|
|
@@ -2,77 +2,120 @@
|
|
|
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
|
-
|
|
9
|
+
def setup
|
|
10
|
+
super
|
|
11
|
+
@store = Coverband.configuration.store
|
|
12
|
+
@redis = @store.instance_variable_get(:@redis)
|
|
13
|
+
end
|
|
13
14
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
15
|
+
def test_coverage
|
|
16
|
+
mock_file_hash
|
|
17
|
+
expected = basic_coverage
|
|
18
|
+
@store.save_report(expected)
|
|
19
|
+
assert_equal expected.keys, @store.coverage.keys
|
|
20
|
+
@store.coverage.each_pair do |key, data|
|
|
21
|
+
assert_equal expected[key], data['data']
|
|
22
|
+
end
|
|
21
23
|
end
|
|
22
|
-
end
|
|
23
24
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
25
|
+
def test_coverage_increments
|
|
26
|
+
mock_file_hash
|
|
27
|
+
expected = basic_coverage.dup
|
|
28
|
+
@store.save_report(basic_coverage.dup)
|
|
29
|
+
assert_equal expected.keys, @store.coverage.keys
|
|
30
|
+
@store.coverage.each_pair do |key, data|
|
|
31
|
+
assert_equal expected[key], data['data']
|
|
32
|
+
end
|
|
33
|
+
current_time = Time.now.to_i
|
|
34
|
+
@store.save_report(basic_coverage.dup)
|
|
35
|
+
assert_equal [0, 2, 4], @store.coverage['app_path/dog.rb']['data']
|
|
36
|
+
assert current_time <= @store.coverage['app_path/dog.rb']['last_updated_at']
|
|
31
37
|
end
|
|
32
|
-
@store.save_report(basic_coverage.dup)
|
|
33
|
-
assert_equal [0, 2, 4], @store.coverage['app_path/dog.rb']['data']
|
|
34
|
-
end
|
|
35
38
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
@store.coverage.each_pair do |key, data|
|
|
43
|
-
assert_equal expected[key], data['data']
|
|
39
|
+
def test_file_hash_change
|
|
40
|
+
mock_file_hash(hash: 'abc')
|
|
41
|
+
@store.save_report('app_path/dog.rb' => [0, nil, 1, 2])
|
|
42
|
+
assert_equal [0, nil, 1, 2], @store.coverage['app_path/dog.rb']['data']
|
|
43
|
+
mock_file_hash(hash: '123')
|
|
44
|
+
assert_nil @store.coverage['app_path/dog.rb']
|
|
44
45
|
end
|
|
45
46
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
def test_store_coverage_by_type
|
|
48
|
+
mock_file_hash
|
|
49
|
+
expected = basic_coverage
|
|
50
|
+
@store.type = :eager_loading
|
|
51
|
+
@store.save_report(expected)
|
|
52
|
+
assert_equal expected.keys, @store.coverage.keys
|
|
53
|
+
@store.coverage.each_pair do |key, data|
|
|
54
|
+
assert_equal expected[key], data['data']
|
|
55
|
+
end
|
|
56
|
+
@store.type = Coverband::RUNTIME_TYPE
|
|
57
|
+
assert_equal [], @store.coverage.keys
|
|
58
|
+
end
|
|
49
59
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
+
def test_merged_coverage_with_types
|
|
61
|
+
mock_file_hash
|
|
62
|
+
assert_equal Coverband::RUNTIME_TYPE, @store.type
|
|
63
|
+
@store.type = :eager_loading
|
|
64
|
+
@store.save_report('app_path/dog.rb' => [0, 1, 1])
|
|
65
|
+
# eager_loading doesn't set last_updated_at
|
|
66
|
+
assert_nil @store.coverage['app_path/dog.rb']['last_updated_at']
|
|
67
|
+
@store.type = Coverband::RUNTIME_TYPE
|
|
68
|
+
current_time = Time.now.to_i
|
|
69
|
+
@store.save_report('app_path/dog.rb' => [1, 0, 1])
|
|
70
|
+
assert_equal [1, 1, 2], @store.get_coverage_report[:merged]['app_path/dog.rb']['data']
|
|
71
|
+
assert current_time <= @store.coverage['app_path/dog.rb']['last_updated_at']
|
|
72
|
+
assert_equal Coverband::RUNTIME_TYPE, @store.type
|
|
73
|
+
end
|
|
60
74
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
75
|
+
def test_coverage_for_file
|
|
76
|
+
mock_file_hash
|
|
77
|
+
expected = basic_coverage
|
|
78
|
+
@store.save_report(expected)
|
|
79
|
+
assert_equal example_line, @store.coverage['app_path/dog.rb']['data']
|
|
80
|
+
end
|
|
67
81
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
82
|
+
def test_coverage_with_simulate_oneshot_lines_coverage
|
|
83
|
+
Coverband.configuration.stubs(:simulate_oneshot_lines_coverage).returns(true)
|
|
84
|
+
mock_file_hash
|
|
85
|
+
expected = basic_coverage
|
|
86
|
+
@store.save_report(expected)
|
|
87
|
+
assert_equal example_line, @store.get_coverage_report[:runtime]['app_path/dog.rb']['data']
|
|
88
|
+
end
|
|
71
89
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
90
|
+
def test_coverage_when_null
|
|
91
|
+
assert_nil @store.coverage['app_path/dog.rb']
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def test_clear
|
|
95
|
+
@redis.expects(:del).times(3)
|
|
96
|
+
@store.clear!
|
|
97
|
+
end
|
|
76
98
|
|
|
99
|
+
def test_clear_file
|
|
100
|
+
mock_file_hash
|
|
101
|
+
@store.type = :eager_loading
|
|
102
|
+
@store.save_report('app_path/dog.rb' => [0, 1, 1])
|
|
103
|
+
@store.type = Coverband::RUNTIME_TYPE
|
|
104
|
+
@store.save_report('app_path/dog.rb' => [1, 0, 1])
|
|
105
|
+
assert_equal [1, 1, 2], @store.get_coverage_report[:merged]['app_path/dog.rb']['data']
|
|
106
|
+
@store.clear_file!('app_path/dog.rb')
|
|
107
|
+
assert_nil @store.get_coverage_report[:merged]['app_path/dog.rb']
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def test_size
|
|
111
|
+
mock_file_hash
|
|
112
|
+
@store.type = :eager_loading
|
|
113
|
+
@store.save_report('app_path/dog.rb' => [0, 1, 1])
|
|
114
|
+
assert @store.size > 1
|
|
115
|
+
end
|
|
77
116
|
|
|
117
|
+
def test_base_key
|
|
118
|
+
assert @store.send(:base_key).end_with?(Coverband::RUNTIME_TYPE.to_s)
|
|
119
|
+
end
|
|
120
|
+
end
|
|
78
121
|
end
|