class ParallelTests::Test::RuntimeLogger

Public Class Methods

log_test_run(test) { || ... } click to toggle source
# File lib/parallel_tests/test/runtime_logger.rb, line 10
def log_test_run(test)
  prepare

  result = nil
  time = ParallelTests.delta { result = yield }
  log(test, time)

  result
end
unique_log() click to toggle source
# File lib/parallel_tests/test/runtime_logger.rb, line 20
def unique_log
  lock do
    separator = "\n"
    groups = File.read(logfile).split(separator).map { |line| line.split(":") }.group_by(&:first)
    lines = groups.map do |file, times|
      time = "%.2f" % times.map(&:last).map(&:to_f).inject(:+)
      "#{file}:#{time}"
    end
    File.write(logfile, lines.join(separator) + separator)
  end
end

Private Class Methods

lock() { || ... } click to toggle source
# File lib/parallel_tests/test/runtime_logger.rb, line 57
def lock
  File.open(logfile, 'r') do |f|
    begin
      f.flock File::LOCK_EX
      yield
    ensure
      f.flock File::LOCK_UN
    end
  end
end
log(test, time) click to toggle source
# File lib/parallel_tests/test/runtime_logger.rb, line 44
def log(test, time)
  return unless message = message(test, time)
  lock do
    File.open(logfile, 'a') { |f| f.puts message }
  end
end
logfile() click to toggle source
# File lib/parallel_tests/test/runtime_logger.rb, line 68
def logfile
  ParallelTests::Test::Runner.runtime_log
end
message(test, delta) click to toggle source
# File lib/parallel_tests/test/runtime_logger.rb, line 51
def message(test, delta)
  return unless method = test.public_instance_methods(true).detect { |method| method =~ /^test_/ }
  filename = test.instance_method(method).source_location.first.sub("#{Dir.pwd}/", "")
  "#{filename}:#{delta}"
end
prepare() click to toggle source

ensure folder exists + clean out previous log this will happen in multiple processes, but should be roughly at the same time so there should be no log message lost

# File lib/parallel_tests/test/runtime_logger.rb, line 37
def prepare
  return if @@prepared
  @@prepared = true
  FileUtils.mkdir_p(File.dirname(logfile))
  File.write(logfile, '')
end