class FTest::Runner::ProcessSet

Public Class Methods

new() click to toggle source
# File lib/ftest/runner.rb, line 38
def initialize
  @set     = []
  @passed  = true
end

Public Instance Methods

<<(file) click to toggle source
# File lib/ftest/runner.rb, line 43
def << file
  wait Config.child_count - 1
  @set.<< spawn_child file
end
failed?() click to toggle source
# File lib/ftest/runner.rb, line 89
def failed?
  not success?
end
finish() click to toggle source
# File lib/ftest/runner.rb, line 48
def finish
  wait 0
  @passed
end
reap(reads) click to toggle source
# File lib/ftest/runner.rb, line 70
def reap reads
  @set.delete_if do |process|
    next unless reads.include? process.fd
    Config.internal_logger.debug "Reaping #{process.file}:#{process.pid}"
    process.finish or @passed = false
    true
  end

  shutdown if failed? and Config.fail_fast
end
shutdown() click to toggle source
# File lib/ftest/runner.rb, line 81
def shutdown
  @set.each do |process|
    ::Process.kill "TERM", process.pid
  end
  ::Process.waitall
  exit 1
end
spawn_child(file) click to toggle source
# File lib/ftest/runner.rb, line 64
def spawn_child file
  process = Process.new file
  process.start
  process
end
success?() click to toggle source
# File lib/ftest/runner.rb, line 93
def success?
  @passed
end
tick() click to toggle source
# File lib/ftest/runner.rb, line 57
def tick
  loop do
    reads, _, _ = IO.select @set.map(&:fd), [], [], 1
    return reap reads if reads
  end
end
wait(max_count) click to toggle source
# File lib/ftest/runner.rb, line 53
def wait max_count
  tick while @set.size > max_count
end