source: EcnlProtoTool/trunk/mruby-1.2.0/mrbgems/mruby-eval/test/eval.rb@ 270

Last change on this file since 270 was 270, checked in by coas-nagasima, 7 years ago

mruby版ECNLプロトタイピング・ツールを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-ruby
File size: 2.2 KB
Line 
1assert('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 }
40end
41
42assert('Kernel#eval', '15.3.1.3.12') do
43 assert_equal(10) { eval '1 * 10' }
44end
45
46assert('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
51end
52
53assert 'eval syntax error' do
54 assert_raise(SyntaxError) do
55 eval 'p "test'
56 end
57end
58
59assert('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 } }
67end
68
69assert('Kernel.#eval(string) context') do
70 class TestEvalConstScope
71 EVAL_CONST_CLASS = 'class'
72 def const_string
73 eval 'EVAL_CONST_CLASS'
74 end
75 end
76 obj = TestEvalConstScope.new
77 assert_raise(NameError) { eval 'EVAL_CONST_CLASS' }
78 assert_equal('class') { obj.const_string }
79end
80
81assert('Object#instance_eval with begin-rescue-ensure execution order') do
82 class HellRaiser
83 def raise_hell
84 order = [:enter_raise_hell]
85 begin
86 order.push :begin
87 self.instance_eval("raise 'error'")
88 rescue
89 order.push :rescue
90 ensure
91 order.push :ensure
92 end
93 order
94 end
95 end
96
97 hell_raiser = HellRaiser.new
98 assert_equal([:enter_raise_hell, :begin, :rescue, :ensure], hell_raiser.raise_hell)
99end
Note: See TracBrowser for help on using the repository browser.