coverband 1.5.4 → 2.0.0.alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -0
  3. data/.travis.yml +3 -0
  4. data/Gemfile +2 -1
  5. data/Rakefile +5 -3
  6. data/coverband.gemspec +27 -23
  7. data/lib/coverband.rb +10 -14
  8. data/lib/coverband/adapters/file_store.rb +6 -7
  9. data/lib/coverband/adapters/memory_cache_store.rb +8 -5
  10. data/lib/coverband/adapters/redis_store.rb +10 -50
  11. data/lib/coverband/baseline.rb +5 -5
  12. data/lib/coverband/collectors/base.rb +140 -0
  13. data/lib/coverband/collectors/coverage.rb +148 -0
  14. data/lib/coverband/collectors/trace.rb +100 -0
  15. data/lib/coverband/configuration.rb +8 -10
  16. data/lib/coverband/middleware.rb +5 -5
  17. data/lib/coverband/reporters/base.rb +26 -31
  18. data/lib/coverband/reporters/console_report.rb +2 -3
  19. data/lib/coverband/reporters/simple_cov_report.rb +5 -6
  20. data/lib/coverband/s3_report_writer.rb +7 -8
  21. data/lib/coverband/s3_web.rb +3 -5
  22. data/lib/coverband/tasks.rb +23 -26
  23. data/lib/coverband/version.rb +3 -1
  24. data/test/benchmarks/benchmark.rake +38 -32
  25. data/test/benchmarks/dog.rb +3 -3
  26. data/test/fake_app/basic_rack.rb +4 -2
  27. data/test/test_helper.rb +17 -11
  28. data/test/unit/adapters_file_store_test.rb +12 -11
  29. data/test/unit/adapters_memory_cache_store_test.rb +3 -4
  30. data/test/unit/adapters_redis_store_test.rb +42 -118
  31. data/test/unit/baseline_test.rb +17 -20
  32. data/test/unit/collectors_base_test.rb +96 -0
  33. data/test/unit/collectors_coverage_test.rb +137 -0
  34. data/test/unit/collectors_trace_test.rb +96 -0
  35. data/test/unit/configuration_test.rb +8 -8
  36. data/test/unit/dog.rb +3 -1
  37. data/test/unit/middleware_test.rb +70 -61
  38. data/test/unit/reports_base_test.rb +62 -62
  39. data/test/unit/reports_console_test.rb +18 -21
  40. data/test/unit/reports_simple_cov_test.rb +23 -26
  41. data/test/unit/s3_report_writer_test.rb +6 -8
  42. data/test/unit/s3_web_test.rb +2 -1
  43. metadata +45 -25
  44. data/lib/coverband/base.rb +0 -210
  45. data/test/unit/base_test.rb +0 -100
@@ -1,8 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require File.expand_path('../test_helper', File.dirname(__FILE__))
2
4
 
3
5
  module Coverband
4
6
  class MemoryCacheStoreTest < Test::Unit::TestCase
5
-
6
7
  def setup
7
8
  Adapters::MemoryCacheStore.reset!
8
9
  @store = mock('store')
@@ -46,12 +47,10 @@ module Coverband
46
47
  end
47
48
 
48
49
  test 'it initializes cache with what is in store' do
49
- @store.expects(:covered_lines_for_file).with('file1').returns [3,5]
50
+ @store.expects(:covered_lines_for_file).with('file1').returns [3, 5]
50
51
  @store.expects(:covered_lines_for_file).with('file2').returns [2]
51
52
  @store.expects(:save_report).with('file2' => { 1 => 1 })
52
53
  @memory_store.save_report data
53
54
  end
54
-
55
55
  end
56
-
57
56
  end
@@ -1,37 +1,42 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require File.expand_path('../test_helper', File.dirname(__FILE__))
2
4
 
3
5
  class RedisTest < Test::Unit::TestCase
4
6
  BASE_KEY = Coverband::Adapters::RedisStore::BASE_KEY
5
7
 
8
+ def example_hash
9
+ {'1' => '1', '2' => '2'}
10
+ end
11
+
6
12
  def setup
7
13
  @redis = Redis.new
8
14
  @redis.flushdb
9
- @store = Coverband::Adapters::RedisStore.new(@redis, array: true)
15
+ @store = Coverband::Adapters::RedisStore.new(@redis)
10
16
  end
11
17
 
12
18
  def test_coverage
13
19
  @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]}
