class ForkingExecutor

Public Class Methods

new(size) click to toggle source
# File actionpack/test/abstract_unit.rb, line 380
def initialize(size)
  @size  = size
  @queue = Server.new
  file   = File.join Dir.tmpdir, Dir::Tmpname.make_tmpname("quails-tests", "fd")
  @url   = "drbunix://#{file}"
  @pool  = nil
  DRb.start_service @url, @queue
end

Public Instance Methods

<<(work) click to toggle source
# File actionpack/test/abstract_unit.rb, line 389
def <<(work); @queue << work; end
shutdown() click to toggle source
# File actionpack/test/abstract_unit.rb, line 391
def shutdown
  pool = @size.times.map {
    fork {
      DRb.stop_service
      queue = DRbObject.new_with_uri @url
      while job = queue.pop
        klass    = job[0]
        method   = job[1]
        reporter = job[2]
        result = Minitest.run_one_method klass, method
        if result.error?
          translate_exceptions result
        end
        queue.record reporter, result
      end
    }
  }
  @size.times { @queue << nil }
  pool.each { |pid| Process.waitpid pid }
end

Private Instance Methods

translate_exceptions(result) click to toggle source
# File actionpack/test/abstract_unit.rb, line 413
def translate_exceptions(result)
  result.failures.map! { |e|
    begin
      Marshal.dump e
      e
    rescue TypeError
      ex = Exception.new e.message
      ex.set_backtrace e.backtrace
      Minitest::UnexpectedError.new ex
    end
  }
end