class ParallelTests::RuntimeLogger
def self.class_directory(suspect)
Note: this is a best guess at conventional test directory structure, and may need
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
def self.class_to_filename(suspect)
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
def self.log(test, start_time, end_time)
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(ParallelTests.runtime_log, 'w') do end @@has_started = true end File.open(ParallelTests.runtime_log, 'a') do |output| begin output.flock File::LOCK_EX output.puts(self.message(test, start_time, end_time)) ensure output.flock File::LOCK_UN end end end
def self.message(test, start_time, end_time)
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" message="#{filename}:#{delta}" end