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.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +29 -9
  3. data/.travis.yml +10 -1
  4. data/Gemfile +3 -1
  5. data/Gemfile.rails4 +1 -0
  6. data/README.md +40 -15
  7. data/Rakefile +14 -3
  8. data/changes.md +47 -12
  9. data/coverband.gemspec +3 -1
  10. data/lib/coverband/adapters/base.rb +60 -36
  11. data/lib/coverband/adapters/file_store.rb +8 -8
  12. data/lib/coverband/adapters/redis_store.rb +18 -10
  13. data/lib/coverband/at_exit.rb +2 -11
  14. data/lib/coverband/collectors/coverage.rb +32 -36
  15. data/lib/coverband/collectors/delta.rb +34 -28
  16. data/lib/coverband/configuration.rb +76 -32
  17. data/lib/coverband/integrations/background.rb +8 -4
  18. data/lib/coverband/integrations/{middleware.rb → background_middleware.rb} +2 -6
  19. data/lib/coverband/integrations/bundler.rb +8 -0
  20. data/lib/coverband/integrations/report_middleware.rb +15 -0
  21. data/lib/coverband/integrations/resque.rb +3 -5
  22. data/lib/coverband/reporters/base.rb +39 -14
  23. data/lib/coverband/reporters/html_report.rb +21 -27
  24. data/lib/coverband/reporters/web.rb +13 -21
  25. data/lib/coverband/utils/file_list.rb +16 -5
  26. data/lib/coverband/utils/file_path_helper.rb +14 -3
  27. data/lib/coverband/utils/html_formatter.rb +25 -8
  28. data/lib/coverband/utils/lines_classifier.rb +5 -0
  29. data/lib/coverband/utils/railtie.rb +11 -12
  30. data/lib/coverband/utils/result.rb +1 -37
  31. data/lib/coverband/utils/results.rb +51 -0
  32. data/lib/coverband/utils/source_file.rb +31 -6
  33. data/lib/coverband/utils/tasks.rb +9 -10
  34. data/lib/coverband/version.rb +1 -1
  35. data/lib/coverband.rb +32 -21
  36. data/public/application.js +27 -0
  37. data/test/benchmarks/benchmark.rake +144 -26
  38. data/test/coverband/adapters/base_test.rb +73 -42
  39. data/test/coverband/adapters/file_store_test.rb +48 -37
  40. data/test/coverband/adapters/redis_store_test.rb +41 -10
  41. data/test/coverband/at_exit_test.rb +0 -2
  42. data/test/coverband/collectors/coverage_test.rb +57 -9
  43. data/test/coverband/collectors/delta_test.rb +36 -6
  44. data/test/coverband/configuration_test.rb +47 -7
  45. data/test/coverband/coverband_test.rb +14 -2
  46. data/test/coverband/integrations/background_middleware_test.rb +44 -0
  47. data/test/coverband/integrations/background_test.rb +1 -3
  48. data/test/coverband/integrations/report_middleware_test.rb +44 -0
  49. data/test/coverband/integrations/resque_worker_test.rb +4 -3
  50. data/test/coverband/integrations/test_resque_job.rb +3 -1
  51. data/test/coverband/reporters/base_test.rb +4 -4
  52. data/test/coverband/reporters/console_test.rb +1 -2
  53. data/test/coverband/reporters/html_test.rb +58 -19
  54. data/test/coverband/reporters/web_test.rb +0 -10
  55. data/test/coverband/utils/file_groups_test.rb +11 -5
  56. data/test/coverband/utils/file_list_test.rb +5 -5
  57. data/test/coverband/utils/html_formatter_test.rb +43 -0
  58. data/test/coverband/utils/result_test.rb +6 -47
  59. data/test/coverband/utils/results_test.rb +54 -0
  60. data/test/coverband/utils/s3_report_test.rb +2 -0
  61. data/test/coverband/utils/source_file_test.rb +50 -0
  62. data/test/dog.rb.erb +12 -0
  63. data/test/forked/rails_full_stack_test.rb +106 -0
  64. data/test/forked/rails_rake_full_stack_test.rb +40 -0
  65. data/test/integration/full_stack_test.rb +17 -15
  66. data/test/rails4_dummy/Rakefile +6 -0
  67. data/test/rails4_dummy/config/application.rb +8 -9
  68. data/test/rails4_dummy/config/coverband.rb +5 -3
  69. data/test/rails5_dummy/Rakefile +6 -0
  70. data/test/rails5_dummy/config/application.rb +6 -10
  71. data/test/rails5_dummy/config/coverband.rb +4 -2
  72. data/test/rails_test_helper.rb +22 -5
  73. data/test/test_helper.rb +42 -4
  74. data/test/unique_files.rb +17 -9
  75. data/views/file_list.erb +2 -2
  76. data/views/gem_list.erb +10 -1
  77. data/views/layout.erb +10 -3
  78. data/views/source_file.erb +13 -4
  79. data/views/source_file_loader.erb +1 -1
  80. metadata +52 -9
  81. data/test/coverband/integrations/middleware_test.rb +0 -96
  82. data/test/integration/rails_full_stack_test.rb +0 -95
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coverband
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.0
4
+ version: 4.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Mayer
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-04-24 00:00:00.000000000 Z
12
+ date: 2019-06-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: aws-sdk-s3
@@ -95,6 +95,20 @@ dependencies:
95
95
  - - ">="
