forking_test_runner 1.5.1 → 1.9.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/lib/forking_test_runner.rb +41 -5
- data/lib/forking_test_runner/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 33abc47d33141843b1d89ce17adee27897c64bc3445d9567845194aaa9f07224
|
4
|
+
data.tar.gz: a61958472117f965f21e354ce7f874f7ea920a76503589b5dd36e0a6f21eb7c7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 59f31396b4c6ccdce8cb625aebdea2b3f2a49c6e91983990f2b93e386c19f8e6ef94100d8ca0482a0e82cec2450fb1a5db1a47c42566749b69d7324543676c87
|
7
|
+
data.tar.gz: 32bbc0a83affacf06da8943e9a592152841ead2d7180aabe201031934d68705ac9e769c9c75b33b13b0a4b1587f6795fb38bbdb44c145f4e5c3de74bd698dab3
|
data/lib/forking_test_runner.rb
CHANGED
@@ -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)
|
@@ -21,7 +22,7 @@ module ForkingTestRunner
|
|
21
22
|
if parallel && !@options.fetch(:group)
|
22
23
|
Array.new(parallel) { |i| find_tests_for_group(i + 1, parallel, tests, runtime_log) }
|
23
24
|
else
|
24
|
-
raise ArgumentError, "Use the same amount of processors as groups" if parallel && parallel !=
|
25
|
+
raise ArgumentError, "Use the same amount of processors as groups" if parallel && parallel != groups.count
|
25
26
|
groups.map { |group| find_tests_for_group(group, group_count, tests, runtime_log) }
|
26
27
|
end
|
27
28
|
|
@@ -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
|
@@ -252,8 +255,7 @@ module ForkingTestRunner
|
|
252
255
|
|
253
256
|
child = fork do
|
254
257
|
rpipe.close
|
255
|
-
$stdout.reopen(wpipe)
|
256
|
-
|
258
|
+
preserve_tty { $stdout.reopen(wpipe) }
|
257
259
|
yield
|
258
260
|
end
|
259
261
|
|
@@ -270,10 +272,20 @@ module ForkingTestRunner
|
|
270
272
|
buffer
|
271
273
|
end
|
272
274
|
|
275
|
+
# not tested via CI
|
276
|
+
def preserve_tty
|
277
|
+
was_tty = $stdout.tty?
|
278
|
+
yield
|
279
|
+
def $stdout.tty?; true; end if was_tty
|
280
|
+
end
|
281
|
+
|
273
282
|
def run_test(file)
|
274
283
|
stdout = change_program_name_to file do
|
275
284
|
fork_with_captured_stdout do
|
276
|
-
SimpleCov.pid = Process.pid if defined?(SimpleCov) && SimpleCov.respond_to?(:pid=) #
|
285
|
+
SimpleCov.pid = Process.pid if defined?(SimpleCov) && SimpleCov.respond_to?(:pid=) # make simplecov report in this fork
|
286
|
+
if partial_reports_for_single_cov?
|
287
|
+
SingleCov.coverage_report = "#{CONVERAGE_REPORT_PREFIX}#{Process.pid}.json"
|
288
|
+
end
|
277
289
|
if active_record?
|
278
290
|
key = (ActiveRecord::VERSION::STRING >= "4.1.0" ? :test : "test")
|
279
291
|
ActiveRecord::Base.establish_connection key
|
@@ -285,6 +297,10 @@ module ForkingTestRunner
|
|
285
297
|
[$?.success?, stdout]
|
286
298
|
end
|
287
299
|
|
300
|
+
def partial_reports_for_single_cov?
|
301
|
+
@options.fetch(:merge_coverage) && defined?(SingleCov) && SingleCov.respond_to?(:coverage_report=) && SingleCov.coverage_report
|
302
|
+
end
|
303
|
+
|
288
304
|
def change_program_name_to(name)
|
289
305
|
return yield if @options.fetch(:parallel)
|
290
306
|
begin
|
@@ -341,9 +357,29 @@ module ForkingTestRunner
|
|
341
357
|
|
342
358
|
if value
|
343
359
|
minitest_class.autorun
|
344
|
-
|
360
|
+
load file
|
345
361
|
end
|
346
362
|
end
|
347
363
|
end
|
364
|
+
|
365
|
+
def summarize_partial_reports
|
366
|
+
reports = Dir.glob("#{CONVERAGE_REPORT_PREFIX}*")
|
367
|
+
return if reports.empty?
|
368
|
+
|
369
|
+
require "json" # not a global dependency
|
370
|
+
coverage = reports.each_with_object({}) do |report, all|
|
371
|
+
suites = JSON.parse(File.read(report), symbolize_names: true).values
|
372
|
+
raise "Unsupported number of suites #{suites.size}" if suites.size != 1
|
373
|
+
all.replace CoverageCapture.merge_coverage(all, suites.first.fetch(:coverage))
|
374
|
+
ensure
|
375
|
+
File.unlink(report) # do not leave junk behind
|
376
|
+
end
|
377
|
+
|
378
|
+
data = JSON.pretty_generate("Unit Tests" => {"coverage" => coverage, "timestamp" => Time.now.to_i })
|
379
|
+
File.write(SingleCov.coverage_report, data)
|
380
|
+
|
381
|
+
# make it not override our report when it finishes for main process
|
382
|
+
SingleCov.coverage_report = nil
|
383
|
+
end
|
348
384
|
end
|
349
385
|
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.
|
4
|
+
version: 1.9.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:
|
11
|
+
date: 2020-10-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parallel_tests
|
@@ -133,14 +133,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
133
133
|
requirements:
|
134
134
|
- - ">="
|
135
135
|
- !ruby/object:Gem::Version
|
136
|
-
version: 2.
|
136
|
+
version: 2.5.0
|
137
137
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
138
138
|
requirements:
|
139
139
|
- - ">="
|
140
140
|
- !ruby/object:Gem::Version
|
141
141
|
version: '0'
|
142
142
|
requirements: []
|
143
|
-
rubygems_version: 3.
|
143
|
+
rubygems_version: 3.1.3
|
144
144
|
signing_key:
|
145
145
|
specification_version: 4
|
146
146
|
summary: Run every test in a fork to avoid pollution and get clean output per test
|