* io.c (rb_open_file): encoding in mode string was ignored if perm is
[ruby-svn.git] / bootstraptest / test_eval.rb
blob8b99c7968c89de1938811220755cb9221b3a1010
1 assert_equal %q{ok}, %q{
2   def m
3     a = :ok
4     $b = binding
5   end
6   m
7   eval('a', $b)
9 assert_equal %q{[:ok, :ok2]}, %q{
10   def m
11     a = :ok
12     $b = binding
13   end
14   m
15   eval('b = :ok2', $b)
16   eval('[a, b]', $b)
18 assert_equal %q{[nil, 1]}, %q{
19   $ans = []
20   def m
21     $b = binding
22   end
23   m
24   $ans << eval(%q{
25     $ans << eval(%q{
26       a
27     }, $b)
28     a = 1
29   }, $b)
30   $ans
32 assert_equal %q{C}, %q{
33   Const = :top
34   class C
35     Const = :C
36     def m
37       binding
38     end
39   end
40   eval('Const', C.new.m)
42 assert_equal %q{top}, %q{
43   Const = :top
44   a = 1
45   class C
46     Const = :C
47     def m
48       eval('Const', TOPLEVEL_BINDING)
49     end
50   end
51   C.new.m
53 assert_equal %q{:ok
54 ok}, %q{
55   class C
56     $b = binding
57   end
58   eval %q{
59     def m
60       :ok
61     end
62   }, $b
63   p C.new.m
65 assert_equal %q{ok}, %q{
66   b = proc{
67     a = :ok
68     binding
69   }.call
70   a = :ng
71   eval("a", b)
73 assert_equal %q{C}, %q{
74   class C
75     def foo
76       binding
77     end
78   end
79   C.new.foo.eval("self.class.to_s")
81 assert_equal %q{1}, %q{
82   eval('1')
84 assert_equal %q{1}, %q{
85   eval('a=1; a')
87 assert_equal %q{1}, %q{
88   a = 1
89   eval('a')
91 assert_equal %q{ok}, %q{
92   __send__ :eval, %{
93     :ok
94   }
96 assert_equal %q{ok}, %q{
97   1.__send__ :instance_eval, %{
98     :ok
99   }
101 assert_equal %q{1}, %q{
102   1.instance_eval{
103     self
104   }
106 assert_equal %q{foo}, %q{
107   'foo'.instance_eval{
108     self
109   }
111 assert_equal %q{1}, %q{
112   class Fixnum
113     Const = 1
114   end
115   1.instance_eval %{
116     Const
117   }
119 assert_equal %q{C}, %q{
120   Const = :top
121   class C
122     Const = :C
123   end
124   C.module_eval{
125     Const
126   }
128 assert_equal %q{C}, %q{
129   Const = :top
130   class C
131     Const = :C
132   end
133   C.class_eval %{
134     def m
135       Const
136     end
137   }
138   C.new.m
140 assert_equal %q{C}, %q{
141   Const = :top
142   class C
143     Const = :C
144   end
145   C.class_eval{
146     def m
147       Const
148     end
149   }
150   C.new.m
152 assert_equal %q{[:top, :C, :top, :C]}, %q{
153   Const = :top
154   class C
155     Const = :C
156   end
157   $nest = false
158   $ans = []
159   def m
160     $ans << Const
161     C.module_eval %{
162       $ans << Const
163       Boo = false unless defined? Boo
164       unless $nest
165         $nest = true
166         m
167       end
168     }
169   end
170   m
171   $ans
173 assert_equal %q{[10, main]}, %q{
174   $nested = false
175   $ans = []
176   $pr = proc{
177     $ans << self
178     unless $nested
179       $nested = true
180       $pr.call
181     end
182   }
183   class C
184     def initialize &b
185       10.instance_eval(&b)
186     end
187   end
188   C.new(&$pr)
189   $ans
192 %w[break next redo].each do |keyword|
193   assert_match %r"Can't escape from eval with #{keyword}\z", %{
194     begin
195       eval "0 rescue #{keyword}"
196     rescue SyntaxError => e
197       e.message
198     end
199   }, '[ruby-dev:31372]'
202 assert_normal_exit %q{
203   STDERR.reopen(STDOUT)
204   class Foo
205      def self.add_method
206        class_eval("def some-bad-name; puts 'hello' unless @some_variable.some_function(''); end")
207      end
208   end
209   Foo.add_method
210 }, '[ruby-core:14556] reported by Frederick Cheung'
212 assert_equal 'ok', %q{
213   class Module
214     def my_module_eval(&block)
215       module_eval(&block)
216     end
217   end
218   class String
219     Integer.my_module_eval do
220       def hoge; end
221     end
222   end
223   if Integer.instance_methods(false).map{|m|m.to_sym}.include?(:hoge) &&
224      !String.instance_methods(false).map{|m|m.to_sym}.include?(:hoge)
225     :ok
226   else
227     :ng
228   end
229 }, "[ruby-dev:34236]"
231 assert_equal 'ok', %q{
232   begin
233     eval("class nil::Foo; end")
234     :ng
235   rescue Exception
236     :ok
237   end
240 assert_equal 'ok', %q{
241   begin
242     0.instance_eval { def m() :m end }
243     1.m
244     :ng
245   rescue Exception
246     :ok
247   end
248 }, '[ruby-dev:34579]'
250 assert_equal 'ok', %q{
251   begin
252     12.instance_eval { @@a }
253   rescue NameError
254     :ok
255   end
256 }, '[ruby-core:16794]'
258 assert_equal 'ok', %q{
259   begin
260     12.instance_exec { @@a }
261   rescue NameError
262     :ok
263   end
264 }, '[ruby-core:16794]'
266 assert_equal 'ok', %q{
267   begin
268     nil.instance_eval {
269       def a() :a end
270     }
271   rescue TypeError
272     :ok
273   end
274 }, '[ruby-core:16796]'
276 assert_equal 'ok', %q{
277   begin
278     nil.instance_exec {
279       def a() :a end
280     }
281   rescue TypeError
282     :ok
283   end
284 }, '[ruby-core:16796]'
286 assert_normal_exit %q{
287   eval("", method(:proc).call {}.binding)