* io.c (rb_open_file): encoding in mode string was ignored if perm is
[ruby-svn.git] / yarvtest / test_eval.rb
blob0432caa3f1e4cf0050be02d5f37cca84eb6844d9
1 require 'yarvtest/yarvtest'
3 class TestEval < YarvTestBase
4   def test_eval
5     ae %q{
6       eval('1')
7     }
8     ae %q{
9       eval('a=1; a')
10     }
11     ae %q{
12       a = 1
13       eval('a')
14     }
15   end
17   def test_eval_with_send
18     ae %q{
19       __send__ :eval, %{
20         :ok
21       }
22     }
23     ae %q{
24       1.__send__ :instance_eval, %{
25         :ok
26       }
27     }
28   end
30   def test_module_eval
31     ae %q{
32       Const = :top
33       class C
34         Const = :C
35       end
36       C.module_eval{
37         Const
38       }
39     }
40     ae %q{
41       Const = :top
42       class C
43         Const = :C
44       end
45       C.module_eval %{
46         Const
47       }
48     } if false # TODO: Ruby 1.9 error
50     ae %q{
51       Const = :top
52       class C
53         Const = :C
54       end
55       C.class_eval %{
56         def m
57           Const
58         end
59       }
60       C.new.m
61     }
62     ae %q{
63       Const = :top
64       class C
65         Const = :C
66       end
67       C.class_eval{
68         def m
69           Const
70         end
71       }
72       C.new.m
73     }
74   end
76   def test_instance_eval
77     ae %q{
78       1.instance_eval{
79         self
80       }
81     }
82     ae %q{
83       'foo'.instance_eval{
84         self
85       }
86     }
87     ae %q{
88       class Fixnum
89         Const = 1
90       end
91       1.instance_eval %{
92         Const
93       }
94     }
95   end
96   
97   def test_nest_eval
98     ae %q{
99       Const = :top
100       class C
101         Const = :C
102       end
103       $nest = false
104       $ans = []
105       def m
106         $ans << Const
107         C.module_eval %{
108           $ans << Const
109           Boo = false unless defined? Boo
110           unless $nest
111             $nest = true
112             m
113           end
114         }
115       end
116       m
117       $ans
118     }
119     ae %q{
120       $nested = false
121       $ans = []
122       $pr = proc{
123         $ans << self
124         unless $nested
125           $nested = true
126           $pr.call
127         end
128       }
129       class C
130         def initialize &b
131           10.instance_eval(&b)
132         end
133       end
134       C.new(&$pr)
135       $ans
136     }
137   end
139   def test_binding
140     ae %q{
141       def m
142         a = :ok
143         $b = binding
144       end
145       m
146       eval('a', $b)
147     }
148     ae %q{
149       def m
150         a = :ok
151         $b = binding
152       end
153       m
154       eval('b = :ok2', $b)
155       eval('[a, b]', $b)
156     }
157     ae %q{
158       $ans = []
159       def m
160         $b = binding
161       end
162       m
163       $ans << eval(%q{
164         $ans << eval(%q{
165           a
166         }, $b)
167         a = 1
168       }, $b)
169       $ans
170     }
171     ae %q{
172       Const = :top
173       class C
174         Const = :C
175         def m
176           binding
177         end
178       end
179       eval('Const', C.new.m)
180     }
181     ae %q{
182       Const = :top
183       a = 1
184       class C
185         Const = :C
186         def m
187           eval('Const', TOPLEVEL_BINDING)
188         end
189       end
190       C.new.m
191     }
192     ae %q{
193       class C
194         $b = binding
195       end
196       eval %q{
197         def m
198           :ok
199         end
200       }, $b
201       p C.new.m
202     }
203     ae %q{
204       b = proc{
205         a = :ok
206         binding
207       }.call
208       a = :ng
209       eval("a", b)
210     }
211     ae %q{
212       class C
213         def foo
214           binding
215         end
216       end
217       C.new.foo.eval("self.class.to_s")
218     }
219   end