module Minitest
Attributes
parallel_fork_stat_reporter[R]
Public Class Methods
__run(reporter, options)
click to toggle source
Override __run
to use a child forks to run the speeds, which allows for parallel spec execution on MRI.
# File lib/minitest/parallel_fork.rb 128 def __run(reporter, options) 129 parallel_fork_wait_for_children(parallel_fork_setup_children(parallel_fork_suites, reporter, options), reporter) 130 nil 131 end
Also aliased as: __run
after_parallel_fork(i=nil, &block)
click to toggle source
Set the after_parallel_fork
block to the given block
# File lib/minitest/parallel_fork.rb 20 def after_parallel_fork(i=nil, &block) 21 @after_parallel_fork = block 22 end
before_parallel_fork(&block)
click to toggle source
Set the before_parallel_fork
block to the given block
# File lib/minitest/parallel_fork.rb 15 def before_parallel_fork(&block) 16 @before_parallel_fork = block 17 end
on_parallel_fork_marshal_failure(&block)
click to toggle source
Set the on_parallel_fork_marshal_failure
block to the given block
# File lib/minitest/parallel_fork.rb 25 def on_parallel_fork_marshal_failure(&block) 26 @on_parallel_fork_marshal_failure = block 27 end
parallel_fork_child_data(data)
click to toggle source
# File lib/minitest/parallel_fork.rb 103 def parallel_fork_child_data(data) 104 data.map{|_pid, read| Thread.new(read, &:read)}.map(&:value).map{|data| parallel_fork_data_from_marshal(data)} 105 end
parallel_fork_data_from_marshal(data)
click to toggle source
# File lib/minitest/parallel_fork.rb 57 def parallel_fork_data_from_marshal(data) 58 Marshal.load(data) 59 rescue ArgumentError 60 if @on_parallel_fork_marshal_failure 61 @on_parallel_fork_marshal_failure.call 62 end 63 raise 64 end
parallel_fork_data_to_marshal()
click to toggle source
# File lib/minitest/parallel_fork.rb 53 def parallel_fork_data_to_marshal 54 %i'count assertions results'.map{|meth| parallel_fork_stat_reporter.send(meth)} 55 end
parallel_fork_number()
click to toggle source
# File lib/minitest/parallel_fork.rb 119 def parallel_fork_number 120 (ENV['NCPU'] || 4).to_i 121 end
parallel_fork_run_test_suite(suite, reporter, options)
click to toggle source
# File lib/minitest/parallel_fork.rb 72 def parallel_fork_run_test_suite(suite, reporter, options) 73 if suite.is_a?(Minitest::Parallel::Test::ClassMethods) 74 suite.extend(Minitest::Unparallelize) 75 end 76 77 suite.run(reporter, options) 78 end
parallel_fork_run_test_suites(suites, reporter, options)
click to toggle source
# File lib/minitest/parallel_fork.rb 66 def parallel_fork_run_test_suites(suites, reporter, options) 67 suites.each do |suite| 68 parallel_fork_run_test_suite(suite, reporter, options) 69 end 70 end
parallel_fork_setup_children(suites, reporter, options)
click to toggle source
# File lib/minitest/parallel_fork.rb 80 def parallel_fork_setup_children(suites, reporter, options) 81 set_parallel_fork_stat_reporter(reporter) 82 run_before_parallel_fork_hook 83 84 n = parallel_fork_number 85 n.times.map do |i| 86 read, write = IO.pipe.each{|io| io.binmode} 87 pid = Process.fork do 88 read.close 89 run_after_parallel_fork_hook(i) 90 91 p_suites = [] 92 suites.each_with_index{|s, j| p_suites << s if j % n == i} 93 parallel_fork_run_test_suites(p_suites, reporter, options) 94 95 write.write(Marshal.dump(parallel_fork_data_to_marshal)) 96 write.close 97 end 98 write.close 99 [pid, read] 100 end 101 end
parallel_fork_suites()
click to toggle source
# File lib/minitest/parallel_fork.rb 37 def parallel_fork_suites 38 Minitest::Runnable.runnables.shuffle 39 end
parallel_fork_wait_for_children(child_info, reporter)
click to toggle source
# File lib/minitest/parallel_fork.rb 107 def parallel_fork_wait_for_children(child_info, reporter) 108 parallel_fork_child_data(child_info).each do |data| 109 count, assertions, results = data 110 reporter.reporters.each do |rep| 111 next unless %i'count assertions results count= assertions='.all?{|meth| rep.respond_to?(meth)} 112 rep.count += count 113 rep.assertions += assertions 114 rep.results.concat(results) 115 end 116 end 117 end
run_after_parallel_fork_hook(i)
click to toggle source
# File lib/minitest/parallel_fork.rb 47 def run_after_parallel_fork_hook(i) 48 if @after_parallel_fork 49 @after_parallel_fork.call(i) 50 end 51 end
run_before_parallel_fork_hook()
click to toggle source
# File lib/minitest/parallel_fork.rb 41 def run_before_parallel_fork_hook 42 if @before_parallel_fork 43 @before_parallel_fork.call 44 end 45 end
set_parallel_fork_stat_reporter(reporter)
click to toggle source
# File lib/minitest/parallel_fork.rb 31 def set_parallel_fork_stat_reporter(reporter) 32 @parallel_fork_stat_reporter = reporter.reporters.detect do |rep| 33 %w'count assertions results count= assertions='.all?{|meth| rep.respond_to?(meth)} 34 end 35 end