20
+ @store.send(:store_map, "#{BASE_KEY}.dog.rb", example_hash)
21
+ expected = { 'dog.rb' => example_hash }
17
22
  assert_equal expected, @store.coverage
18
23
  end
19
24
 
20
25
  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
26
+ @store.send(:store_map, "#{BASE_KEY}.dog.rb", example_hash)
27
+ assert_equal [["1", "1"], ["2", "2"]], @store.covered_lines_for_file('dog.rb').sort
24
28
  end
25
29
 
26
30
  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"]]
31
+ @redis.mapped_hmset("#{BASE_KEY}.dog.rb", '1' => 1, '2' => 2)
32
+ @store = Coverband::Adapters::RedisStore.new(@redis)
33
+ expected = [%w[1 1], %w[2 2]]
30
34
  assert_equal expected, @store.covered_lines_for_file('dog.rb').sort
31
35
  end
32
36
 
33
37
  def test_covered_lines_when_null
34
- assert_equal @store.covered_lines_for_file('dog.rb'), []
38
+ empty_hash = {}
39
+ assert_equal empty_hash, @store.covered_lines_for_file('dog.rb')
35
40
  end
36
41
 
37
42
  def test_clear
@@ -44,121 +49,40 @@ class RedisTest < Test::Unit::TestCase
44
49
 
45
50
  def test_data
46
51
  {
47
- "/Users/danmayer/projects/cover_band_server/app.rb" => { 54 => 1, 55 => 2 },
48
- "/Users/danmayer/projects/cover_band_server/server.rb" => { 5 => 1 }
52
+ '/Users/danmayer/projects/cover_band_server/app.rb' => { 54 => 1, 55 => 2 },
53
+ '/Users/danmayer/projects/cover_band_server/server.rb' => { 5 => 1 }
49
54
  }
50
55
  end
51
56
  end
52
57
 
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
58
  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)
59
+ def setup
60
+ @redis = Redis.current.tap do |redis|
61
+ redis.stubs(:sadd).with(anything, anything)
144
62
  end
145
- end
146
63
 
147
- class RedisStoreTestV222 < RedisTest
64
+ @store = Coverband::Adapters::RedisStore.new(@redis)
65
+ end
148
66
 
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
- }
67
+ test 'it stores the files into coverband' do
68
+ @redis.expects(:sadd).with(BASE_KEY, [
69
+ '/Users/danmayer/projects/cover_band_server/app.rb',
70
+ '/Users/danmayer/projects/cover_band_server/server.rb'
71
+ ])
154
72
 
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')
73
+ @store.save_report(test_data)
74
+ end
161
75
 
162
- @store.save_report(test_data)
163
- end
76
+ test 'it stores the file lines of the file app.rb' do
77
+ @redis.expects(:mapped_hmset).with(
78
+ "#{BASE_KEY}./Users/danmayer/projects/cover_band_server/app.rb",
79
+ '54' => 1, '55' => 2
80
+ )
81
+ @redis.expects(:mapped_hmset).with(
82
+ "#{BASE_KEY}./Users/danmayer/projects/cover_band_server/server.rb",
83
+ '5' => 1
84
+ )
85
+
86
+ @store.save_report(test_data)
87
+ end
164
88
  end
@@ -1,8 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require File.expand_path('../test_helper', File.dirname(__FILE__))
2
4
 
3
5
  class ReporterTest < Test::Unit::TestCase
4
-
5
- test "record baseline" do
6
+ test 'record baseline' do
6
7
  Coverband.configure do |config|
7
8
  config.redis = nil
8
9
  config.store = nil
@@ -10,20 +11,20 @@ class ReporterTest < Test::Unit::TestCase
10
11
  config.coverage_file = '/tmp/fake_file.json'
11
12
  end
12
13
  Coverage.expects(:start).returns(true).at_least_once
13
- Coverage.expects(:result).returns({'fake' => [0,1]}).at_least_once
14
+ Coverage.expects(:result).returns('fake' => [0, 1]).at_least_once
14
15
  File.expects(:open).once
15
16
 
16
17
  File.expects(:exist?).at_least_once.returns(true)
17
- expected = {"filename.rb" => [0,nil,1]}
18
+ expected = { 'filename.rb' => [0, nil, 1] }
18
19
  fake_file_data = expected.to_json
19
20
  File.expects(:read).at_least_once.returns(fake_file_data)
20
21
 
