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 99

def initialize(test)
  @test = test
end

Class Method Details

.available_priorities

[ GitHub ]

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

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 47

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 52

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 93

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 76

def run_priority_high?(test)
  rand > 0.3
end

.run_priority_important?(test) ⇒ Boolean

[ GitHub ]

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

def run_priority_important?(test)
  rand > 0.1
end

.run_priority_low?(test) ⇒ Boolean

[ GitHub ]

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

def run_priority_low?(test)
  rand > 0.75
end

.run_priority_must?(test) ⇒ Boolean

[ GitHub ]

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

def run_priority_must?(test)
  true
end

.run_priority_never?(test) ⇒ Boolean

[ GitHub ]

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

def run_priority_never?(test)
  false
end

.run_priority_normal?(test) ⇒ Boolean

[ GitHub ]

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

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 115

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 120

def previous_test_success?
  File.exist?(passed_file)
end

#test (readonly)

[ GitHub ]

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

attr_reader :test

Instance Method Details

#escape_class_name(class_name) (private)

[ GitHub ]

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

def escape_class_name(class_name)
  class_name.gsub(/(?:[: \\\/])/, "_")
end

#escaped_method_name (private)

[ GitHub ]

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

def escaped_method_name
  @test.method_name.to_s.gsub(/(?:[: ]|[!?=]$)/) do |matched|
    case matched
    when ":"
      "_colon_"
    when " "
      "_"
    when "!"
      ".destructive"
    when "?"
      ".predicate"
    when "="
      ".equal"
    end
  end
end

#passed_file (private)

[ GitHub ]

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

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

#result_dir (private)

Raises:

  • (Errno::EACCES)
[ GitHub ]

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

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 103

def setup
  FileUtils.rm_f(passed_file)
end

#teardown

[ GitHub ]

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

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