c358389f25
Sync with latest Instiki Trunk (Updates Rails to 1.2.2)
152 lines
4 KiB
Ruby
152 lines
4 KiB
Ruby
require File.dirname(__FILE__) + '/../abstract_unit'
|
|
|
|
class ClassA; end
|
|
class ClassB < ClassA; end
|
|
class ClassC < ClassB; end
|
|
class ClassD < ClassA; end
|
|
|
|
class ClassI; end
|
|
class ClassJ < ClassI; end
|
|
|
|
class ClassK
|
|
end
|
|
module Nested
|
|
class ClassL < ClassK
|
|
end
|
|
end
|
|
|
|
module Bar
|
|
def bar; end
|
|
end
|
|
|
|
module Baz
|
|
def baz; end
|
|
end
|
|
|
|
class Foo
|
|
include Bar
|
|
end
|
|
|
|
class ClassExtTest < Test::Unit::TestCase
|
|
def test_methods
|
|
assert defined?(ClassB)
|
|
assert defined?(ClassC)
|
|
assert defined?(ClassD)
|
|
|
|
ClassA.remove_subclasses
|
|
|
|
assert !defined?(ClassB)
|
|
assert !defined?(ClassC)
|
|
assert !defined?(ClassD)
|
|
end
|
|
|
|
def test_subclasses_of
|
|
assert_equal [ClassJ], Object.subclasses_of(ClassI)
|
|
ClassI.remove_subclasses
|
|
assert_equal [], Object.subclasses_of(ClassI)
|
|
end
|
|
|
|
def test_subclasses_of_should_find_nested_classes
|
|
assert Object.subclasses_of(ClassK).include?(Nested::ClassL)
|
|
end
|
|
|
|
def test_subclasses_of_should_not_return_removed_classes
|
|
# First create the removed class
|
|
old_class = Nested.send :remove_const, :ClassL
|
|
new_class = Class.new(ClassK)
|
|
Nested.const_set :ClassL, new_class
|
|
assert_equal "Nested::ClassL", new_class.name # Sanity check
|
|
|
|
subclasses = Object.subclasses_of(ClassK)
|
|
assert subclasses.include?(new_class)
|
|
assert ! subclasses.include?(old_class)
|
|
end
|
|
end
|
|
|
|
class ObjectTests < Test::Unit::TestCase
|
|
def test_suppress_re_raises
|
|
assert_raises(LoadError) { suppress(ArgumentError) {raise LoadError} }
|
|
end
|
|
def test_suppress_supresses
|
|
suppress(ArgumentError) { raise ArgumentError }
|
|
suppress(LoadError) { raise LoadError }
|
|
suppress(LoadError, ArgumentError) { raise LoadError }
|
|
suppress(LoadError, ArgumentError) { raise ArgumentError }
|
|
end
|
|
|
|
def test_extended_by
|
|
foo = Foo.new
|
|
assert foo.extended_by.include?(Bar)
|
|
foo.extend(Baz)
|
|
assert(([Bar, Baz] - foo.extended_by).empty?, "Expected Bar, Baz in #{foo.extended_by.inspect}")
|
|
end
|
|
|
|
def test_extend_with_included_modules_from
|
|
foo, object = Foo.new, Object.new
|
|
assert !object.respond_to?(:bar)
|
|
assert !object.respond_to?(:baz)
|
|
|
|
object.extend_with_included_modules_from(foo)
|
|
assert object.respond_to?(:bar)
|
|
assert !object.respond_to?(:baz)
|
|
|
|
foo.extend(Baz)
|
|
object.extend_with_included_modules_from(foo)
|
|
assert object.respond_to?(:bar)
|
|
assert object.respond_to?(:baz)
|
|
end
|
|
|
|
end
|
|
|
|
class ObjectInstanceVariableTest < Test::Unit::TestCase
|
|
def setup
|
|
@source, @dest = Object.new, Object.new
|
|
@source.instance_variable_set(:@bar, 'bar')
|
|
@source.instance_variable_set(:@baz, 'baz')
|
|
end
|
|
|
|
def test_copy_instance_variables_from_without_explicit_excludes
|
|
assert_equal [], @dest.instance_variables
|
|
@dest.copy_instance_variables_from(@source)
|
|
|
|
assert_equal %w(@bar @baz), @dest.instance_variables.sort
|
|
%w(@bar @baz).each do |name|
|
|
assert_equal @source.instance_variable_get(name).object_id,
|
|
@dest.instance_variable_get(name).object_id
|
|
end
|
|
end
|
|
|
|
def test_copy_instance_variables_from_with_explicit_excludes
|
|
@dest.copy_instance_variables_from(@source, ['@baz'])
|
|
assert !@dest.instance_variables.include?('@baz')
|
|
assert_equal 'bar', @dest.instance_variable_get('@bar')
|
|
end
|
|
|
|
def test_copy_instance_variables_automatically_excludes_protected_instance_variables
|
|
@source.instance_variable_set(:@quux, 'quux')
|
|
class << @source
|
|
def protected_instance_variables
|
|
['@bar', :@quux]
|
|
end
|
|
end
|
|
|
|
@dest.copy_instance_variables_from(@source)
|
|
assert !@dest.instance_variables.include?('@bar')
|
|
assert !@dest.instance_variables.include?('@quux')
|
|
assert_equal 'baz', @dest.instance_variable_get('@baz')
|
|
end
|
|
|
|
def test_instance_values
|
|
object = Object.new
|
|
object.instance_variable_set :@a, 1
|
|
object.instance_variable_set :@b, 2
|
|
assert_equal({'a' => 1, 'b' => 2}, object.instance_values)
|
|
end
|
|
|
|
def test_instance_exec_passes_arguments_to_block
|
|
block = Proc.new { |value| [self, value] }
|
|
assert_equal %w(hello goodbye), 'hello'.instance_exec('goodbye', &block)
|
|
end
|
|
|
|
end
|