[270] | 1 | assert('Kernel.eval', '15.3.1.2.3') do
|
---|
| 2 | assert_equal(10) { Kernel.eval '1 * 10' }
|
---|
| 3 | assert_equal('aaa') { Kernel.eval "'a' * 3" }
|
---|
| 4 | assert_equal(10) {
|
---|
| 5 | a = 10
|
---|
| 6 | Kernel.eval "a"
|
---|
| 7 | }
|
---|
| 8 | assert_equal(20) {
|
---|
| 9 | a = 10
|
---|
| 10 | Kernel.eval "a = 20"
|
---|
| 11 | a
|
---|
| 12 | }
|
---|
| 13 | assert_equal(15) {
|
---|
| 14 | c = 5
|
---|
| 15 | lambda {
|
---|
| 16 | a = 10
|
---|
| 17 | Kernel.eval "c = a + c"
|
---|
| 18 | }.call
|
---|
| 19 | c
|
---|
| 20 | }
|
---|
| 21 | assert_equal(5) {
|
---|
| 22 | c = 5
|
---|
| 23 | lambda {
|
---|
| 24 | Kernel.eval 'lambda { c }.call'
|
---|
| 25 | }.call
|
---|
| 26 | }
|
---|
| 27 | assert_equal(15) {
|
---|
| 28 | c = 5
|
---|
| 29 | lambda {
|
---|
| 30 | a = 10
|
---|
| 31 | Kernel.eval 'lambda { c = a + c }.call'
|
---|
| 32 | }.call
|
---|
| 33 | c
|
---|
| 34 | }
|
---|
| 35 | assert_equal(2) {
|
---|
| 36 | a = 10
|
---|
| 37 | Kernel.eval 'def f(a); b=a.send(:+, 1); end'
|
---|
| 38 | f(1)
|
---|
| 39 | }
|
---|
| 40 | end
|
---|
| 41 |
|
---|
| 42 | assert('Kernel#eval', '15.3.1.3.12') do
|
---|
| 43 | assert_equal(10) { eval '1 * 10' }
|
---|
| 44 | end
|
---|
| 45 |
|
---|
| 46 | assert('rest arguments of eval') do
|
---|
| 47 | assert_raise(ArgumentError) { Kernel.eval('0', 0, 'test', 0) }
|
---|
| 48 | assert_equal ['test', 'test.rb', 10] do
|
---|
| 49 | Kernel.eval('[\'test\', __FILE__, __LINE__]', nil, 'test.rb', 10)
|
---|
| 50 | end
|
---|
| 51 | end
|
---|
| 52 |
|
---|
| 53 | assert 'eval syntax error' do
|
---|
| 54 | assert_raise(SyntaxError) do
|
---|
| 55 | eval 'p "test'
|
---|
| 56 | end
|
---|
| 57 | end
|
---|
| 58 |
|
---|
| 59 | assert('String instance_eval') do
|
---|
| 60 | obj = Object.new
|
---|
| 61 | obj.instance_variable_set :@test, 'test'
|
---|
| 62 | assert_raise(ArgumentError) { obj.instance_eval(0) { } }
|
---|
| 63 | assert_raise(ArgumentError) { obj.instance_eval('0', 'test', 0, 'test') }
|
---|
| 64 | assert_equal(['test.rb', 10]) { obj.instance_eval('[__FILE__, __LINE__]', 'test.rb', 10)}
|
---|
| 65 | assert_equal('test') { obj.instance_eval('@test') }
|
---|
| 66 | assert_equal('test') { obj.instance_eval { @test } }
|
---|
[331] | 67 | o = Object.new
|
---|
| 68 | assert_equal ['', o, o], o.instance_eval("[''].each { |s| break [s, o, self] }")
|
---|
[270] | 69 | end
|
---|
| 70 |
|
---|
| 71 | assert('Kernel.#eval(string) context') do
|
---|
| 72 | class TestEvalConstScope
|
---|
| 73 | EVAL_CONST_CLASS = 'class'
|
---|
| 74 | def const_string
|
---|
| 75 | eval 'EVAL_CONST_CLASS'
|
---|
| 76 | end
|
---|
| 77 | end
|
---|
| 78 | obj = TestEvalConstScope.new
|
---|
| 79 | assert_raise(NameError) { eval 'EVAL_CONST_CLASS' }
|
---|
| 80 | assert_equal('class') { obj.const_string }
|
---|
| 81 | end
|
---|
| 82 |
|
---|
| 83 | assert('Object#instance_eval with begin-rescue-ensure execution order') do
|
---|
| 84 | class HellRaiser
|
---|
| 85 | def raise_hell
|
---|
| 86 | order = [:enter_raise_hell]
|
---|
| 87 | begin
|
---|
| 88 | order.push :begin
|
---|
| 89 | self.instance_eval("raise 'error'")
|
---|
| 90 | rescue
|
---|
| 91 | order.push :rescue
|
---|
| 92 | ensure
|
---|
| 93 | order.push :ensure
|
---|
| 94 | end
|
---|
| 95 | order
|
---|
| 96 | end
|
---|
| 97 | end
|
---|
| 98 |
|
---|
| 99 | hell_raiser = HellRaiser.new
|
---|
| 100 | assert_equal([:enter_raise_hell, :begin, :rescue, :ensure], hell_raiser.raise_hell)
|
---|
| 101 | end
|
---|