class Test::Unit::Assertions::AssertExceptionHelper

Public Class Methods

new(test_case, expected_exceptions) click to toggle source
# File lib/test/unit/assertions.rb, line 2140
def initialize(test_case, expected_exceptions)
  @test_case = test_case
  @expected_exceptions = expected_exceptions
  @expected_classes, @expected_modules, @expected_objects =
    split_expected_exceptions(expected_exceptions)
end

Public Instance Methods

expected?(actual_exception, equality=nil) click to toggle source
# File lib/test/unit/assertions.rb, line 2162
def expected?(actual_exception, equality=nil)
  equality ||= :instance_of?
  expected_class?(actual_exception, equality) or
    expected_module?(actual_exception) or
    expected_object?(actual_exception)
end
expected_exceptions() click to toggle source
# File lib/test/unit/assertions.rb, line 2147
def expected_exceptions
  exceptions = @expected_exceptions.collect do |exception|
    if exception.is_a?(Exception)
      WrappedException.new(exception)
    else
      exception
    end
  end
  if exceptions.size == 1
    exceptions[0]
  else
    exceptions
  end
end

Private Instance Methods

exception_class?(exception_type) click to toggle source
# File lib/test/unit/assertions.rb, line 2206
def exception_class?(exception_type)
  return true if exception_type <= Exception

  if Object.const_defined?(:Java)
    return true if exception_type <= Java::JavaLang::Throwable
  end

  false
end
exception_object?(exception_type) click to toggle source
# File lib/test/unit/assertions.rb, line 2196
def exception_object?(exception_type)
  return true if exception_type.is_a?(Exception)

  if Object.const_defined?(:Java)
    return true if exception_type.is_a?(Java::JavaLang::Throwable)
  end

  false
end
expected_class?(actual_exception, equality) click to toggle source
# File lib/test/unit/assertions.rb, line 2216
def expected_class?(actual_exception, equality)
  @expected_classes.any? do |expected_class|
    actual_exception.__send__(equality, expected_class)
  end
end
expected_module?(actual_exception) click to toggle source
# File lib/test/unit/assertions.rb, line 2222
def expected_module?(actual_exception)
  @expected_modules.any? do |expected_module|
    actual_exception.is_a?(expected_module)
  end
end
expected_object?(actual_exception) click to toggle source
# File lib/test/unit/assertions.rb, line 2228
def expected_object?(actual_exception)
  @expected_objects.any? do |expected_object|
    expected_object == actual_exception or
      fallback_exception_object_equal(expected_object, actual_exception)
  end
end
fallback_exception_object_equal(expected_object, actual_exception) click to toggle source
# File lib/test/unit/assertions.rb, line 2235
def fallback_exception_object_equal(expected_object, actual_exception)
  owner = Util::MethodOwnerFinder.find(expected_object, :==)
  if owner == Kernel or owner == Exception
    expected_object.class == actual_exception.class and
      expected_object.message == actual_exception.message
  else
    false
  end
end
split_expected_exceptions(expected_exceptions) click to toggle source
# File lib/test/unit/assertions.rb, line 2170
def split_expected_exceptions(expected_exceptions)
  exception_modules = []
  exception_objects = []
  exception_classes = []
  expected_exceptions.each do |exception_type|
    if exception_type.instance_of?(Module)
      exception_modules << exception_type
    elsif exception_object?(exception_type)
      exception_objects << exception_type
    elsif exception_class?(exception_type)
      exception_classes << exception_type
    else
      full_message =
        @test_case.__send__(:build_message,
                            nil,
                            "<?> must be " +
                            "a subclass of Exception, " +
                            "an object of Exception subclasses " +
                            "or a Module",
                            exception_type)
      @test_case.flunk(full_message)
    end
  end
  [exception_classes, exception_modules, exception_objects]
end