class ParallelTests::Test::RuntimeLogger

Public Class Methods

class_directory(suspect) click to toggle source

Note: this is a best guess at conventional test directory structure, and may need tweaking / post-processing to match correctly for any given project

# File lib/parallel_tests/test/runtime_logger.rb, line 29
def self.class_directory(suspect)
  result = "test/"

  if defined?(Rails)
    result += case suspect.superclass.name
    when "ActionDispatch::IntegrationTest"
      "integration/"
    when "ActionDispatch::PerformanceTest"
      "performance/"
    when "ActionController::TestCase"
      "functional/"
    when "ActionView::TestCase"
      "unit/helpers/"
    else
      "unit/"
    end
  end
  result
end
class_to_filename(suspect) click to toggle source

based on github.com/grosser/single_test/blob/master/lib/single_test.rb#L117

# File lib/parallel_tests/test/runtime_logger.rb, line 50
def self.class_to_filename(suspect)
  word = suspect.to_s.dup
  return word unless word.match /^[A-Z]/ and not word.match %r{/[a-z]}

  word.gsub!(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
  word.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
  word.gsub!(/\:\:/, '/')
  word.tr!("-", "_")
  word.downcase!
  word
end
locked_appending_to(file) { |f| ... } click to toggle source
# File lib/parallel_tests/test/runtime_logger.rb, line 62
def self.locked_appending_to(file)
  File.open(file, 'a') do |f|
    begin
      f.flock File::LOCK_EX
      yield f
    ensure
      f.flock File::LOCK_UN
    end
  end
end
log(test, start_time, end_time) click to toggle source
# File lib/parallel_tests/test/runtime_logger.rb, line 8
def self.log(test, start_time, end_time)
  return if test.is_a? ::Test::Unit::TestSuite # don't log for suites-of-suites

  if !@@has_started # make empty log file
    File.open(logfile, 'w'){}
    @@has_started = true
  end

  locked_appending_to(logfile) do |file|
    file.puts(message(test, start_time, end_time))
  end
end
logfile() click to toggle source
# File lib/parallel_tests/test/runtime_logger.rb, line 73
def self.logfile
  ParallelTests::Test::Runner.runtime_log
end
message(test, start_time, end_time) click to toggle source
# File lib/parallel_tests/test/runtime_logger.rb, line 21
def self.message(test, start_time, end_time)
  delta = "%.2f" % (end_time.to_f-start_time.to_f)
  filename = class_directory(test.class) + class_to_filename(test.class) + ".rb"
  "#{filename}:#{delta}"
end