96
96
  - !ruby/object:Gem::Version
97
97
  version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: minitest-fork_executor
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
98
112
  - !ruby/object:Gem::Dependency
99
113
  name: mocha
100
114
  requirement: !ruby/object:Gem::Requirement
@@ -165,6 +179,20 @@ dependencies:
165
179
  - - ">="
166
180
  - !ruby/object:Gem::Version
167
181
  version: '0'
182
+ - !ruby/object:Gem::Dependency
183
+ name: rubocop
184
+ requirement: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - ">="
187
+ - !ruby/object:Gem::Version
188
+ version: '0'
189
+ type: :development
190
+ prerelease: false
191
+ version_requirements: !ruby/object:Gem::Requirement
192
+ requirements:
193
+ - - ">="
194
+ - !ruby/object:Gem::Version
195
+ version: '0'
168
196
  - !ruby/object:Gem::Dependency
169
197
  name: minitest-reporters
170
198
  requirement: !ruby/object:Gem::Requirement
@@ -277,8 +305,10 @@ files:
277
305
  - lib/coverband/collectors/delta.rb
278
306
  - lib/coverband/configuration.rb
279
307
  - lib/coverband/integrations/background.rb
280
- - lib/coverband/integrations/middleware.rb
308
+ - lib/coverband/integrations/background_middleware.rb
309
+ - lib/coverband/integrations/bundler.rb
281
310
  - lib/coverband/integrations/rack_server_check.rb
311
+ - lib/coverband/integrations/report_middleware.rb
282
312
  - lib/coverband/integrations/resque.rb
283
313
  - lib/coverband/reporters/base.rb
284
314
  - lib/coverband/reporters/console_report.rb
@@ -336,9 +366,10 @@ files:
336
366
  - test/coverband/collectors/delta_test.rb
337
367
  - test/coverband/configuration_test.rb
338
368
  - test/coverband/coverband_test.rb
369
+ - test/coverband/integrations/background_middleware_test.rb
339
370
  - test/coverband/integrations/background_test.rb
340
- - test/coverband/integrations/middleware_test.rb
341
371
  - test/coverband/integrations/rack_server_check_test.rb
372
+ - test/coverband/integrations/report_middleware_test.rb
342
373
  - test/coverband/integrations/resque_worker_test.rb
343
374
  - test/coverband/integrations/test_resque_job.rb
344
375
  - test/coverband/reporters/base_test.rb
@@ -348,12 +379,15 @@ files:
348
379
  - test/coverband/utils/file_groups_test.rb
349
380
  - test/coverband/utils/file_list_test.rb
350
381
  - test/coverband/utils/gem_list_test.rb
382
+ - test/coverband/utils/html_formatter_test.rb
351
383
  - test/coverband/utils/lines_classifier_test.rb
