module Minitest
Attributes
Public Class Methods
Source
# File lib/minitest/parallel_fork.rb 132 def __run(reporter, options) 133 parallel_fork_wait_for_children(parallel_fork_setup_children(parallel_fork_suites, reporter, options), reporter) 134 nil 135 end
Override __run
to use a child forks to run the speeds, which allows for parallel spec execution on MRI.
Also aliased as: __run
Source
# File lib/minitest/parallel_fork.rb 20 def after_parallel_fork(i=nil, &block) 21 @after_parallel_fork = block 22 end
Set the after_parallel_fork
block to the given block
Source
# File lib/minitest/parallel_fork.rb 15 def before_parallel_fork(&block) 16 @before_parallel_fork = block 17 end
Set the before_parallel_fork
block to the given block
Source
# File lib/minitest/parallel_fork.rb 25 def on_parallel_fork_marshal_failure(&block) 26 @on_parallel_fork_marshal_failure = block 27 end
Set the on_parallel_fork_marshal_failure
block to the given block
Source
# File lib/minitest/parallel_fork.rb 107 def parallel_fork_child_data(data) 108 data.map{|_pid, read| Thread.new(read, &:read)}.map(&:value).map{|data| parallel_fork_data_from_marshal(data)} 109 end
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
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
Source
# File lib/minitest/parallel_fork.rb 89 def parallel_fork_fork_child(i, suites, reporter, options) 90 read, write = IO.pipe.each{|io| io.binmode} 91 pid = Process.fork do 92 read.close 93 run_after_parallel_fork_hook(i) 94 95 p_suites = [] 96 n = parallel_fork_number 97 suites.each_with_index{|s, j| p_suites << s if j % n == i} 98 parallel_fork_run_test_suites(p_suites, reporter, options) 99 100 write.write(Marshal.dump(parallel_fork_data_to_marshal)) 101 write.close 102 end 103 write.close 104 [pid, read] 105 end
Source
# File lib/minitest/parallel_fork.rb 123 def parallel_fork_number 124 (ENV['NCPU'] || 4).to_i 125 end
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
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
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 parallel_fork_number.times.map do |i| 85 parallel_fork_fork_child(i, suites, reporter, options) 86 end 87 end
Source
# File lib/minitest/parallel_fork.rb 37 def parallel_fork_suites 38 Minitest::Runnable.runnables.shuffle 39 end
Source
# File lib/minitest/parallel_fork.rb 111 def parallel_fork_wait_for_children(child_info, reporter) 112 parallel_fork_child_data(child_info).each do |data| 113 count, assertions, results = data 114 reporter.reporters.each do |rep| 115 next unless %i'count assertions results count= assertions='.all?{|meth| rep.respond_to?(meth)} 116 rep.count += count 117 rep.assertions += assertions 118 rep.results.concat(results) 119 end 120 end 121 end
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
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
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