aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/test
diff options
context:
space:
mode:
authorMarcel Molina <marcel@vernix.org>2005-11-20 22:32:40 +0000
committerMarcel Molina <marcel@vernix.org>2005-11-20 22:32:40 +0000
commitbaa2ab5ac30404bce5b5fddaa0d37322280fb48e (patch)
treeabd7fef85ef4a167ec5941f6e614d5e57da11db1 /activesupport/test
parent55a3979a098d05158066ea3e53d0cdb66e88638c (diff)
downloadrails-baa2ab5ac30404bce5b5fddaa0d37322280fb48e.tar.gz
rails-baa2ab5ac30404bce5b5fddaa0d37322280fb48e.tar.bz2
rails-baa2ab5ac30404bce5b5fddaa0d37322280fb48e.zip
Add extended_by, extend_with_included_modules_from and copy_instance_variables_from to Object.
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3113 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activesupport/test')
-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