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