21
- Coverband::Baseline.record{
22
- #nothing
23
- }
22
+ Coverband::Baseline.record do
23
+ # nothing
24
+ end
24
25
  end
25
26
 
26
- test "parse baseline" do
27
+ test 'parse baseline' do
27
28
  Coverband.configure do |config|
28
29
  config.redis = nil
29
30
  config.store = nil
@@ -31,14 +32,14 @@ class ReporterTest < Test::Unit::TestCase
31
32
  config.coverage_file = '/tmp/fake_file.json'
32
33
  end
33
34
  File.expects(:exist?).at_least_once.returns(true)
34
- expected = {"filename.rb" => [0,nil,1]}
35
+ expected = { 'filename.rb' => [0, nil, 1] }
35
36
  fake_file_data = expected.to_json
36
37
  File.expects(:read).at_least_once.returns(fake_file_data)
37
38
  results = Coverband::Baseline.parse_baseline
38
- assert_equal(results, {"filename.rb" => [0,nil,1]})
39
+ assert_equal(results, 'filename.rb' => [0, nil, 1])
39
40
  end
40
41
 
41
- test "exclude_files" do
42
+ test 'exclude_files' do
42
43
  Coverband.configure do |config|
43
44
  config.redis = nil
44
45
  config.store = nil
@@ -48,17 +49,13 @@ class ReporterTest < Test::Unit::TestCase
48
49
  end
49
50
  root = Coverband.configuration.root
50
51
  files = [root + '/ignored_file.rb', root + '/fakefile.rb']
51
- expected_files =[root + '/fakefile.rb']
52
+ expected_files = [root + '/fakefile.rb']
52
53
  assert_equal(expected_files, Coverband::Baseline.exclude_files(files))
53
54
  end
54
-
55
- # todo test redis and file stores baseline
56
-
57
- test "convert_coverage_format" do
58
- results = {"fake_file.rb" => [1,nil,0,2]}
59
- expected = {"fake_file.rb"=>{1=>1, 3=>0, 4=>2}}
55
+
56
+ test 'convert_coverage_format' do
57
+ results = { 'fake_file.rb' => [1, nil, 0, 2] }
58
+ expected = { 'fake_file.rb' => { 1 => 1, 3 => 0, 4 => 2 } }
60
59
  assert_equal(expected, Coverband::Baseline.convert_coverage_format(results))
61
60
  end
62
-
63
-
64
61
  end