352
384
  - test/coverband/utils/result_test.rb
385
+ - test/coverband/utils/results_test.rb
353
386
  - test/coverband/utils/s3_report_test.rb
354
387
  - test/coverband/utils/source_file_line_test.rb
355
388
  - test/coverband/utils/source_file_test.rb
356
389
  - test/dog.rb
390
+ - test/dog.rb.erb
357
391
  - test/fake_app/basic_rack.rb
358
392
  - test/fixtures/app/controllers/sample_controller.rb
359
393
  - test/fixtures/app/models/user.rb
@@ -362,8 +396,10 @@ files:
362
396
  - test/fixtures/skipped.rb
363
397
  - test/fixtures/skipped_and_executed.rb
364
398
  - test/fixtures/utf-8.rb
399
+ - test/forked/rails_full_stack_test.rb
400
+ - test/forked/rails_rake_full_stack_test.rb
365
401
  - test/integration/full_stack_test.rb
366
- - test/integration/rails_full_stack_test.rb
402
+ - test/rails4_dummy/Rakefile
367
403
  - test/rails4_dummy/app/controllers/dummy_controller.rb
368
404
  - test/rails4_dummy/config.ru
369
405
  - test/rails4_dummy/config/application.rb
@@ -373,6 +409,7 @@ files:
373
409
  - test/rails4_dummy/config/routes.rb
374
410
  - test/rails4_dummy/config/secrets.yml
375
411
  - test/rails4_dummy/tmp/.keep
412
+ - test/rails5_dummy/Rakefile
376
413
  - test/rails5_dummy/app/controllers/dummy_controller.rb
377
414
  - test/rails5_dummy/config.ru
378
415
  - test/rails5_dummy/config/application.rb
@@ -408,8 +445,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
408
445
  - !ruby/object:Gem::Version
409
446
  version: '0'
410
447
  requirements: []
411
- rubyforge_project:
412
- rubygems_version: 2.7.8
448
+ rubygems_version: 3.0.3
413
449
  signing_key:
414
450
  specification_version: 4
415
451
  summary: Rack middleware to help measure production code usage (LOC runtime usage)
@@ -427,9 +463,10 @@ test_files:
427
463
  - test/coverband/collectors/delta_test.rb
428
464
  - test/coverband/configuration_test.rb
429
465
  - test/coverband/coverband_test.rb
466
+ - test/coverband/integrations/background_middleware_test.rb
430
467
  - test/coverband/integrations/background_test.rb
431
- - test/coverband/integrations/middleware_test.rb
432
468
  - test/coverband/integrations/rack_server_check_test.rb
469
+ - test/coverband/integrations/report_middleware_test.rb
433
470
  - test/coverband/integrations/resque_worker_test.rb
434
471
  - test/coverband/integrations/test_resque_job.rb
435
472
  - test/coverband/reporters/base_test.rb
@@ -439,12 +476,15 @@ test_files:
439
476
  - test/coverband/utils/file_groups_test.rb
440
477
  - test/coverband/utils/file_list_test.rb
441
478
  - test/coverband/utils/gem_list_test.rb
479
+ - test/coverband/utils/html_formatter_test.rb
442
480
  - test/coverband/utils/lines_classifier_test.rb
443
481
  - test/coverband/utils/result_test.rb
482
+ - test/coverband/utils/results_test.rb
444
483
  - test/coverband/utils/s3_report_test.rb
445
484
  - test/coverband/utils/source_file_line_test.rb
446
485
  - test/coverband/utils/source_file_test.rb
447
486
  - test/dog.rb
487
+ - test/dog.rb.erb
448
488
  - test/fake_app/basic_rack.rb
449
489
  - test/fixtures/app/controllers/sample_controller.rb
450
490
  - test/fixtures/app/models/user.rb
@@ -453,8 +493,10 @@ test_files:
453
493
  - test/fixtures/skipped.rb
454
494
  - test/fixtures/skipped_and_executed.rb
455
495
  - test/fixtures/utf-8.rb
496
+ - test/forked/rails_full_stack_test.rb
497
+ - test/forked/rails_rake_full_stack_test.rb
456
498
  - test/integration/full_stack_test.rb
