forking_test_runner 1.7.0 → 1.12.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5941690d477f2dcded481eb639078719303e399fce77bf0f3dfd4a8d29281466
4
- data.tar.gz: 4d007910130e2d2f7444df0bad571f23d623dbe63609e3f5389bdd2ebfa838ce
3
+ metadata.gz: be87df3e12024204491610717130bc0b71a3b7fc02d6a60c82da34ebedbf74c6
4
+ data.tar.gz: 4e6fb9c449dc7e00c46e39fdbc7686bcfe0bf1df439c800e78767950a517f6c4
5
5
  SHA512:
6
- metadata.gz: bc9419382a7dadaa81fad1b498d2ed3b5cd6b8c4bfa4727b1bddee0203b3ed1a87133218fd4610e2adf94043cb2be07ac733fc92613ffc9d83cfef05468c330c
7
- data.tar.gz: 247bec8782245d23d487e32e2b65a1bd8eee0f04458abf8f66c14cec083de865f4cc107af370b39f837dcc674f18d3c67075eb293616ea2a4a6f79457b14d2ef
6
+ metadata.gz: 323f765b32f2ed37f62a82dfff10b6bdc7c0c8670a441f340f2a910d8dfb17a9660726698b8c34dfb89522246003e8c7fde4a205d17b8511c3ec432027604a65
7
+ data.tar.gz: ad243eb959c09b3bac8d58da961adec4c34b92844b239da2e541d599e2f1b78d738bdc3cc5db7b44c4817e18aa99be86d5adb74bac2e5614c01b57c027a0b562
@@ -8,6 +8,7 @@ require 'tempfile'
8
8
 
9
9
  module ForkingTestRunner
10
10
  CLEAR = "------"
11
+ CONVERAGE_REPORT_PREFIX = "coverage/fork-"
11
12
 
12
13
  class << self
13
14
  def cli(argv)
@@ -79,6 +80,8 @@ module ForkingTestRunner
79
80
  record_test_runtime(mode, results, log)
80
81
  end
81
82
 
83
+ summarize_partial_reports if partial_reports_for_single_cov?
84
+
82
85
  # exit with success or failure
83
86
  success ? 0 : 1
84
87
  end
@@ -250,7 +253,7 @@ module ForkingTestRunner
250
253
  def fork_with_captured_stdout
251
254
  rpipe, wpipe = IO.pipe
252
255
 
253
- child = fork do
256
+ child = Process.fork do
254
257
  rpipe.close
255
258
  preserve_tty { $stdout.reopen(wpipe) }
256
259
  yield
@@ -279,7 +282,13 @@ module ForkingTestRunner
279
282
  def run_test(file)
280
283
  stdout = change_program_name_to file do
281
284
  fork_with_captured_stdout do
282
- SimpleCov.pid = Process.pid if defined?(SimpleCov) && SimpleCov.respond_to?(:pid=) # trick simplecov into reporting in this fork
285
+ if defined?(SimpleCov)
286
+ SimpleCov.pid = Process.pid
287
+ SimpleCov.command_name file
288
+ end
289
+ if partial_reports_for_single_cov?
290
+ SingleCov.coverage_report = "#{CONVERAGE_REPORT_PREFIX}#{Process.pid}.json"
291
+ end
283
292
  if active_record?
284
293
  key = (ActiveRecord::VERSION::STRING >= "4.1.0" ? :test : "test")
285
294
  ActiveRecord::Base.establish_connection key
@@ -291,6 +300,10 @@ module ForkingTestRunner
291
300
  [$?.success?, stdout]
292
301
  end
293
302
 
303
+ def partial_reports_for_single_cov?
304
+ @options.fetch(:merge_coverage) && defined?(SingleCov) && SingleCov.respond_to?(:coverage_report=) && SingleCov.coverage_report
305
+ end
306
+
294
307
  def change_program_name_to(name)
295
308
  return yield if @options.fetch(:parallel)
296
309
  begin
@@ -351,5 +364,28 @@ module ForkingTestRunner
351
364
  end
352
365
  end
353
366
  end
367
+
368
+ def summarize_partial_reports
369
+ reports = Dir.glob("#{CONVERAGE_REPORT_PREFIX}*")
370
+ return if reports.empty?
371
+ key = nil
372
+
373
+ require "json" # not a global dependency
374
+ coverage = reports.each_with_object({}) do |report, all|
375
+ data = JSON.parse(File.read(report), symbolize_names: true)
376
+ key ||= data.keys.first
377
+ suites = data.values
378
+ raise "Unsupported number of suites #{suites.size}" if suites.size != 1
379
+ all.replace CoverageCapture.merge_coverage(all, suites.first.fetch(:coverage))
380
+ ensure
381
+ File.unlink(report) # do not leave junk behind
382
+ end
383
+
384
+ data = JSON.pretty_generate(key => {"coverage" => coverage, "timestamp" => Time.now.to_i })
385
+ File.write(SingleCov.coverage_report, data)
386
+
387
+ # make it not override our report when it finishes for main process
388
+ SingleCov.coverage_report = nil
389
+ end
354
390
  end
355
391
  end
@@ -7,7 +7,7 @@ module ForkingTestRunner
7
7
  [:quiet, "--quiet", "Quiet"],
8
8
  [:no_fixtures, "--no-fixtures", "Do not load fixtures"],
9
9
  [:no_ar, "--no-ar", "Disable ActiveRecord logic"],
10
- [:merge_coverage, "--merge-coverage", "Merge base code coverage into indvidual files coverage, great for SingleCov"],
10
+ [:merge_coverage, "--merge-coverage", "Merge base code coverage into individual files coverage and summarize coverage report"],
11
11
  [
12
12
  :record_runtime,
13
13
  "--record-runtime=MODE",
@@ -1,3 +1,3 @@
1
1
  module ForkingTestRunner
2
- VERSION = "1.7.0"
2
+ VERSION = "1.12.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: forking_test_runner
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.0
4
+ version: 1.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Grosser
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-23 00:00:00.000000000 Z
11
+ date: 2021-05-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parallel_tests
@@ -24,20 +24,6 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 1.3.7
27
- - !ruby/object:Gem::Dependency
28
- name: wwtd
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: bump
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -133,14 +119,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
133
119
  requirements:
134
120
  - - ">="
135
121
  - !ruby/object:Gem::Version
136
- version: 2.3.0
122
+ version: 2.5.0
137
123
  required_rubygems_version: !ruby/object:Gem::Requirement
138
124
  requirements:
139
125
  - - ">="
140
126
  - !ruby/object:Gem::Version
141
127
  version: '0'
142
128
  requirements: []
143
- rubygems_version: 3.1.3
129
+ rubygems_version: 3.2.16
144
130
  signing_key:
145
131
  specification_version: 4
146
132
  summary: Run every test in a fork to avoid pollution and get clean output per test