coverband 4.2.0 → 4.2.1
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 -9
- data/.travis.yml +10 -1
- data/Gemfile +3 -1
- data/Gemfile.rails4 +1 -0
- data/README.md +40 -15
- data/Rakefile +14 -3
- data/changes.md +47 -12
- data/coverband.gemspec +3 -1
- data/lib/coverband/adapters/base.rb +60 -36
- data/lib/coverband/adapters/file_store.rb +8 -8
- data/lib/coverband/adapters/redis_store.rb +18 -10
- data/lib/coverband/at_exit.rb +2 -11
- data/lib/coverband/collectors/coverage.rb +32 -36
- data/lib/coverband/collectors/delta.rb +34 -28
- data/lib/coverband/configuration.rb +76 -32
- data/lib/coverband/integrations/background.rb +8 -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 +39 -14
- data/lib/coverband/reporters/html_report.rb +21 -27
- data/lib/coverband/reporters/web.rb +13 -21
- data/lib/coverband/utils/file_list.rb +16 -5
- data/lib/coverband/utils/file_path_helper.rb +14 -3
- data/lib/coverband/utils/html_formatter.rb +25 -8
- data/lib/coverband/utils/lines_classifier.rb +5 -0
- data/lib/coverband/utils/railtie.rb +11 -12
- data/lib/coverband/utils/result.rb +1 -37
- data/lib/coverband/utils/results.rb +51 -0
- data/lib/coverband/utils/source_file.rb +31 -6
- data/lib/coverband/utils/tasks.rb +9 -10
- data/lib/coverband/version.rb +1 -1
- data/lib/coverband.rb +32 -21
- data/public/application.js +27 -0
- data/test/benchmarks/benchmark.rake +144 -26
- data/test/coverband/adapters/base_test.rb +73 -42
- data/test/coverband/adapters/file_store_test.rb +48 -37
- data/test/coverband/adapters/redis_store_test.rb +41 -10
- data/test/coverband/at_exit_test.rb +0 -2
- data/test/coverband/collectors/coverage_test.rb +57 -9
- data/test/coverband/collectors/delta_test.rb +36 -6
- 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 +1 -3
- data/test/coverband/integrations/report_middleware_test.rb +44 -0
- data/test/coverband/integrations/resque_worker_test.rb +4 -3
- data/test/coverband/integrations/test_resque_job.rb +3 -1
- data/test/coverband/reporters/base_test.rb +4 -4
- data/test/coverband/reporters/console_test.rb +1 -2
- data/test/coverband/reporters/html_test.rb +58 -19
- data/test/coverband/reporters/web_test.rb +0 -10
- data/test/coverband/utils/file_groups_test.rb +11 -5
- data/test/coverband/utils/file_list_test.rb +5 -5
- data/test/coverband/utils/html_formatter_test.rb +43 -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 +50 -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 +40 -0
- data/test/integration/full_stack_test.rb +17 -15
- data/test/rails4_dummy/Rakefile +6 -0
- data/test/rails4_dummy/config/application.rb +8 -9
- data/test/rails4_dummy/config/coverband.rb +5 -3
- data/test/rails5_dummy/Rakefile +6 -0
- data/test/rails5_dummy/config/application.rb +6 -10
- data/test/rails5_dummy/config/coverband.rb +4 -2
- data/test/rails_test_helper.rb +22 -5
- data/test/test_helper.rb +42 -4
- data/test/unique_files.rb +17 -9
- data/views/file_list.erb +2 -2
- data/views/gem_list.erb +10 -1
- data/views/layout.erb +10 -3
- data/views/source_file.erb +13 -4
- data/views/source_file_loader.erb +1 -1
- metadata +52 -9
- 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
|
|
@@ -7,8 +7,11 @@ class RedisTest < Minitest::Test
|
|
|
7
7
|
|
|
8
8
|
def setup
|
|
9
9
|
super
|
|
10
|
+
Coverband.configuration.redis_namespace = 'coverband_test'
|
|
10
11
|
@redis = Redis.new
|
|
11
|
-
@store = Coverband::Adapters::RedisStore.new(@redis)
|
|
12
|
+
@store = Coverband::Adapters::RedisStore.new(@redis, redis_namespace: 'coverband_test')
|
|
13
|
+
Coverband.configuration.store = @store
|
|
14
|
+
@store.clear!
|
|
12
15
|
end
|
|
13
16
|
|
|
14
17
|
def test_coverage
|
|
@@ -43,36 +46,64 @@ class RedisTest < Minitest::Test
|
|
|
43
46
|
assert_equal expected[key], data['data']
|
|
44
47
|
end
|
|
45
48
|
|
|
46
|
-
@store.type =
|
|
49
|
+
@store.type = Coverband::RUNTIME_TYPE
|
|
47
50
|
assert_equal [], @store.coverage.keys
|
|
48
51
|
end
|
|
49
52
|
|
|
50
53
|
def test_merged_coverage_with_types
|
|
51
54
|
mock_file_hash
|
|
52
|
-
|
|
55
|
+
assert_equal Coverband::RUNTIME_TYPE, @store.type
|
|
53
56
|
@store.type = :eager_loading
|
|
54
57
|
@store.save_report('app_path/dog.rb' => [0, 1, 1])
|
|
55
|
-
@store.type =
|
|
58
|
+
@store.type = Coverband::RUNTIME_TYPE
|
|
56
59
|
@store.save_report('app_path/dog.rb' => [1, 0, 1])
|
|
57
60
|
assert_equal [1, 1, 2], @store.get_coverage_report[:merged]['app_path/dog.rb']['data']
|
|
58
|
-
|
|
61
|
+
assert_equal Coverband::RUNTIME_TYPE, @store.type
|
|
59
62
|
end
|
|
60
63
|
|
|
61
|
-
def
|
|
64
|
+
def test_coverage_for_file
|
|
62
65
|
mock_file_hash
|
|
63
66
|
expected = basic_coverage
|
|
64
67
|
@store.save_report(expected)
|
|
65
|
-
assert_equal example_line, @store.
|
|
68
|
+
assert_equal example_line, @store.coverage['app_path/dog.rb']['data']
|
|
66
69
|
end
|
|
67
70
|
|
|
68
|
-
def
|
|
69
|
-
|
|
71
|
+
def test_coverage_with_simulate_oneshot_lines_coverage
|
|
72
|
+
Coverband.configuration.stubs(:simulate_oneshot_lines_coverage).returns(true)
|
|
73
|
+
mock_file_hash
|
|
74
|
+
expected = basic_coverage
|
|
75
|
+
@store.save_report(expected)
|
|
76
|
+
assert_equal example_line, @store.get_coverage_report[:runtime]['app_path/dog.rb']['data']
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def test_coverage_when_null
|
|
80
|
+
assert_nil @store.coverage['app_path/dog.rb']
|
|
70
81
|
end
|
|
71
82
|
|
|
72
83
|
def test_clear
|
|
73
|
-
@redis.expects(:del).
|
|
84
|
+
@redis.expects(:del).times(3)
|
|
74
85
|
@store.clear!
|
|
75
86
|
end
|
|
76
87
|
|
|
88
|
+
def test_clear_file
|
|
89
|
+
mock_file_hash
|
|
90
|
+
@store.type = :eager_loading
|
|
91
|
+
@store.save_report('app_path/dog.rb' => [0, 1, 1])
|
|
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
|
|
98
|
+
|
|
99
|
+
def test_size
|
|
100
|
+
mock_file_hash
|
|
101
|
+
@store.type = :eager_loading
|
|
102
|
+
@store.save_report('app_path/dog.rb' => [0, 1, 1])
|
|
103
|
+
assert @store.size > 1
|
|
104
|
+
end
|
|
77
105
|
|
|
106
|
+
def test_base_key
|
|
107
|
+
assert @store.send(:base_key).end_with?(Coverband::RUNTIME_TYPE.to_s)
|
|
108
|
+
end
|
|
78
109
|
end
|
|
@@ -8,11 +8,11 @@ class CollectorsCoverageTest < Minitest::Test
|
|
|
8
8
|
def setup
|
|
9
9
|
super
|
|
10
10
|
Coverband.configure do |config|
|
|
11
|
-
config.store = Coverband::Adapters::RedisStore.new(Redis.new)
|
|
11
|
+
config.store = Coverband::Adapters::RedisStore.new(Redis.new, redis_namespace: 'coverband_test')
|
|
12
12
|
end
|
|
13
13
|
@coverband = Coverband::Collectors::Coverage.instance.reset_instance
|
|
14
14
|
# preload first coverage hit
|
|
15
|
-
@coverband.report_coverage
|
|
15
|
+
@coverband.report_coverage
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
def teardown
|
|
@@ -24,17 +24,31 @@ class CollectorsCoverageTest < Minitest::Test
|
|
|
24
24
|
|
|
25
25
|
test 'Dog class coverage' do
|
|
26
26
|
file = require_unique_file
|
|
27
|
-
coverband.report_coverage
|
|
27
|
+
coverband.report_coverage
|
|
28
28
|
coverage = Coverband.configuration.store.coverage
|
|
29
|
-
assert_equal(coverage[file][
|
|
29
|
+
assert_equal(coverage[file]['data'], [nil, nil, 1, 1, 0, nil, nil])
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
test 'Dog method and class coverage' do
|
|
33
33
|
load File.expand_path('../../dog.rb', File.dirname(__FILE__))
|
|
34
34
|
Dog.new.bark
|
|
35
|
-
coverband.report_coverage
|
|
35
|
+
coverband.report_coverage
|
|
36
36
|
coverage = Coverband.configuration.store.coverage
|
|
37
|
-
assert_equal(coverage[
|
|
37
|
+
assert_equal(coverage['./test/dog.rb']['data'], [nil, nil, 1, 1, 1, nil, nil])
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
test 'Dog eager load coverage' do
|
|
41
|
+
store = Coverband.configuration.store
|
|
42
|
+
assert_equal Coverband::RUNTIME_TYPE, store.type
|
|
43
|
+
file = coverband.eager_loading do
|
|
44
|
+
require_unique_file
|
|
45
|
+
end
|
|
46
|
+
coverage = Coverband.configuration.store.coverage[file]
|
|
47
|
+
assert_nil coverage, 'No runtime coverage'
|
|
48
|
+
coverband.eager_loading!
|
|
49
|
+
coverage = Coverband.configuration.store.coverage[file]
|
|
50
|
+
refute_nil coverage, 'Eager load coverage is present'
|
|
51
|
+
assert_equal(coverage['data'], [nil, nil, 1, 1, 0, nil, nil])
|
|
38
52
|
end
|
|
39
53
|
|
|
40
54
|
test 'gets coverage instance' do
|
|
@@ -46,8 +60,8 @@ class CollectorsCoverageTest < Minitest::Test
|
|
|
46
60
|
end
|
|
47
61
|
|
|
48
62
|
test 'report_coverage raises errors in tests' do
|
|
63
|
+
Coverband::Adapters::RedisStore.any_instance.stubs(:save_report).raises('Oh no')
|
|
49
64
|
@coverband.reset_instance
|
|
50
|
-
@coverband.expects(:ready_to_report?).raises('Oh no')
|
|
51
65
|
assert_raises RuntimeError do
|
|
52
66
|
@coverband.report_coverage
|
|
53
67
|
end
|
|
@@ -55,10 +69,10 @@ class CollectorsCoverageTest < Minitest::Test
|
|
|
55
69
|
|
|
56
70
|
test 'report_coverage raises errors in tests with verbose enabled' do
|
|
57
71
|
Coverband.configuration.verbose = true
|
|
58
|
-
logger = mock
|
|
72
|
+
logger = mock
|
|
59
73
|
Coverband.configuration.logger = logger
|
|
60
74
|
@coverband.reset_instance
|
|
61
|
-
|
|
75
|
+
Coverband::Adapters::RedisStore.any_instance.stubs(:save_report).raises('Oh no')
|
|
62
76
|
logger.expects(:error).times(3)
|
|
63
77
|
error = assert_raises RuntimeError do
|
|
64
78
|
@coverband.report_coverage
|
|
@@ -70,4 +84,38 @@ class CollectorsCoverageTest < Minitest::Test
|
|
|
70
84
|
heroku_build_file = '/tmp/build_81feca8c72366e4edf020dc6f1937485/config/initializers/assets.rb'
|
|
71
85
|
assert_equal false, @coverband.send(:track_file?, heroku_build_file)
|
|
72
86
|
end
|
|
87
|
+
|
|
88
|
+
test 'one shot line coverage disabled for ruby >= 2.6' do
|
|
89
|
+
return unless Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.5.0')
|
|
90
|
+
Coverband::Collectors::Coverage.expects(:ruby_version_greater_than_or_equal_to?).with('2.6.0').returns(true)
|
|
91
|
+
::Coverage.expects(:running?).returns(false)
|
|
92
|
+
::Coverage.expects(:start).with(oneshot_lines: false)
|
|
93
|
+
Coverband::Collectors::Coverage.send(:new)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
test 'one shot line coverage enabled for ruby >= 2.6' do
|
|
97
|
+
return unless Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.5.0')
|
|
98
|
+
Coverband.configuration.expects(:use_oneshot_lines_coverage).returns(true)
|
|
99
|
+
Coverband::Collectors::Coverage.expects(:ruby_version_greater_than_or_equal_to?).with('2.6.0').returns(true)
|
|
100
|
+
::Coverage.expects(:running?).returns(false)
|
|
101
|
+
::Coverage.expects(:start).with(oneshot_lines: true)
|
|
102
|
+
Coverband::Collectors::Coverage.send(:new)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
test 'one shot line coverage for ruby >= 2.6 when already running' do
|
|
106
|
+
return unless Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.5.0')
|
|
107
|
+
Coverband::Collectors::Coverage.expects(:ruby_version_greater_than_or_equal_to?).with('2.6.0').returns(true)
|
|
108
|
+
::Coverage.expects(:running?).returns(true)
|
|
109
|
+
::Coverage.expects(:start).never
|
|
110
|
+
Coverband::Collectors::Coverage.send(:new)
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
test 'no one shot line coverage for ruby < 2.6' do
|
|
114
|
+
return unless Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.5.0')
|
|
115
|
+
Coverband::Collectors::Coverage.expects(:ruby_version_greater_than_or_equal_to?).with('2.6.0').returns(false)
|
|
116
|
+
Coverband::Collectors::Coverage.expects(:ruby_version_greater_than_or_equal_to?).with('2.5.0').returns(true)
|
|
117
|
+
::Coverage.expects(:running?).returns(false)
|
|
118
|
+
::Coverage.expects(:start).with()
|
|
119
|
+
Coverband::Collectors::Coverage.send(:new)
|
|
120
|
+
end
|
|
73
121
|
end
|
|
@@ -17,7 +17,7 @@ class CollectorsDeltaTest < Minitest::Test
|
|
|
17
17
|
|
|
18
18
|
test 'No previous results' do
|
|
19
19
|
current_coverage = {
|
|
20
|
-
'car.rb' => [0,5,1]
|
|
20
|
+
'car.rb' => [0, 5, 1]
|
|
21
21
|
}
|
|
22
22
|
results = Coverband::Collectors::Delta.results(mock_coverage(current_coverage))
|
|
23
23
|
assert_equal(current_coverage, results)
|
|
@@ -25,16 +25,16 @@ class CollectorsDeltaTest < Minitest::Test
|
|
|
25
25
|
|
|
26
26
|
test 'Coverage has gone up' do
|
|
27
27
|
current_coverage = {
|
|
28
|
-
'car.rb' => [nil,1,5,1]
|
|
28
|
+
'car.rb' => [nil, 1, 5, 1]
|
|
29
29
|
}
|
|
30
30
|
results = Coverband::Collectors::Delta.results(mock_coverage(current_coverage))
|
|
31
31
|
assert_equal(current_coverage, results)
|
|
32
32
|
|
|
33
33
|
current_coverage = {
|
|
34
|
-
'car.rb' => [nil,1,7,1]
|
|
34
|
+
'car.rb' => [nil, 1, 7, 1]
|
|
35
35
|
}
|
|
36
36
|
results = Coverband::Collectors::Delta.results(mock_coverage(current_coverage))
|
|
37
|
-
assert_equal({'car.rb' => [nil, 0, 2, 0]}, results)
|
|
37
|
+
assert_equal({ 'car.rb' => [nil, 0, 2, 0] }, results)
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
test 'New file added to coverage' do
|
|
@@ -43,10 +43,40 @@ class CollectorsDeltaTest < Minitest::Test
|
|
|
43
43
|
assert_equal(current_coverage, results)
|
|
44
44
|
|
|
45
45
|
current_coverage = {
|
|
46
|
-
'dealership.rb' => [nil,1,1,nil]
|
|
46
|
+
'dealership.rb' => [nil, 1, 1, nil]
|
|
47
47
|
}
|
|
48
48
|
results = Coverband::Collectors::Delta.results(mock_coverage(current_coverage))
|
|
49
49
|
assert_equal(current_coverage, results)
|
|
50
50
|
end
|
|
51
|
-
end
|
|
52
51
|
|
|
52
|
+
if Coverband.configuration.one_shot_coverage_implemented_in_ruby_version?
|
|
53
|
+
test 'oneshot coverage calls clear' do
|
|
54
|
+
Coverband.configuration.stubs(:use_oneshot_lines_coverage).returns(true)
|
|
55
|
+
current_coverage = {
|
|
56
|
+
'car.rb' => [1, 5]
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
::Coverage.expects(:result).with(clear: true, stop: false).returns(current_coverage)
|
|
60
|
+
results = Coverband::Collectors::Delta::RubyCoverage.results
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
test 'one shot lines results' do
|
|
64
|
+
Coverband.configuration.stubs(:use_oneshot_lines_coverage).returns(true)
|
|
65
|
+
current_coverage = {}
|
|
66
|
+
results = Coverband::Collectors::Delta.results(mock_coverage(current_coverage))
|
|
67
|
+
assert_equal(current_coverage, results)
|
|
68
|
+
|
|
69
|
+
current_coverage = {
|
|
70
|
+
'dealership.rb' => {
|
|
71
|
+
:oneshot_lines => [2,3]
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
::Coverage.expects(:line_stub).with('dealership.rb').returns([nil, 0, 0, nil])
|
|
75
|
+
results = Coverband::Collectors::Delta.results(mock_coverage(current_coverage))
|
|
76
|
+
expected = {
|
|
77
|
+
'dealership.rb' => [nil, 1, 1, nil]
|
|
78
|
+
}
|
|
79
|
+
assert_equal(expected, results)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -5,31 +5,53 @@ require File.expand_path('../test_helper', File.dirname(__FILE__))
|
|
|
5
5
|
class BaseTest < Minitest::Test
|
|
6
6
|
def setup
|
|
7
7
|
super
|
|
8
|
+
Coverband.configuration.reset
|
|
8
9
|
Coverband.configure do |config|
|
|
9
10
|
config.root = Dir.pwd
|
|
10
11
|
config.s3_bucket = nil
|
|
11
12
|
config.root_paths = ['/app_path/']
|
|
12
|
-
config.ignore = ['
|
|
13
|
-
config.reporting_frequency = 100.0
|
|
13
|
+
config.ignore = ['config/envionments']
|
|
14
14
|
config.reporter = 'std_out'
|
|
15
|
-
config.store = Coverband::Adapters::RedisStore.new(Redis.new)
|
|
15
|
+
config.store = Coverband::Adapters::RedisStore.new(Redis.new, redis_namespace: 'coverband_test')
|
|
16
16
|
end
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
-
test '
|
|
19
|
+
test 'ignore works with equal' do
|
|
20
20
|
coverband = Coverband::Collectors::Coverage.instance.reset_instance
|
|
21
|
-
|
|
21
|
+
expected = ["vendor", ".erb$", ".slim$", "/tmp", "internal:prelude", "schema.rb", "config/envionments"]
|
|
22
|
+
assert_equal expected, Coverband.configuration.ignore
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
test 'ignore works with plus equal' do
|
|
26
|
+
Coverband.configure do |config|
|
|
27
|
+
config.ignore += ['config/initializers']
|
|
28
|
+
end
|
|
29
|
+
coverband = Coverband::Collectors::Coverage.instance.reset_instance
|
|
30
|
+
expected = ["vendor",
|
|
31
|
+
".erb$",
|
|
32
|
+
".slim$",
|
|
33
|
+
"/tmp",
|
|
34
|
+
"internal:prelude",
|
|
35
|
+
"schema.rb",
|
|
36
|
+
"config/envionments",
|
|
37
|
+
"config/initializers"]
|
|
38
|
+
assert_equal expected, Coverband.configuration.ignore
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
test 'ignore' do
|
|
42
|
+
Coverband::Collectors::Coverage.instance.reset_instance
|
|
43
|
+
assert !Coverband.configuration.gem_paths.first.nil?
|
|
22
44
|
end
|
|
23
45
|
|
|
24
46
|
test 'gem_paths' do
|
|
25
47
|
Coverband::Collectors::Coverage.instance.reset_instance
|
|
26
|
-
assert Coverband.configuration.gem_paths.first
|
|
48
|
+
assert !Coverband.configuration.gem_paths.first.nil?
|
|
27
49
|
end
|
|
28
50
|
|
|
29
51
|
test 'groups' do
|
|
30
52
|
Coverband::Collectors::Coverage.instance.reset_instance
|
|
31
53
|
Coverband.configuration.track_gems = true
|
|
32
|
-
assert_equal %w
|
|
54
|
+
assert_equal %w[App Gems], Coverband.configuration.groups.keys
|
|
33
55
|
end
|
|
34
56
|
|
|
35
57
|
test 'all_root_paths' do
|
|
@@ -64,4 +86,22 @@ class BaseTest < Minitest::Test
|
|
|
64
86
|
end
|
|
65
87
|
end
|
|
66
88
|
end
|
|
89
|
+
|
|
90
|
+
test 'use_oneshot_lines_coverage' do
|
|
91
|
+
refute Coverband.configuration.use_oneshot_lines_coverage
|
|
92
|
+
|
|
93
|
+
Coverband.configuration.stubs(:one_shot_coverage_implemented_in_ruby_version?).returns(true)
|
|
94
|
+
Coverband.configuration.use_oneshot_lines_coverage = true
|
|
95
|
+
assert Coverband.configuration.use_oneshot_lines_coverage
|
|
96
|
+
|
|
97
|
+
Coverband.configuration.use_oneshot_lines_coverage = false
|
|
98
|
+
refute Coverband.configuration.use_oneshot_lines_coverage
|
|
99
|
+
|
|
100
|
+
Coverband.configuration.stubs(:one_shot_coverage_implemented_in_ruby_version?).returns(false)
|
|
101
|
+
exception = assert_raises Exception do
|
|
102
|
+
Coverband.configuration.use_oneshot_lines_coverage = true
|
|
103
|
+
end
|
|
104
|
+
assert_equal 'One shot line coverage is only available in ruby >= 2.6', exception.message
|
|
105
|
+
refute Coverband.configuration.use_oneshot_lines_coverage
|
|
106
|
+
end
|
|
67
107
|
end
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
require File.expand_path('../test_helper', File.dirname(__FILE__))
|
|
4
4
|
|
|
5
5
|
class CoverbandTest < Minitest::Test
|
|
6
|
-
|
|
7
6
|
test 'Coverband#start kicks off background reporting if enabled and not in rack server' do
|
|
8
7
|
Coverband.configuration.stubs(:background_reporting_enabled).returns(:true)
|
|
9
8
|
Coverband::RackServerCheck.expects(:running?).returns(false)
|
|
@@ -24,10 +23,23 @@ class CoverbandTest < Minitest::Test
|
|
|
24
23
|
::Coverband.start
|
|
25
24
|
end
|
|
26
25
|
|
|
26
|
+
test 'Coverband#configured? works' do
|
|
27
|
+
Coverband.configure
|
|
28
|
+
assert Coverband.configured?
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
test 'Eager load coverage block' do
|
|
32
|
+
Coverband.eager_loading_coverage {
|
|
33
|
+
#some code
|
|
34
|
+
1 + 1
|
|
35
|
+
}
|
|
36
|
+
assert_equal :runtime, Coverband.configuration.store.type
|
|
37
|
+
end
|
|
38
|
+
|
|
27
39
|
test 'Eager load coverage' do
|
|
28
40
|
Coverband.eager_loading_coverage!
|
|
29
41
|
assert_equal :eager_loading, Coverband.configuration.store.type
|
|
30
42
|
Coverband.runtime_coverage!
|
|
31
|
-
|
|
43
|
+
assert_equal :runtime, Coverband.configuration.store.type
|
|
32
44
|
end
|
|
33
45
|
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require File.expand_path('../../test_helper', File.dirname(__FILE__))
|
|
4
|
+
require 'rack'
|
|
5
|
+
|
|
6
|
+
class BackgroundMiddlewareTest < Minitest::Test
|
|
7
|
+
def setup
|
|
8
|
+
super
|
|
9
|
+
Coverband.configure do |config|
|
|
10
|
+
config.background_reporting_enabled = false
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
test 'call app' do
|
|
15
|
+
request = Rack::MockRequest.env_for('/anything.json')
|
|
16
|
+
Coverband::Collectors::Coverage.instance.reset_instance
|
|
17
|
+
middleware = Coverband::BackgroundMiddleware.new(fake_app)
|
|
18
|
+
results = middleware.call(request)
|
|
19
|
+
assert_equal '/anything.json', results.last
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
test 'pass all rack lint checks' do
|
|
23
|
+
Coverband::Collectors::Coverage.instance.reset_instance
|
|
24
|
+
app = Rack::Lint.new(Coverband::BackgroundMiddleware.new(fake_app))
|
|
25
|
+
env = Rack::MockRequest.env_for('/hello')
|
|
26
|
+
app.call(env)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
test 'starts background reporter when configured' do
|
|
30
|
+
request = Rack::MockRequest.env_for('/anything.json')
|
|
31
|
+
Coverband.configuration.stubs(:background_reporting_enabled).returns(true)
|
|
32
|
+
Coverband::Background.expects(:start)
|
|
33
|
+
middleware = Coverband::BackgroundMiddleware.new(fake_app)
|
|
34
|
+
middleware.call(request)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
private
|
|
38
|
+
|
|
39
|
+
def fake_app
|
|
40
|
+
@fake_app ||= lambda do |env|
|
|
41
|
+
[200, { 'Content-Type' => 'text/plain' }, env['PATH_INFO']]
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|