123456789_123456789_123456789_123456789_123456789_

Class: Test::Unit::Priority::Checker

Relationships & Source Files
Inherits: Object
Defined in: lib/test/unit/priority.rb

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(test) ⇒ Checker

[ GitHub ]

  
# File 'lib/test/unit/priority.rb', line 97

def initialize(test)
  @test = test
end

Class Method Details

.available_priorities

[ GitHub ]

  
# File 'lib/test/unit/priority.rb', line 59

def available_priorities
  methods(false).collect do |name|
    /\Arun_priority_(.+)\?\z/ =~ name.to_s
    $1
  end.compact
end

.have_priority?(name) ⇒ Boolean

[ GitHub ]

  
# File 'lib/test/unit/priority.rb', line 45

def have_priority?(name)
  singleton_class = (class << self; self; end)
  singleton_class.method_defined?(priority_check_method_name(name))
end

.need_to_run?(test) ⇒ Boolean

[ GitHub ]

  
# File 'lib/test/unit/priority.rb', line 50

def need_to_run?(test)
  priority = test[:priority] || Priority.default
  if have_priority?(priority)
    __send__(priority_check_method_name(priority), test)
  else
    true
  end
end

.priority_check_method_name(priority_name) (private)

[ GitHub ]

  
# File 'lib/test/unit/priority.rb', line 91

def priority_check_method_name(priority_name)
  "run_priority_#{priority_name}?"
end

.run_priority_high?(test) ⇒ Boolean

[ GitHub ]

  
# File 'lib/test/unit/priority.rb', line 74

def run_priority_high?(test)
  rand > 0.3
end

.run_priority_important?(test) ⇒ Boolean

[ GitHub ]

  
# File 'lib/test/unit/priority.rb', line 70

def run_priority_important?(test)
  rand > 0.1
end

.run_priority_low?(test) ⇒ Boolean

[ GitHub ]

  
# File 'lib/test/unit/priority.rb', line 82

def run_priority_low?(test)
  rand > 0.75
end

.run_priority_must?(test) ⇒ Boolean

[ GitHub ]

  
# File 'lib/test/unit/priority.rb', line 66

def run_priority_must?(test)
  true
end

.run_priority_never?(test) ⇒ Boolean

[ GitHub ]

  
# File 'lib/test/unit/priority.rb', line 86

def run_priority_never?(test)
  false
end

.run_priority_normal?(test) ⇒ Boolean

[ GitHub ]

  
# File 'lib/test/unit/priority.rb', line 78

def run_priority_normal?(test)
  rand > 0.5
end

Instance Attribute Details

#need_to_run?Boolean (readonly)

[ GitHub ]

  
# File 'lib/test/unit/priority.rb', line 113

def need_to_run?
  !previous_test_success? or self.class.need_to_run?(@test)
end

#previous_test_success?Boolean (readonly, private)

[ GitHub ]

  
# File 'lib/test/unit/priority.rb', line 118

def previous_test_success?
  File.exist?(passed_file)
end

#test (readonly)

[ GitHub ]

  
# File 'lib/test/unit/priority.rb', line 96

attr_reader :test

Instance Method Details

#escape_class_name(class_name) (private)

[ GitHub ]

  
# File 'lib/test/unit/priority.rb', line 148

def escape_class_name(class_name)
  escape_name(class_name)
end

#escape_name(name) (private)

[ GitHub ]

  
# File 'lib/test/unit/priority.rb', line 156

def escape_name(name)
  name.gsub(/(?:[: \/!?=])/) do |matched|
    case matched
    when ":"
      "_colon_"
    when " ", "/"
      "_"
    when "!"
      ".destructive"
    when "?"
      ".predicate"
    when "="
      ".equal"
    end
  end
end

#escaped_method_name (private)

[ GitHub ]

  
# File 'lib/test/unit/priority.rb', line 152

def escaped_method_name
  escape_name(@test.method_name.to_s)
end

#passed_file (private)

[ GitHub ]

  
# File 'lib/test/unit/priority.rb', line 144

def passed_file
  File.join(result_dir, "passed")
end

#result_dir (private)

Raises:

  • (Errno::EACCES)
[ GitHub ]

  
# File 'lib/test/unit/priority.rb', line 122

def result_dir
  components = [
    ".test-result",
    escape_class_name(@test.class.name || "AnonymousTestCase"),
    escaped_method_name,
  ]
  parent_directories = [File.dirname($0), Dir.pwd]
  if Process.respond_to?(:uid)
    parent_directories << File.join(Dir.tmpdir, Process.uid.to_s)
  end
  parent_directories.each do |parent_directory|
    dir = File.expand_path(File.join(parent_directory, *components))
    begin
      FileUtils.mkdir_p(dir)
      return dir
    rescue Errno::EACCES
    end
  end

  raise Errno::EACCES, parent_directories.join(", ")
end

#setup

[ GitHub ]

  
# File 'lib/test/unit/priority.rb', line 101

def setup
  FileUtils.rm_f(passed_file)
end

#teardown

[ GitHub ]

  
# File 'lib/test/unit/priority.rb', line 105

def teardown
  if @test.__send__(:passed?)
    FileUtils.touch(passed_file)
  else
    FileUtils.rm_f(passed_file)
  end
end