457
- - test/integration/rails_full_stack_test.rb
499
+ - test/rails4_dummy/Rakefile
458
500
  - test/rails4_dummy/app/controllers/dummy_controller.rb
459
501
  - test/rails4_dummy/config.ru
460
502
  - test/rails4_dummy/config/application.rb
@@ -464,6 +506,7 @@ test_files:
464
506
  - test/rails4_dummy/config/routes.rb
465
507
  - test/rails4_dummy/config/secrets.yml
466
508
  - test/rails4_dummy/tmp/.keep
509
+ - test/rails5_dummy/Rakefile
467
510
  - test/rails5_dummy/app/controllers/dummy_controller.rb
468
511
  - test/rails5_dummy/config.ru
469
512
  - test/rails5_dummy/config/application.rb
@@ -1,96 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require File.expand_path('../../test_helper', File.dirname(__FILE__))
4
- require 'rack'
5
-
6
- class MiddlewareTest < Minitest::Test
7
- REDIS_STORAGE_FORMAT_VERSION = Coverband::Adapters::RedisStore::REDIS_STORAGE_FORMAT_VERSION
8
-
9
- def setup
10
- super
11
- Coverband.configure do |config|
12
- config.store = Coverband::Adapters::RedisStore.new(Redis.new)
13
- config.background_reporting_enabled = false
14
- end
15
- end
16
-
17
- test 'call app' do
18
- request = Rack::MockRequest.env_for('/anything.json')
19
- Coverband::Collectors::Coverage.instance.reset_instance
20
- middleware = Coverband::Middleware.new(fake_app)
21
- results = middleware.call(request)
22
- assert_equal '/anything.json', results.last
23
- end
24
-
25
- test 'pass all rack lint checks' do
26
- Coverband::Collectors::Coverage.instance.reset_instance
27
- app = Rack::Lint.new(Coverband::Middleware.new(fake_app))
28
- env = Rack::MockRequest.env_for('/hello')
29
- app.call(env)
30
- end
31
-
32
- test 'starts background reporter when configured' do
33
- request = Rack::MockRequest.env_for('/anything.json')
34
- Coverband.configuration.stubs(:background_reporting_enabled).returns(true)
35
- Coverband::Collectors::Coverage.instance.expects(:report_coverage).never
36
- Coverband::Background.expects(:start)
37
- middleware = Coverband::Middleware.new(fake_app)
38
- middleware.call(request)
39
- end
40
-
41
- test 'reports coverage when not set to background mode' do
42
- request = Rack::MockRequest.env_for('/anything.json')
43
- Coverband.configuration.stubs(:background_reporting_enabled).returns(false)
44
- Coverband::Collectors::Coverage.instance.expects(:report_coverage)
45
- Coverband::Background.expects(:start).never
46
- middleware = Coverband::Middleware.new(fake_app)
47
- middleware.call(request)
48
- end
49
-
50
- test 'never be report coverage with reporting_frequency of 0' do
51
- request = Rack::MockRequest.env_for('/anything.json')
52
- Coverband::Collectors::Coverage.instance.reset_instance
53
- collector = Coverband::Collectors::Coverage.instance
54
- collector.instance_variable_set('@reporting_frequency', 0.0)
55
- middleware = Coverband::Middleware.new(fake_app)
56
- store = Coverband::Collectors::Coverage.instance.instance_variable_get('@store')
57
- store.expects(:save_report).never
58
- middleware.call(request)
59
- end
60
-
61
- test 'always be enabled with sample percentage of 100' do
62
- request = Rack::MockRequest.env_for('/anything.json')
63
- Coverband::Collectors::Coverage.instance.reset_instance
64
- collector = Coverband::Collectors::Coverage.instance
65
- collector.report_coverage(true)
66
- collector.instance_variable_set('@reporting_frequency', 100.0)
67
- middleware = Coverband::Middleware.new(fake_app)
68
- store = Coverband::Collectors::Coverage.instance.instance_variable_get('@store')
69
- store.expects(:save_report).once
70
- middleware.call(request)
71
- end
72
-
73
- test 'reports coverage when an error is raised' do
74
- request = Rack::MockRequest.env_for('/anything.json')
75
- Coverband::Collectors::Coverage.instance.reset_instance
76
- Coverband::Collectors::Coverage.instance.expects(:report_coverage).once
77
- middleware = Coverband::Middleware.new(fake_app_raise_error)
78
- begin
79
- middleware.call(request)
80
- rescue StandardError
81
- nil
82
- end
83
- end
84
-
85
- private
86
-
87
- def fake_app
88
- @fake_app ||= lambda do |env|
89
- [200, { 'Content-Type' => 'text/plain' }, env['PATH_INFO']]
90
- end
91
- end
92
-
93
- def fake_app_raise_error
94
- @fake_app_raise_error ||= -> { raise 'hell' }
95
- end
96
- end
@@ -1,95 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require File.expand_path('../rails_test_helper', File.dirname(__FILE__))
4
-
5
- class RailsFullStackTest < Minitest::Test
6
- include Capybara::DSL
7
- include Capybara::Minitest::Assertions
8
-
9
- def setup
10
- super
11
- rails_setup
12
- # preload first coverage hit
13
- Coverband::Collectors::Coverage.instance.report_coverage(true)
14
- require 'rainbow'
15
- Rainbow('this text is red').red
16
- end
17
-
18
- def teardown
19
- super
20
- Capybara.reset_sessions!
21
- Capybara.use_default_driver
22
- end
23
-
24
- # We have to combine everything in one test
25
- # because we can only initialize rails once per test
26
- # run. Possibly fork test runs to avoid this problem in future?
27
- test 'this is how we do it' do
28
- visit '/dummy/show'
29
- Coverband.report_coverage(true)
30
- assert_content('I am no dummy')
31
- visit '/coverage'
32
- within page.find('a', text: /dummy_controller.rb/).find(:xpath, '../..') do
33
- assert_selector('td', text: '100.0 %')
34
- end
35
-
36
- #Test gems are reporting coverage
37
- assert_content('Gems')
38
- assert page.html.match('rainbow/wrapper.rb')
39
-
40
- #Test eager load data stored separately
41
- dummy_controller = "./test/rails#{Rails::VERSION::MAJOR}_dummy/app/controllers/dummy_controller.rb"
42
- store.type = :eager_loading
43
- eager_expected = [1, 1, 0, nil, nil]
44
- results = store.coverage[dummy_controller]['data']
45
- assert_equal(eager_expected, results)
46
-
47
- store.type = nil
48
- runtime_expected = [0, 0, 1, nil, nil]
49
- results = store.coverage[dummy_controller]['data']
50
- end
51
-
52
- ###
53
- # Please keep this test starting on line 22
54
- # as we run it in single test mode via the benchmarks.
55
- # Add new tests below this test
56
- ###
57
- test 'memory usage' do
58
- return unless ENV['COVERBAND_MEMORY_TEST']
59
- # we don't want this to run during our standard test suite
60
- # as the below profiler changes the runtime
61
- # and shold only be included for isolated processes
62
- begin
63
- require 'memory_profiler'
64
-
65
- # warmup
66
- 3.times do
67
- visit '/dummy/show'
68
- assert_content('I am no dummy')
69
- Coverband.report_coverage(true)
70
- end
71
-
72
- previous_out = $stdout
73
- capture = StringIO.new
74
- $stdout = capture
75
-
76
- MemoryProfiler.report do
77
- 15.times do
78
- visit '/dummy/show'
79
- assert_content('I am no dummy')
80
- Coverband.report_coverage(true)
81
- # this is expected to retain memory across requests
82
- # clear it to remove the false positive from test
83
- Coverband::Collectors::Coverage.instance.send(:add_previous_results, nil)
84
- end
85
- end.pretty_print
86
- data = $stdout.string
87
- $stdout = previous_out
88
- if data.match(/retained objects by gem(.*)retained objects by file/m)[0]&.match(/coverband/)
89
- raise 'leaking memory!!!'
90
- end
91
- ensure
92
- $stdout = previous_out
93
- end
94
- end
95
- end