summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorshugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-12-03 18:25:57 +0000
committershugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-12-03 18:25:57 +0000
commit4aa8e0f64f649c152d35d1f606249304a7749a24 (patch)
treee6bb9639b21f89e4f250fe523e3602e6abc05bc5 /test
parentc5f7e80d46bffa843afbb8df8369c843ccfa30ae (diff)
downloadruby-4aa8e0f64f649c152d35d1f606249304a7749a24.tar.gz
ruby-4aa8e0f64f649c152d35d1f606249304a7749a24.tar.xz
ruby-4aa8e0f64f649c152d35d1f606249304a7749a24.zip
* compile.c (compile_cpath, iseq_compile_each): reverted
constant/class variable lookup in instance_eval etc. to the behavior of 1.8. * eval.c (rb_mod_nesting): ditto. * insns.def (putspecialobject, defineclass): ditto. * node.h (NODE_FL_CREF_PUSHED_BY_EVAL): ditto. * vm_core.h (VM_SPECIAL_OBJECT_CONST_BASE): ditto. * vm_eval.c (yield_under, eval_under): ditto. * vm_insnhelper.c (vm_cref_push, vm_get_const_base, vm_get_ev_const, vm_get_cvar_base): ditto. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@25984 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test')
-rw-r--r--test/ruby/test_module.rb27
-rw-r--r--test/ruby/test_object.rb8
2 files changed, 31 insertions, 4 deletions
diff --git a/test/ruby/test_module.rb b/test/ruby/test_module.rb
index 92b2f7b56..2df31d06d 100644
--- a/test/ruby/test_module.rb
+++ b/test/ruby/test_module.rb
@@ -216,10 +216,29 @@ class TestModule < Test::Unit::TestCase
remove_rake_mixins(remove_json_mixins(remove_pp_mixins(String.ancestors))))
end
+ CLASS_EVAL = 2
+ @@class_eval = 'b'
+
def test_class_eval
Other.class_eval("CLASS_EVAL = 1")
assert_equal(1, Other::CLASS_EVAL)
assert(Other.constants.include?(:CLASS_EVAL))
+ assert_equal(2, Other.class_eval { CLASS_EVAL })
+
+ Other.class_eval("@@class_eval = 'a'")
+ assert_equal('a', Other.class_variable_get(:@@class_eval))
+ assert_equal('b', Other.class_eval { @@class_eval })
+
+ Other.class_eval do
+ module_function
+
+ def class_eval_test
+ "foo"
+ end
+ end
+ assert("foo", Other.class_eval_test)
+
+ assert_equal([Other], Other.class_eval { |*args| args })
end
def test_const_defined?
@@ -451,7 +470,7 @@ class TestModule < Test::Unit::TestCase
def test_class_variable_get
c = Class.new
- c.class_eval { @@foo = :foo }
+ c.class_eval('@@foo = :foo')
assert_equal(:foo, c.class_variable_get(:@@foo))
assert_raise(NameError) { c.class_variable_get(:@@bar) } # c.f. instance_variable_get
assert_raise(NameError) { c.class_variable_get(:foo) }
@@ -460,13 +479,13 @@ class TestModule < Test::Unit::TestCase
def test_class_variable_set
c = Class.new
c.class_variable_set(:@@foo, :foo)
- assert_equal(:foo, c.class_eval { @@foo })
+ assert_equal(:foo, c.class_eval('@@foo'))
assert_raise(NameError) { c.class_variable_set(:foo, 1) }
end
def test_class_variable_defined
c = Class.new
- c.class_eval { @@foo = :foo }
+ c.class_eval('@@foo = :foo')
assert_equal(true, c.class_variable_defined?(:@@foo))
assert_equal(false, c.class_variable_defined?(:@@bar))
assert_raise(NameError) { c.class_variable_defined?(:foo) }
@@ -474,7 +493,7 @@ class TestModule < Test::Unit::TestCase
def test_remove_class_variable
c = Class.new
- c.class_eval { @@foo = :foo }
+ c.class_eval('@@foo = :foo')
c.class_eval { remove_class_variable(:@@foo) }
assert_equal(false, c.class_variable_defined?(:@@foo))
end
diff --git a/test/ruby/test_object.rb b/test/ruby/test_object.rb
index e90ca3b6d..ebc10fc65 100644
--- a/test/ruby/test_object.rb
+++ b/test/ruby/test_object.rb
@@ -416,12 +416,20 @@ class TestObject < Test::Unit::TestCase
end
end
+ class InstanceExec
+ INSTANCE_EXEC = 123
+ end
+
def test_instance_exec
x = 1.instance_exec(42) {|a| self + a }
assert_equal(43, x)
x = "foo".instance_exec("bar") {|a| self + a }
assert_equal("foobar", x)
+
+ assert_raise(NameError) do
+ InstanceExec.new.instance_exec { INSTANCE_EXEC }
+ end
end
def test_extend