@@ -0,0 +1,96 @@
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path('../test_helper', File.dirname(__FILE__))
4
+ require File.expand_path('./dog', File.dirname(__FILE__))
5
+
6
+ class CollectorsBaseTest < Test::Unit::TestCase
7
+ test 'defaults to a redis store' do
8
+ coverband = Coverband::Collectors::Base.instance.reset_instance
9
+ assert_equal Coverband::Adapters::RedisStore, coverband.instance_variable_get('@store').class
10
+ end
11
+
12
+ test 'configure memory caching' do
13
+ Coverband.configuration.memory_caching = true
14
+ coverband = Coverband::Collectors::Base.instance.reset_instance
15
+ assert_equal Coverband::Adapters::MemoryCacheStore, coverband.instance_variable_get('@store').class
16
+ Coverband.configuration.memory_caching = false
17
+ end
18
+
19
+ test 'start should enable coverage' do
20
+ coverband = Coverband::Collectors::Base.instance.reset_instance
21
+ assert_equal false, coverband.instance_variable_get('@enabled')
22
+ coverband.expects(:record_coverage).once
23
+ coverband.start
24
+ assert_equal true, coverband.instance_variable_get('@enabled')
25
+ end
26
+
27
+ test 'stop should disable coverage' do
28
+ coverband = Coverband::Collectors::Base.instance.reset_instance
29
+ assert_equal false, coverband.instance_variable_get('@enabled')
30
+ coverband.expects(:record_coverage).once
31
+ coverband.start
32
+ assert_equal true, coverband.instance_variable_get('@enabled')
33
+ coverband.stop
34
+ assert_equal false, coverband.instance_variable_get('@enabled')
35
+ assert_equal false, coverband.instance_variable_get('@tracer_set')
36
+ end
37
+
38
+ test 'allow for sampling with a block and enable when 100 percent sample' do
39
+ logger = Logger.new(STDOUT)
40
+ coverband = Coverband::Collectors::Base.instance.reset_instance
41
+ coverband.instance_variable_set('@sample_percentage', 100.0)
42
+ coverband.instance_variable_set('@verbose', true)
43
+ coverband.instance_variable_set('@logger', logger)
44
+ coverband.instance_variable_set('@store', nil)
45
+ assert_equal false, coverband.instance_variable_get('@enabled')
46
+ logger.expects(:info).at_least_once
47
+ coverband.sample { 1 + 1 }
48
+ assert_equal true, coverband.instance_variable_get('@enabled')
49
+ end
50
+
51
+ test 'allow reporting with start stop save' do
52
+ logger = Logger.new(STDOUT)
53
+ coverband = Coverband::Collectors::Base.instance.reset_instance
54
+ coverband.instance_variable_set('@sample_percentage', 100.0)
55
+ coverband.instance_variable_set('@verbose', true)
56
+ coverband.instance_variable_set('@logger', logger)
57
+ coverband.instance_variable_set('@store', nil)
58
+ assert_equal false, coverband.instance_variable_get('@enabled')
59
+ logger.expects(:info).at_least_once
60
+ coverband.start
61
+ logger.info(1 + 1)
62
+ coverband.stop
63
+ coverband.save
64
+ end
65
+
66
+ test 'allow reporting to redis start stop save' do
67
+ dog_file = File.expand_path('./dog.rb', File.dirname(__FILE__))
68
+ coverband = Coverband::Collectors::Base.instance.reset_instance
69
+ coverband.instance_variable_set('@sample_percentage', 100.0)
70
+ coverband.instance_variable_set('@verbose', true)
71
+ Coverband.configuration.logger.stubs('info')
72
+ store = Coverband::Adapters::RedisStore.new(Redis.new)
73
+ coverband.instance_variable_set('@store', store)
74
+ store.expects(:save_report).once.with(has_entries(dog_file => { 5 => 5 }))
75
+ assert_equal false, coverband.instance_variable_get('@enabled')
76
+ coverband.start
77
+ 5.times { Dog.new.bark }
78
+ coverband.stop
79
+ coverband.save
80
+ end
81
+
82
+ test 'tracer should count line numbers' do
83
+ dog_file = File.expand_path('./dog.rb', File.dirname(__FILE__))
84
+ coverband = Coverband::Collectors::Base.instance.reset_instance
85
+ coverband.start
86
+ 100.times { Dog.new.bark }
87
+ assert_equal 100, coverband.instance_variable_get('@file_line_usage')[dog_file][5]
88
+ coverband.stop
89
+ coverband.save
90
+ end
91
+
92
+ test 'sample should return the result of the block' do
93
+ coverband = Coverband::Collectors::Base.instance.reset_instance
94
+ assert_equal 2, coverband.sample { 1 + 1 }
95
+ end
96
+ end
@@ -0,0 +1,137 @@
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path('../test_helper', File.dirname(__FILE__))
4
+ require File.expand_path('./dog', File.dirname(__FILE__))
5
+
6
+ if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.3.0')
7
+ class CollectorsCoverageTest < Test::Unit::TestCase
8
+ attr_accessor :coverband
9
+
10
+ def setup
11
+ Thread.current[:coverband_instance] = nil
12
+ Coverband.configure do |config|
13
+ config.collector = 'coverage'
14
+ end
15
+ @coverband = Coverband::Collectors::Base.instance.reset_instance
16
+ end
17
+
18
+ def teardown
19
+ Thread.current[:coverband_instance] = nil
20
+ Coverband.configure do |config|
21
+ config.collector = 'trace'
22
+ end
23
+ @coverband = Coverband::Collectors::Base.instance.reset_instance
24
+ end
25
+
26
+ test 'gets coverage instance' do
27
+ assert_equal Coverband::Collectors::Coverage, coverband.class
28
+ end
29
+
30
+ test 'defaults to a redis store' do
31
+ assert_equal Coverband::Adapters::RedisStore, coverband.instance_variable_get('@store').class
32
+ end
33
+
34
+ test 'configure memory caching' do
35
+ Coverband.configuration.memory_caching = true
36
+ coverband = Coverband::Collectors::Base.instance.reset_instance
37
+ assert_equal Coverband::Adapters::MemoryCacheStore, coverband.instance_variable_get('@store').class
38
+ Coverband.configuration.memory_caching = false
39
+ end
40
+
41
+ test 'start should enable coverage' do
42
+ assert_equal false, coverband.instance_variable_get('@enabled')
43
+ coverband.expects(:record_coverage).once
44
+ coverband.start
45
+ assert_equal true, coverband.instance_variable_get('@enabled')
46
+ end
47
+
48
+ test 'stop should disable coverage' do
49
+ assert_equal false, coverband.instance_variable_get('@enabled')
50
+ coverband.expects(:record_coverage).once
51
+ coverband.start
52
+ assert_equal true, coverband.instance_variable_get('@enabled')
53
+ coverband.stop
54
+ assert_equal false, coverband.instance_variable_get('@enabled')
55
+ end
56
+
57
+ test 'allow for sampling with a block and enable when 100 percent sample' do
58
+ logger = Logger.new(STDOUT)
59
+ coverband.instance_variable_set('@sample_percentage', 100.0)
60
+ coverband.instance_variable_set('@verbose', true)
61
+ coverband.instance_variable_set('@logger', logger)
62
+ coverband.instance_variable_set('@store', nil)
63
+ assert_equal false, coverband.instance_variable_get('@enabled')
64
+ logger.expects(:info).at_least_once
65
+ coverband.sample { 1 + 1 }
66
+ assert_equal true, coverband.instance_variable_get('@enabled')
67
+ end
68
+
69
+ test 'allow reporting with start stop save' do
70
+ logger = Logger.new(STDOUT)
71
+ coverband.instance_variable_set('@sample_percentage', 100.0)
72
+ coverband.instance_variable_set('@verbose', true)
73
+ coverband.instance_variable_set('@logger', logger)
74
+ coverband.instance_variable_set('@store', nil)
75
+ assert_equal false, coverband.instance_variable_get('@enabled')
76
+ logger.expects(:info).at_least_once
77
+ coverband.start
78
+ logger.info(1 + 1)
79
+ coverband.stop
80
+ coverband.save
81
+ end
82
+
83
+ test 'allow reporting to redis start stop save' do
84
+ dog_file = File.expand_path('./dog.rb', File.dirname(__FILE__))
85
+ coverband.instance_variable_set('@sample_percentage', 100.0)
86
+ coverband.instance_variable_set('@verbose', true)
87
+ Coverband.configuration.logger.stubs('info')
88
+ store = Coverband::Adapters::RedisStore.new(Redis.new)
89
+ coverband.instance_variable_set('@store', store)
90
+
91
+ prior = Coverage.peek_result[dog_file].dup
92
+ prior[4] = prior[4] + 5
93
+ expected = {}
94
+ prior.each_with_index do |count, index|
95
+ expected[(index + 1)] = count if count
96
+ end
97
+
98
+ store.expects(:save_report).once.with(has_entries(dog_file => expected))
99
+ assert_equal false, coverband.instance_variable_get('@enabled')
100
+ coverband.start
101
+ 5.times { Dog.new.bark }
102
+ coverband.stop
103
+ coverband.save
104
+ end
105
+
106
+ test 'coverage should count line numbers only the new calls' do
107
+ dog_file = File.expand_path('./dog.rb', File.dirname(__FILE__))
108
+ coverband.instance_variable_set('@sample_percentage', 100.0)
109
+ coverband.instance_variable_set('@store', nil)
110
+ original_count = Coverage.peek_result[dog_file][4]
111
+ coverband.start
112
+ 100.times { Dog.new.bark }
113
+ coverband.stop
114
+ coverband.save
115
+ assert_equal (original_count + 100), coverband.instance_variable_get('@file_line_usage')[dog_file][5]
116
+ 50.times { Dog.new.bark }
117
+ coverband.save
118
+ assert_equal 50, coverband.instance_variable_get('@file_line_usage')[dog_file][5]
119
+ end
120
+
121
+ test 'coverage should count line numbers' do
122
+ dog_file = File.expand_path('./dog.rb', File.dirname(__FILE__))
123
+ coverband.instance_variable_set('@sample_percentage', 100.0)
124
+ coverband.instance_variable_set('@store', nil)
125
+ original_count = Coverage.peek_result[dog_file][4]
126
+ coverband.start
127
+ 100.times { Dog.new.bark }
128
+ coverband.stop
129
+ coverband.save
130
+ assert_equal (original_count + 100), coverband.instance_variable_get('@file_line_usage')[dog_file][5]
131
+ end
132
+
133
+ test 'sample should return the result of the block' do
134
+ assert_equal 2, coverband.sample { 1 + 1 }
135
+ end
136
+ end
137
+ end