coverband 1.3.1 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/README.md +39 -6
- data/changes.md +23 -0
- data/coverband.gemspec +2 -1
- data/lib/coverband.rb +12 -11
- data/lib/coverband/adapters/file_store.rb +59 -0
- data/lib/coverband/adapters/memory_cache_store.rb +46 -0
- data/lib/coverband/adapters/redis_store.rb +101 -0
- data/lib/coverband/base.rb +4 -7
- data/lib/coverband/baseline.rb +35 -0
- data/lib/coverband/configuration.rb +20 -5
- data/lib/coverband/reporters/base.rb +150 -0
- data/lib/coverband/reporters/console_report.rb +17 -0
- data/lib/coverband/reporters/simple_cov_report.rb +46 -0
- data/lib/coverband/s3_report_writer.rb +6 -1
- data/lib/coverband/tasks.rb +26 -16
- data/lib/coverband/version.rb +1 -1
- data/test/benchmarks/benchmark.rake +57 -7
- data/test/test_helper.rb +20 -0
- data/test/unit/adapters_file_store_test.rb +41 -0
- data/test/unit/{memory_cache_store_test.rb → adapters_memory_cache_store_test.rb} +12 -12
- data/test/unit/adapters_redis_store_test.rb +164 -0
- data/test/unit/base_test.rb +8 -7
- data/test/unit/baseline_test.rb +50 -0
- data/test/unit/middleware_test.rb +8 -8
- data/test/unit/reports_base_test.rb +140 -0
- data/test/unit/reports_console_test.rb +37 -0
- data/test/unit/reports_simple_cov_test.rb +68 -0
- data/test/unit/s3_report_writer_test.rb +1 -0
- metadata +37 -24
- data/lib/coverband/memory_cache_store.rb +0 -42
- data/lib/coverband/redis_store.rb +0 -57
- data/lib/coverband/reporter.rb +0 -223
- data/test/unit/redis_store_test.rb +0 -107
- data/test/unit/reporter_test.rb +0 -207
data/test/test_helper.rb
CHANGED
@@ -28,6 +28,26 @@ def test(name, &block)
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
+
def fake_redis
|
32
|
+
@redis ||= begin
|
33
|
+
redis = OpenStruct.new()
|
34
|
+
def redis.smembers(key)
|
35
|
+
end
|
36
|
+
redis
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def fake_coverband_members
|
41
|
+
["/Users/danmayer/projects/hearno/script/tester.rb",
|
42
|
+
"/Users/danmayer/projects/hearno/app/controllers/application_controller.rb",
|
43
|
+
"/Users/danmayer/projects/hearno/app/models/account.rb"
|
44
|
+
]
|
45
|
+
end
|
46
|
+
|
47
|
+
def fake_coverage_report
|
48
|
+
{"/Users/danmayer/projects/hearno/script/tester.rb"=>[1, nil, 1, 1, nil, nil, nil]}
|
49
|
+
end
|
50
|
+
|
31
51
|
require 'coverband'
|
32
52
|
|
33
53
|
unless File.exist?('./tmp/coverband_baseline.json')
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require File.expand_path('../test_helper', File.dirname(__FILE__))
|
2
|
+
|
3
|
+
class AdaptersFileStoreTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
@test_file_path = "/tmp/coverband_filestore_test_path.json"
|
7
|
+
File.open(@test_file_path, 'w') { |f| f.write(test_data.to_json) }
|
8
|
+
@store = Coverband::Adapters::FileStore.new(@test_file_path)
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_covered_lines_for_file
|
12
|
+
assert_equal @store.covered_lines_for_file('dog.rb')["1"], 1
|
13
|
+
assert_equal @store.covered_lines_for_file('dog.rb')["2"], 2
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_covered_lines_when_null
|
17
|
+
assert_equal @store.covered_lines_for_file('none.rb'), []
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_covered_files
|
21
|
+
assert_equal @store.covered_files(), ['dog.rb']
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_clear
|
25
|
+
@store.clear!
|
26
|
+
assert_equal false, File.exist?(@test_file_path)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_save_report
|
30
|
+
@store.save_report({"cat.rb" => {1 => 1}})
|
31
|
+
assert_equal @store.covered_lines_for_file('cat.rb')["1"], 1
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def test_data
|
37
|
+
{
|
38
|
+
"dog.rb" => { 1 => 1, 2 => 2 },
|
39
|
+
}
|
40
|
+
end
|
41
|
+
end
|
@@ -4,9 +4,9 @@ module Coverband
|
|
4
4
|
class MemoryCacheStoreTest < Test::Unit::TestCase
|
5
5
|
|
6
6
|
def setup
|
7
|
-
MemoryCacheStore.reset!
|
7
|
+
Adapters::MemoryCacheStore.reset!
|
8
8
|
@store = mock('store')
|
9
|
-
@memory_store = MemoryCacheStore.new(@store)
|
9
|
+
@memory_store = Adapters::MemoryCacheStore.new(@store)
|
10
10
|
end
|
11
11
|
|
12
12
|
def data
|
@@ -17,17 +17,17 @@ module Coverband
|
|
17
17
|
end
|
18
18
|
|
19
19
|
test 'it passes data into store' do
|
20
|
-
@store.expects(:
|
20
|
+
@store.expects(:save_report).with data
|
21
21
|
@store.expects(:covered_lines_for_file).with('file1').returns []
|
22
22
|
@store.expects(:covered_lines_for_file).with('file2').returns []
|
23
|
-
@memory_store.
|
23
|
+
@memory_store.save_report data
|
24
24
|
end
|
25
25
|
|
26
26
|
test 'it passes data into store only once' do
|
27
|
-
@store.expects(:
|
27
|
+
@store.expects(:save_report).once.with data
|
28
28
|
@store.expects(:covered_lines_for_file).with('file1').returns []
|
29
29
|
@store.expects(:covered_lines_for_file).with('file2').returns []
|
30
|
-
2.times { @memory_store.
|
30
|
+
2.times { @memory_store.save_report data }
|
31
31
|
end
|
32
32
|
|
33
33
|
test 'it only passes files and lines we have not hit yet' do
|
@@ -37,19 +37,19 @@ module Coverband
|
|
37
37
|
}
|
38
38
|
@store.expects(:covered_lines_for_file).with('file1').returns []
|
39
39
|
@store.expects(:covered_lines_for_file).with('file2').returns []
|
40
|
-
@store.expects(:
|
41
|
-
@store.expects(:
|
40
|
+
@store.expects(:save_report).once.with data
|
41
|
+
@store.expects(:save_report).once.with(
|
42
42
|
'file1' => { 10 => 1 }
|
43
43
|
)
|
44
|
-
@memory_store.
|
45
|
-
@memory_store.
|
44
|
+
@memory_store.save_report data
|
45
|
+
@memory_store.save_report second_data
|
46
46
|
end
|
47
47
|
|
48
48
|
test 'it initializes cache with what is in store' do
|
49
49
|
@store.expects(:covered_lines_for_file).with('file1').returns [3,5]
|
50
50
|
@store.expects(:covered_lines_for_file).with('file2').returns [2]
|
51
|
-
@store.expects(:
|
52
|
-
@memory_store.
|
51
|
+
@store.expects(:save_report).with('file2' => { 1 => 1 })
|
52
|
+
@memory_store.save_report data
|
53
53
|
end
|
54
54
|
|
55
55
|
end
|
@@ -0,0 +1,164 @@
|
|
1
|
+
require File.expand_path('../test_helper', File.dirname(__FILE__))
|
2
|
+
|
3
|
+
class RedisTest < Test::Unit::TestCase
|
4
|
+
BASE_KEY = Coverband::Adapters::RedisStore::BASE_KEY
|
5
|
+
|
6
|
+
def setup
|
7
|
+
@redis = Redis.new
|
8
|
+
@redis.flushdb
|
9
|
+
@store = Coverband::Adapters::RedisStore.new(@redis, array: true)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_coverage
|
13
|
+
@redis.sadd(BASE_KEY, 'dog.rb')
|
14
|
+
@redis.sadd("#{BASE_KEY}.dog.rb", 1)
|
15
|
+
@redis.sadd("#{BASE_KEY}.dog.rb", 2)
|
16
|
+
expected = {'dog.rb' => [1,2]}
|
17
|
+
assert_equal expected, @store.coverage
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_covered_lines_for_file
|
21
|
+
@redis.sadd("#{BASE_KEY}.dog.rb", 1)
|
22
|
+
@redis.sadd("#{BASE_KEY}.dog.rb", 2)
|
23
|
+
assert_equal [1, 2], @store.covered_lines_for_file('dog.rb').sort
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_covered_lines_for_file__hash
|
27
|
+
@redis.mapped_hmset("#{BASE_KEY}.dog.rb", {"1" => 1, "2" => 2})
|
28
|
+
@store = Coverband::Adapters::RedisStore.new(@redis, array: false)
|
29
|
+
expected = [["1", "1"], ["2", "2"]]
|
30
|
+
assert_equal expected, @store.covered_lines_for_file('dog.rb').sort
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_covered_lines_when_null
|
34
|
+
assert_equal @store.covered_lines_for_file('dog.rb'), []
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_clear
|
38
|
+
@redis.expects(:smembers).with(BASE_KEY).once.returns([])
|
39
|
+
@redis.expects(:del).with(BASE_KEY).once
|
40
|
+
@store.clear!
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def test_data
|
46
|
+
{
|
47
|
+
"/Users/danmayer/projects/cover_band_server/app.rb" => { 54 => 1, 55 => 2 },
|
48
|
+
"/Users/danmayer/projects/cover_band_server/server.rb" => { 5 => 1 }
|
49
|
+
}
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
class RedisStoreTestV3Array < RedisTest
|
54
|
+
|
55
|
+
def setup
|
56
|
+
@redis = Redis.current.tap { |redis|
|
57
|
+
redis.stubs(:sadd).with(anything, anything)
|
58
|
+
redis.stubs(:info).returns({'redis_version' => 3.0})
|
59
|
+
}
|
60
|
+
|
61
|
+
@store = Coverband::Adapters::RedisStore.new(@redis, array: true)
|
62
|
+
end
|
63
|
+
|
64
|
+
test "it stores the files into coverband" do
|
65
|
+
@redis.expects(:sadd).with(BASE_KEY, [
|
66
|
+
'/Users/danmayer/projects/cover_band_server/app.rb',
|
67
|
+
'/Users/danmayer/projects/cover_band_server/server.rb'
|
68
|
+
])
|
69
|
+
|
70
|
+
@store.save_report(test_data)
|
71
|
+
end
|
72
|
+
|
73
|
+
test "it stores the file lines of the file app.rb" do
|
74
|
+
@redis.expects(:sadd).with(
|
75
|
+
"#{BASE_KEY}./Users/danmayer/projects/cover_band_server/app.rb",
|
76
|
+
[54, 55]
|
77
|
+
)
|
78
|
+
|
79
|
+
@store.save_report(test_data)
|
80
|
+
end
|
81
|
+
|
82
|
+
test "it stores the file lines of the file server.rb" do
|
83
|
+
@redis.expects(:sadd).with(
|
84
|
+
"#{BASE_KEY}./Users/danmayer/projects/cover_band_server/server.rb",
|
85
|
+
[5]
|
86
|
+
)
|
87
|
+
|
88
|
+
@store.save_report(test_data)
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
|
93
|
+
class RedisStoreTestV3Hash < RedisTest
|
94
|
+
|
95
|
+
def setup
|
96
|
+
@redis = Redis.current.tap { |redis|
|
97
|
+
redis.stubs(:sadd).with(anything, anything)
|
98
|
+
redis.stubs(:info).returns({'redis_version' => 3.0})
|
99
|
+
}
|
100
|
+
|
101
|
+
@store = Coverband::Adapters::RedisStore.new(@redis)
|
102
|
+
end
|
103
|
+
|
104
|
+
test "it stores the files into coverband" do
|
105
|
+
@redis.expects(:sadd).with(BASE_KEY, [
|
106
|
+
'/Users/danmayer/projects/cover_band_server/app.rb',
|
107
|
+
'/Users/danmayer/projects/cover_band_server/server.rb'
|
108
|
+
])
|
109
|
+
|
110
|
+
@store.save_report(test_data)
|
111
|
+
end
|
112
|
+
|
113
|
+
test "it stores the file lines of the file app.rb" do
|
114
|
+
@redis.expects(:mapped_hmset).with(
|
115
|
+
"#{BASE_KEY}./Users/danmayer/projects/cover_band_server/app.rb",
|
116
|
+
{'54' => 1, '55' => 2}
|
117
|
+
)
|
118
|
+
@redis.expects(:mapped_hmset).with(
|
119
|
+
"#{BASE_KEY}./Users/danmayer/projects/cover_band_server/server.rb",
|
120
|
+
{'5' => 1}
|
121
|
+
)
|
122
|
+
|
123
|
+
@store.save_report(test_data)
|
124
|
+
end
|
125
|
+
|
126
|
+
end
|
127
|
+
|
128
|
+
class RedisStoreTestV223 < RedisTest
|
129
|
+
|
130
|
+
def setup
|
131
|
+
@redis = Redis.current.tap { |redis|
|
132
|
+
redis.stubs(:sadd).with(anything, anything)
|
133
|
+
redis.stubs(:info).returns({'redis_version' => "2.2.3"})
|
134
|
+
}
|
135
|
+
|
136
|
+
@store = Coverband::Adapters::RedisStore.new(@redis, array: true)
|
137
|
+
end
|
138
|
+
|
139
|
+
test "it store the files with separate calls into coverband" do
|
140
|
+
@redis.expects(:sadd).with(BASE_KEY, '/Users/danmayer/projects/cover_band_server/app.rb')
|
141
|
+
@redis.expects(:sadd).with(BASE_KEY, '/Users/danmayer/projects/cover_band_server/server.rb')
|
142
|
+
|
143
|
+
@store.save_report(test_data)
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
class RedisStoreTestV222 < RedisTest
|
148
|
+
|
149
|
+
def setup
|
150
|
+
@redis = Redis.current.tap { |redis|
|
151
|
+
redis.stubs(:sadd).with(anything, anything)
|
152
|
+
redis.stubs(:info).returns({'redis_version' => "2.2.2"})
|
153
|
+
}
|
154
|
+
|
155
|
+
@store = Coverband::Adapters::RedisStore.new(@redis, array: true)
|
156
|
+
end
|
157
|
+
|
158
|
+
test "it store the files with separate calls into coverband" do
|
159
|
+
@redis.expects(:sadd).with(BASE_KEY, '/Users/danmayer/projects/cover_band_server/app.rb')
|
160
|
+
@redis.expects(:sadd).with(BASE_KEY, '/Users/danmayer/projects/cover_band_server/server.rb')
|
161
|
+
|
162
|
+
@store.save_report(test_data)
|
163
|
+
end
|
164
|
+
end
|
data/test/unit/base_test.rb
CHANGED
@@ -5,13 +5,13 @@ class BaseTest < Test::Unit::TestCase
|
|
5
5
|
|
6
6
|
test 'defaults to a redis store' do
|
7
7
|
coverband = Coverband::Base.instance.reset_instance
|
8
|
-
assert_equal Coverband::RedisStore, coverband.instance_variable_get('@
|
8
|
+
assert_equal Coverband::Adapters::RedisStore, coverband.instance_variable_get('@store').class
|
9
9
|
end
|
10
10
|
|
11
11
|
test 'configure memory caching' do
|
12
12
|
Coverband.configuration.memory_caching = true
|
13
13
|
coverband = Coverband::Base.instance.reset_instance
|
14
|
-
assert_equal Coverband::MemoryCacheStore, coverband.instance_variable_get('@
|
14
|
+
assert_equal Coverband::Adapters::MemoryCacheStore, coverband.instance_variable_get('@store').class
|
15
15
|
Coverband.configuration.memory_caching = false
|
16
16
|
end
|
17
17
|
|
@@ -45,7 +45,7 @@ class BaseTest < Test::Unit::TestCase
|
|
45
45
|
coverband.instance_variable_set("@sample_percentage", 100.0)
|
46
46
|
coverband.instance_variable_set("@verbose", true)
|
47
47
|
coverband.instance_variable_set("@logger", logger)
|
48
|
-
coverband.instance_variable_set("@
|
48
|
+
coverband.instance_variable_set("@store", nil)
|
49
49
|
assert_equal false, coverband.instance_variable_get("@enabled")
|
50
50
|
logger.expects(:info).at_least_once
|
51
51
|
coverband.sample { 1 + 1 }
|
@@ -58,7 +58,7 @@ class BaseTest < Test::Unit::TestCase
|
|
58
58
|
coverband.instance_variable_set("@sample_percentage", 100.0)
|
59
59
|
coverband.instance_variable_set("@verbose", true)
|
60
60
|
coverband.instance_variable_set("@logger", logger)
|
61
|
-
coverband.instance_variable_set("@
|
61
|
+
coverband.instance_variable_set("@store", nil)
|
62
62
|
assert_equal false, coverband.instance_variable_get("@enabled")
|
63
63
|
logger.expects(:info).at_least_once
|
64
64
|
coverband.start
|
@@ -72,9 +72,10 @@ class BaseTest < Test::Unit::TestCase
|
|
72
72
|
coverband = Coverband::Base.instance.reset_instance
|
73
73
|
coverband.instance_variable_set("@sample_percentage", 100.0)
|
74
74
|
coverband.instance_variable_set("@verbose", true)
|
75
|
-
|
76
|
-
|
77
|
-
|
75
|
+
Coverband.configuration.logger.stubs('info')
|
76
|
+
store = Coverband::Adapters::RedisStore.new(Redis.new)
|
77
|
+
coverband.instance_variable_set("@store", store)
|
78
|
+
store.expects(:save_report).once.with(has_entries(dog_file => { 3 => 5 }) )
|
78
79
|
assert_equal false, coverband.instance_variable_get("@enabled")
|
79
80
|
coverband.start
|
80
81
|
5.times { Dog.new.bark }
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require File.expand_path('../test_helper', File.dirname(__FILE__))
|
2
|
+
|
3
|
+
class ReporterTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
test "record baseline" do
|
6
|
+
Coverband.configure do |config|
|
7
|
+
config.redis = nil
|
8
|
+
config.store = nil
|
9
|
+
config.root = '/full/remote_app/path'
|
10
|
+
config.coverage_file = '/tmp/fake_file.json'
|
11
|
+
end
|
12
|
+
Coverage.expects(:start).returns(true).at_least_once
|
13
|
+
Coverage.expects(:result).returns({'fake' => [0,1]}).at_least_once
|
14
|
+
File.expects(:open).once
|
15
|
+
|
16
|
+
File.expects(:exist?).at_least_once.returns(true)
|
17
|
+
expected = {"filename.rb" => [0,nil,1]}
|
18
|
+
fake_file_data = expected.to_json
|
19
|
+
File.expects(:read).at_least_once.returns(fake_file_data)
|
20
|
+
|
21
|
+
Coverband::Baseline.record{
|
22
|
+
#nothing
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
test "parse baseline" do
|
27
|
+
Coverband.configure do |config|
|
28
|
+
config.redis = nil
|
29
|
+
config.store = nil
|
30
|
+
config.root = '/full/remote_app/path'
|
31
|
+
config.coverage_file = '/tmp/fake_file.json'
|
32
|
+
end
|
33
|
+
File.expects(:exist?).at_least_once.returns(true)
|
34
|
+
expected = {"filename.rb" => [0,nil,1]}
|
35
|
+
fake_file_data = expected.to_json
|
36
|
+
File.expects(:read).at_least_once.returns(fake_file_data)
|
37
|
+
results = Coverband::Baseline.parse_baseline
|
38
|
+
assert_equal(results, {"filename.rb" => [0,nil,1]})
|
39
|
+
end
|
40
|
+
|
41
|
+
# todo test redis and file stores baseline
|
42
|
+
|
43
|
+
test "convert_coverage_format" do
|
44
|
+
results = {"fake_file.rb" => [1,nil,0,2]}
|
45
|
+
expected = {"fake_file.rb"=>{1=>1, 3=>0, 4=>2}}
|
46
|
+
assert_equal(expected, Coverband::Baseline.convert_coverage_format(results))
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
end
|
@@ -3,6 +3,8 @@ require File.expand_path('../fake_app/basic_rack', File.dirname(__FILE__))
|
|
3
3
|
require 'rack'
|
4
4
|
|
5
5
|
class MiddlewareTest < Test::Unit::TestCase
|
6
|
+
BASE_KEY = Coverband::Adapters::RedisStore::BASE_KEY
|
7
|
+
|
6
8
|
test "call app" do
|
7
9
|
request = Rack::MockRequest.env_for("/anything.json")
|
8
10
|
Coverband::Base.instance.reset_instance
|
@@ -76,7 +78,6 @@ class MiddlewareTest < Test::Unit::TestCase
|
|
76
78
|
middleware.call(request) rescue nil
|
77
79
|
end
|
78
80
|
|
79
|
-
|
80
81
|
test 'always report coverage when sampling' do
|
81
82
|
request = Rack::MockRequest.env_for("/anything.json")
|
82
83
|
Coverband::Base.instance.reset_instance
|
@@ -84,15 +85,15 @@ class MiddlewareTest < Test::Unit::TestCase
|
|
84
85
|
assert_equal false, Coverband::Base.instance.instance_variable_get("@enabled")
|
85
86
|
Coverband::Base.instance.instance_variable_set("@sample_percentage", 100.0)
|
86
87
|
fake_redis = Redis.new
|
87
|
-
Coverband::Base.instance.instance_variable_set("@
|
88
|
+
Coverband::Base.instance.instance_variable_set("@store", Coverband::Adapters::RedisStore.new(fake_redis))
|
88
89
|
fake_redis.stubs(:info).returns({'redis_version' => 3.0})
|
89
90
|
fake_redis.expects(:sadd).at_least_once
|
90
|
-
fake_redis.expects(:
|
91
|
+
fake_redis.expects(:mapped_hmset).at_least_once
|
92
|
+
fake_redis.expects(:mapped_hmset).at_least_once.with("#{BASE_KEY}.#{basic_rack_ruby_file}", {'5' => 1})
|
91
93
|
results = middleware.call(request)
|
92
94
|
assert_equal true, Coverband::Base.instance.instance_variable_get("@enabled")
|
93
95
|
end
|
94
96
|
|
95
|
-
|
96
97
|
test 'report only on calls when configured' do
|
97
98
|
request = Rack::MockRequest.env_for("/anything.json")
|
98
99
|
Coverband.configuration.trace_point_events = [:call]
|
@@ -101,16 +102,15 @@ class MiddlewareTest < Test::Unit::TestCase
|
|
101
102
|
assert_equal false, Coverband::Base.instance.instance_variable_get("@enabled")
|
102
103
|
Coverband::Base.instance.instance_variable_set("@sample_percentage", 100.0)
|
103
104
|
fake_redis = Redis.new
|
104
|
-
Coverband::Base.instance.instance_variable_set("@
|
105
|
+
Coverband::Base.instance.instance_variable_set("@store", Coverband::Adapters::RedisStore.new(fake_redis))
|
105
106
|
fake_redis.stubs(:info).returns({'redis_version' => 3.0})
|
106
107
|
fake_redis.expects(:sadd).at_least_once
|
107
|
-
fake_redis.expects(:
|
108
|
+
fake_redis.expects(:mapped_hmset).at_least_once
|
109
|
+
fake_redis.expects(:mapped_hmset).at_least_once.with("#{BASE_KEY}.#{basic_rack_ruby_file}", {'4'=>1})
|
108
110
|
results = middleware.call(request)
|
109
111
|
assert_equal true, Coverband::Base.instance.instance_variable_get("@enabled")
|
110
112
|
end
|
111
113
|
|
112
|
-
|
113
|
-
|
114
114
|
private
|
115
115
|
|
116
116
|
def fake_app
|
@@ -0,0 +1,140 @@
|
|
1
|
+
require File.expand_path('../test_helper', File.dirname(__FILE__))
|
2
|
+
|
3
|
+
class ReportsBaseTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
test "filename_from_key fix filename from a key with a swappable path" do
|
6
|
+
Coverband.configure do |config|
|
7
|
+
config.reporter = 'std_out'
|
8
|
+
config.root = '/full/remote_app/path'
|
9
|
+
end
|
10
|
+
|
11
|
+
key = "/app/is/a/path.rb"
|
12
|
+
#the code takes config.root expands and adds a '/' for the final path in roots
|
13
|
+
roots = ["/app/", '/full/remote_app/path/']
|
14
|
+
|
15
|
+
assert_equal "/full/remote_app/path/is/a/path.rb", Coverband::Reporters::Base.filename_from_key(key, roots)
|
16
|
+
end
|
17
|
+
|
18
|
+
test "filename_from_key fix filename a changing deploy path with double quotes" do
|
19
|
+
Coverband.configure do |config|
|
20
|
+
config.reporter = 'std_out'
|
21
|
+
config.root = '/full/remote_app/path'
|
22
|
+
end
|
23
|
+
|
24
|
+
key = "/box/apps/app_name/releases/20140725203539/app/models/user.rb"
|
25
|
+
# the code takes config.root expands and adds a '/' for the final path in roots
|
26
|
+
# note to get regex to work for changing deploy directories it must be double escaped in double quotes or use single qoutes
|
27
|
+
roots = ["/box/apps/app_name/releases/\\d+/", '/full/remote_app/path/']
|
28
|
+
|
29
|
+
assert_equal "/full/remote_app/path/app/models/user.rb", Coverband::Reporters::Base.filename_from_key(key, roots)
|
30
|
+
end
|
31
|
+
|
32
|
+
test "filename_from_key fix filename a changing deploy path with single quotes" do
|
33
|
+
Coverband.configure do |config|
|
34
|
+
config.reporter = 'std_out'
|
35
|
+
config.root = '/full/remote_app/path'
|
36
|
+
end
|
37
|
+
|
38
|
+
key = "/box/apps/app_name/releases/20140725203539/app/models/user.rb"
|
39
|
+
# the code takes config.root expands and adds a '/' for the final path in roots
|
40
|
+
# note to get regex to work for changing deploy directories it must be double escaped in double quotes or use single qoutes
|
41
|
+
roots = ['/box/apps/app_name/releases/\d+/', '/full/remote_app/path/']
|
42
|
+
|
43
|
+
assert_equal "/full/remote_app/path/app/models/user.rb", Coverband::Reporters::Base.filename_from_key(key, roots)
|
44
|
+
end
|
45
|
+
|
46
|
+
test "filename_from_key leave filename from a key with a local path" do
|
47
|
+
Coverband.configure do |config|
|
48
|
+
config.reporter = 'std_out'
|
49
|
+
config.root = '/full/remote_app/path'
|
50
|
+
end
|
51
|
+
|
52
|
+
key = "/full/remote_app/path/is/a/path.rb"
|
53
|
+
#the code takes config.root expands and adds a '/' for the final path in roots
|
54
|
+
roots = ["/app/", '/full/remote_app/path/']
|
55
|
+
|
56
|
+
assert_equal "/full/remote_app/path/is/a/path.rb", Coverband::Reporters::Base.filename_from_key(key, roots)
|
57
|
+
end
|
58
|
+
|
59
|
+
test "line_hash gets correct hash entry for a line key" do
|
60
|
+
@fake_redis = fake_redis
|
61
|
+
store = Coverband::Adapters::RedisStore.new(@fake_redis, array: true)
|
62
|
+
|
63
|
+
Coverband.configure do |config|
|
64
|
+
config.redis = @fake_redis
|
65
|
+
config.reporter = 'std_out'
|
66
|
+
config.root = '/full/remote_app/path'
|
67
|
+
end
|
68
|
+
|
69
|
+
key = "/full/remote_app/path/is/a/path.rb"
|
70
|
+
#the code takes config.root expands and adds a '/'
|
71
|
+
roots = ["/app/", '/full/remote_app/path/']
|
72
|
+
|
73
|
+
lines_hit = ['1','3','6']
|
74
|
+
@fake_redis.stubs(:smembers).returns(lines_hit)
|
75
|
+
#expects to show hit counts on 1,3,6
|
76
|
+
expected = {"/full/remote_app/path/is/a/path.rb" => [1,nil,1,nil,nil,1]}
|
77
|
+
File.stubs(:exists?).returns(true)
|
78
|
+
File.stubs(:foreach).returns(['line 1','line2','line3','line4','line5','line6'])
|
79
|
+
|
80
|
+
assert_equal expected, Coverband::Reporters::Base.line_hash(store, key, roots)
|
81
|
+
end
|
82
|
+
|
83
|
+
test "line_hash adjusts relative paths" do
|
84
|
+
@fake_redis = fake_redis
|
85
|
+
store = Coverband::Adapters::RedisStore.new(@fake_redis, array: true)
|
86
|
+
|
87
|
+
Coverband.configure do |config|
|
88
|
+
config.redis = @fake_redis
|
89
|
+
config.reporter = 'std_out'
|
90
|
+
config.root = '/full/remote_app/path'
|
91
|
+
end
|
92
|
+
|
93
|
+
key = "./is/a/path.rb"
|
94
|
+
#the code takes config.root expands and adds a '/'
|
95
|
+
roots = ["/app/", '/full/remote_app/path/']
|
96
|
+
|
97
|
+
lines_hit = ['1','3','6']
|
98
|
+
@fake_redis.stubs(:smembers).returns(lines_hit)
|
99
|
+
#expects to show hit counts on 1,3,6
|
100
|
+
expected = {"/full/remote_app/path/is/a/path.rb" => [1,nil,1,nil,nil,1]}
|
101
|
+
File.stubs(:exists?).returns(true)
|
102
|
+
File.stubs(:foreach).returns(['line 1','line2','line3','line4','line5','line6'])
|
103
|
+
|
104
|
+
assert_equal expected, Coverband::Reporters::Base.line_hash(store, key, roots)
|
105
|
+
end
|
106
|
+
|
107
|
+
test "#merge_arrays basic merge preserves order and counts" do
|
108
|
+
first = [0,0,1,0,1]
|
109
|
+
second = [nil,0,1,0,0]
|
110
|
+
expects = [0,0,2,0,1]
|
111
|
+
|
112
|
+
assert_equal expects, Coverband::Reporters::Base.merge_arrays(first, second)
|
113
|
+
end
|
114
|
+
|
115
|
+
test "#merge_arrays basic merge preserves order and counts different lengths" do
|
116
|
+
first = [0,0,1,0,1]
|
117
|
+
second = [nil,0,1,0,0,0,0,1]
|
118
|
+
expects = [0,0,2,0,1,0,0,1]
|
119
|
+
|
120
|
+
assert_equal expects, Coverband::Reporters::Base.merge_arrays(first, second)
|
121
|
+
end
|
122
|
+
|
123
|
+
test "#merge_existing_coverage basic merge preserves order and counts different lengths" do
|
124
|
+
first = {"file.rb" => [0,1,2,nil,nil,nil]}
|
125
|
+
second = {"file.rb" => [0,1,2,nil,0,1,2]}
|
126
|
+
expects = {"file.rb" => [0,2,4,nil,0,1,2]}
|
127
|
+
|
128
|
+
assert_equal expects, Coverband::Reporters::Base.merge_existing_coverage(first, second)
|
129
|
+
end
|
130
|
+
|
131
|
+
test "#merge_existing_coverage mismatched" do
|
132
|
+
first = {"file.rb" => [0,1,2,nil,nil,nil]}
|
133
|
+
second = {"diff.rb" => [0,1,2,nil,0,1,2]}
|
134
|
+
expects = {"file.rb" => [0,1,2,nil,nil,nil],
|
135
|
+
"diff.rb" => [0,1,2,nil,0,1,2]}
|
136
|
+
|
137
|
+
assert_equal expects, Coverband::Reporters::Base.merge_existing_coverage(first, second)
|
138
|
+
end
|
139
|
+
|
140
|
+
end
|