3
class TestEval < Test::Unit::TestCase
16
eval 'while false; $bad = true; print "foo\n" end'
23
assert(!eval('FALSE'))
24
assert(!eval('false'))
33
assert_equal('assert(true)', eval("$foo"))
34
assert_equal(true, eval("true"))
36
assert(eval("i == 5"))
37
assert_equal(5, eval("i"))
38
assert(eval("defined? i"))
41
assert_equal("local1", eval("local1", $x)) # normal local var
42
assert_equal("local2", eval("local2", $x)) # nested local var
46
rescue NameError # must raise error
51
# !! use class_eval to avoid nested definition
52
self.class.class_eval %q(
59
assert_equal(25, eval("EVTEST1", $x)) # constant in module
60
assert_equal(125, eval("evtest2", $x)) # local var in module
64
rescue NameError # must raise error
71
assert_equal(1, eval("i4", x))
74
assert_equal(22, eval("i4", x))
77
eval "(0..9).each{|i5| $x[i5] = proc{i5*2}}", x
78
assert_equal(8, $x[4].call)
82
assert_equal(1, eval("i", x))
83
x = proc{binding}.call
85
assert_equal(22, eval("i", x))
87
x = proc{binding}.call
88
eval "(0..9).each{|i5| $x[i5] = proc{i5*2}}", x
89
assert_equal(8, $x[4].call)
90
x = proc{binding}.call
91
eval "for i6 in 1..1; j6=i6; end", x
92
assert(eval("defined? i6", x))
93
assert(eval("defined? j6", x))
101
assert_equal(eval("foo11"), eval("foo11", p))
102
assert_equal(1, eval("foo11"))
103
assert_equal(eval("foo22"), eval("foo22", p))
104
assert_equal(55, eval("foo22"))
107
p1 = proc{i7 = 0; proc{i7}}.call
108
assert_equal(0, p1.call)
110
assert_equal(5, p1.call)
111
assert(!defined?(i7))
113
p1 = proc{i7 = 0; proc{i7}}.call
115
assert_equal(0, p1.call)
117
assert_equal(1, p1.call)
119
assert_equal(5, p1.call)
123
def test_nil_instance_eval_cvar # [ruby-dev:24103]
127
bb = eval("nil.instance_eval \"binding\"", nil.test_binding)
128
assert_raise(NameError) { eval("@@a", bb) }
130
remove_method :test_binding
134
def test_fixnum_instance_eval_cvar # [ruby-dev:24213]
135
assert_raise(NameError) { 1.instance_eval "@@a" }
138
def test_cvar_scope_with_instance_eval # [ruby-dev:24223]
139
Fixnum.class_eval "@@test_cvar_scope_with_instance_eval = 1" # depends on [ruby-dev:24229]
140
@@test_cvar_scope_with_instance_eval = 4
141
assert_equal(4, 1.instance_eval("@@test_cvar_scope_with_instance_eval"))
142
Fixnum.__send__(:remove_class_variable, :@@test_cvar_scope_with_instance_eval)
145
def test_eval_and_define_method # [ruby-dev:24228]
146
assert_nothing_raised {
147
def temporally_method_for_test_eval_and_define_method(&block)
149
class << Object.new; self end.__send__(:define_method, :zzz, &block)
152
v = eval("temporally_method_for_test_eval_and_define_method {}")