* io.c (rb_open_file): encoding in mode string was ignored if perm is
[ruby-svn.git] / bootstraptest / test_exception.rb
blobbd3d02ade3c20b715d4f515d35e44eefc0e6666f
1 assert_equal %q{2}, %q{
2   begin
3     1+1
4   ensure
5     2+2
6   end
8 assert_equal %q{4}, %q{
9   begin
10     1+1
11     begin
12       2+2
13     ensure
14       3+3
15     end
16   ensure
17     4+4
18   end
20 assert_equal %q{4}, %q{
21   begin
22     1+1
23     begin
24       2+2
25     ensure
26       3+3
27     end
28   ensure
29     4+4
30     begin
31       5+5
32     ensure
33       6+6
34     end
35   end
37 assert_equal %q{NilClass}, %q{
38   a = nil
39   1.times{|e|
40     begin
41     rescue => err
42     end
43     a = err.class
44   }
45   a
47 assert_equal %q{RuntimeError}, %q{
48   a = nil
49   1.times{|e|
50     begin
51       raise
52     rescue => err
53     end
54     a = err.class
55   }
56   a
58 assert_equal %q{}, %q{
59   $!
61 assert_equal %q{FOO}, %q{
62   begin
63     raise "FOO"
64   rescue
65     $!
66   end
68 assert_equal %q{FOO}, %q{
69   def m
70     $!
71   end
72   begin
73     raise "FOO"
74   rescue
75     m()
76   end
78 assert_equal %q{[#<RuntimeError: BAR>, #<RuntimeError: FOO>]}, %q{
79   $ans = []
80   def m
81     $!
82   end
83   begin
84     raise "FOO"
85   rescue
86     begin
87       raise "BAR"
88     rescue
89       $ans << m()
90     end
91     $ans << m()
92   end
93   $ans
95 assert_equal %q{[#<RuntimeError: FOO>, #<RuntimeError: FOO>]}, %q{
96   $ans = []
97   def m
98     $!
99   end
100   
101   begin
102     begin
103       raise "FOO"
104     ensure
105       $ans << m()
106     end
107   rescue
108     $ans << m()
109   end
111 assert_equal %q{[nil]}, %q{
112   $ans = []
113   def m
114     $!
115   end
116   def m2
117     1.times{
118       begin
119         return
120       ensure
121         $ans << m
122       end
123     }
124   end
125   m2
126   $ans
128 assert_equal %q{ok}, %q{
129   begin
130     raise
131   rescue
132     :ok
133   end
135 assert_equal %q{ok}, %q{
136   begin
137     raise
138   rescue
139     :ok
140   ensure
141     :ng
142   end
144 assert_equal %q{RuntimeError}, %q{
145   begin
146     raise
147   rescue => e
148     e.class
149   end
151 assert_equal %q{ng}, %q{
152   begin
153     raise
154   rescue StandardError
155     :ng
156   rescue Exception
157     :ok
158   end
160 assert_equal %q{c}, %q{
161   begin
162     begin
163       raise "a"
164     rescue
165       raise "b"
166     ensure
167       raise "c"
168     end
169   rescue => e
170     e.message
171   end
173 assert_equal %q{33}, %q{
174   def m a, b
175     a + b
176   end
177   m(1, begin
178          raise
179        rescue
180          2
181        end) +
182   m(10, begin
183          raise
184        rescue
185          20
186        ensure
187          30
188        end)
190 assert_equal %q{3}, %q{
191   def m a, b
192     a + b
193   end
194   m(begin
195       raise
196     rescue
197       1
198     end,
199     begin
200       raise
201     rescue
202       2
203     end)
205 assert_equal %q{ok3}, %q{
206   class E1 < Exception
207   end
208   
209   def m
210     yield
211   end
212   
213   begin
214     begin
215       begin
216         m{
217           raise
218         }
219       rescue E1
220         :ok2
221       ensure
222       end
223     rescue
224       :ok3
225     ensure
226     end
227   rescue E1
228     :ok
229   ensure
230   end
232 assert_equal %q{7}, %q{
233   $i = 0
234   def m
235     iter{
236       begin
237         $i += 1
238         begin
239           $i += 2
240           break
241         ensure
242           
243         end
244       ensure
245         $i += 4
246       end
247       $i = 0
248     }
249   end
250   
251   def iter
252     yield
253   end
254   m
255   $i
257 assert_equal %q{10}, %q{
258   $i = 0
259   def m
260     begin
261       $i += 1
262       begin
263         $i += 2
264         return
265       ensure
266         $i += 3
267       end
268     ensure
269       $i += 4
270     end
271     p :end
272   end
273   m
274   $i
276 assert_equal %q{1}, %q{
277   begin
278     1
279   rescue
280     2
281   end
283 assert_equal %q{4}, %q{
284   begin
285     1
286     begin
287       2
288     rescue
289       3
290     end
291     4
292   rescue
293     5
294   end
296 assert_equal %q{3}, %q{
297   begin
298     1
299   rescue
300     2
301   else
302     3
303   end
305 assert_equal %q{2}, %q{
306   begin
307     1+1
308   rescue
309     2+2
310   ensure
311     3+3
312   end
313    }
314 assert_equal %q{2}, %q{
315   begin
316     1+1
317   rescue
318     2+2
319   ensure
320     3+3
321   end
322    }
323 assert_equal %q{6}, %q{
324   begin
325     1+1
326   rescue
327     2+2
328   else
329     3+3
330   ensure
331     4+4
332   end
333    }
334 assert_equal %q{12}, %q{
335  begin
336    1+1
337    begin
338      2+2
339    rescue
340      3+3
341    else
342      4+4
343    end
344  rescue
345    5+5
346  else
347    6+6
348  ensure
349    7+7
350  end
351    }
352 assert_equal %q{ok}, %q{ # 
353   proc{
354     begin
355       raise
356       break
357     rescue
358       :ok
359     end
360   }.call
362 assert_equal %q{}, %q{
363   proc do
364     begin
365       raise StandardError
366       redo
367     rescue StandardError
368     end
369   end.call
373 assert_match /undefined method `foo\'/, %q{
374   STDERR.reopen(STDOUT)
375   class C
376     def inspect
377       bar {}
378     end
379     
380     def bar
381       raise
382     ensure
383     end
384   end
385   C.new.foo
386 }, "[ruby-dev:31407]"
388 assert_equal 'nil', %q{
389   doit = false
390   exc = nil
391   t = Thread.new {
392     begin
393       doit = true
394       sleep 10
395     ensure
396       exc = $!
397     end
398   }
399   Thread.pass until doit
400   t.kill
401   t.join
402   exc.inspect
403 }, '[ruby-dev:32608]'