* transcode_data.h (rb_transcoder): add resetstate_func field for
[ruby-svn.git] / test / ruby / test_exception.rb
blob3300fcdd74c61718edfa2987f5148b1ecbbbbfe7
1 require 'test/unit'
2 require_relative 'envutil'
4 class TestException < Test::Unit::TestCase
5   def test_exception
6     begin
7       raise "this must be handled"
8       assert(false)
9     rescue
10       assert(true)
11     end
13     $bad = true
14     begin
15       raise "this must be handled no.2"
16     rescue
17       if $bad
18         $bad = false
19         retry
20         assert(false)
21       end
22     end
23     assert(true)
25     # exception in rescue clause
26     $string = "this must be handled no.3"
27     e = assert_raises(RuntimeError) do
28       begin
29         raise "exception in rescue clause"
30       rescue
31         raise $string
32       end
33       assert(false)
34     end
35     assert_equal($string, e.message)
37     # exception in ensure clause
38     $string = "exception in ensure clause"
39     e = assert_raises(RuntimeError) do
40       begin
41         raise "this must be handled no.4"
42       ensure
43         assert_instance_of(RuntimeError, $!)
44         assert_equal("this must be handled no.4", $!.message)
45         raise "exception in ensure clause"
46       end
47       assert(false)
48     end
49     assert_equal($string, e.message)
51     $bad = true
52     begin
53       begin
54         raise "this must be handled no.5"
55       ensure
56         $bad = false
57       end
58     rescue
59     end
60     assert(!$bad)
62     $bad = true
63     begin
64       begin
65         raise "this must be handled no.6"
66       ensure
67         $bad = false
68       end
69     rescue
70     end
71     assert(!$bad)
73     $bad = true
74     while true
75       begin
76         break
77       ensure
78         $bad = false
79       end
80     end
81     assert(!$bad)
83     assert(catch(:foo) {
84          loop do
85            loop do
86          throw :foo, true
87          break
88            end
89            break
90            assert(false)                        # should no reach here
91          end
92          false
93        })
95   end
97   def test_else
98     begin
99       assert(true)
100     rescue
101       assert(false)
102     else
103       assert(true)
104     end
106     begin
107       assert(true)
108       raise
109       assert(false)
110     rescue
111       assert(true)
112     else
113       assert(false)
114     end
116     begin
117       assert(true)
118       begin
119         assert(true)
120       rescue
121         assert(false)
122       else
123         assert(true)
124       end
125       assert(true)
126     rescue
127       assert(false)
128     else
129       assert(true)
130     end
132     begin
133       assert(true)
134       begin
135         assert(true)
136         raise
137         assert(false)
138       rescue
139         assert(true)
140       else
141         assert(false)
142       end
143       assert(true)
144     rescue
145       assert(false)
146     else
147       assert(true)
148     end
150     begin
151       assert(true)
152       begin
153         assert(true)
154       rescue
155         assert(false)
156       else
157         assert(true)
158       end
159       assert(true)
160       raise
161       assert(false)
162     rescue
163       assert(true)
164     else
165       assert(false)
166     end
168     begin
169       assert(true)
170       begin
171         assert(true)
172         raise
173         assert(false)
174       rescue
175         assert(true)
176       else
177         assert(false)
178       end
179       assert(true)
180       raise
181       assert(false)
182     rescue
183       assert(true)
184     else
185       assert(false)
186     end
187   end
189   def test_raise_with_wrong_number_of_arguments
190     assert_raise(TypeError) { raise nil }
191     assert_raise(TypeError) { raise 1, 1 }
192     assert_raise(ArgumentError) { raise 1, 1, 1, 1 }
193   end
195   def test_errat
196     assert_in_out_err([], "p $@", %w(nil), [])
198     assert_in_out_err([], "$@ = 1", [], /\$! not set \(ArgumentError\)$/)
200     assert_in_out_err([], <<-INPUT, [], /backtrace must be Array of String \(TypeError\)$/)
201       begin
202         raise
203       rescue
204         $@ = 1
205       end
206     INPUT
208     assert_in_out_err([], <<-INPUT, [], /^foo: unhandled exception$/)
209       begin
210         raise
211       rescue
212         $@ = 'foo'
213         raise
214       end
215     INPUT
217     assert_in_out_err([], <<-INPUT, [], /^foo: unhandled exception\s+from bar\s+from baz$/)
218       begin
219         raise
220       rescue
221         $@ = %w(foo bar baz)
222         raise
223       end
224     INPUT
225   end