aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/test/core_ext/object_and_class_ext_test.rb
diff options
context:
space:
mode:
Diffstat (limited to 'activesupport/test/core_ext/object_and_class_ext_test.rb')
-rw-r--r--activesupport/test/core_ext/object_and_class_ext_test.rb74
1 files changed, 74 insertions, 0 deletions
diff --git a/activesupport/test/core_ext/object_and_class_ext_test.rb b/activesupport/test/core_ext/object_and_class_ext_test.rb
index 29e18d5ae1..4a554e7602 100644
--- a/activesupport/test/core_ext/object_and_class_ext_test.rb
+++ b/activesupport/test/core_ext/object_and_class_ext_test.rb
@@ -6,6 +6,18 @@ class ClassB < ClassA; end
class ClassC < ClassB; end
class ClassD < ClassA; 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)
@@ -30,4 +42,66 @@ class ObjectTests < Test::Unit::TestCase
suppress(LoadError, ArgumentError) { raise LoadError }
suppress(LoadError, ArgumentError) { raise ArgumentError }
end
+
+ def test_extended_by
+ foo = Foo.new
+ assert_equal [Bar], foo.extended_by
+ foo.extend(Baz)
+ assert_equal %w(Bar Baz), foo.extended_by.map {|mod| mod.name}.sort
+ 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_nil @dest.instance_variable_get('@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_nil @dest.instance_variable_get('@bar')
+ assert_nil @dest.instance_variable_get('@quux')
+ assert_equal 'baz', @dest.instance_variable_get('@baz')
+ end
+end \ No newline at end of file