source: EcnlProtoTool/trunk/mruby-1.3.0/test/t/exception.rb@ 331

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

prototoolに関連するプロジェクトをnewlibからmuslを使うよう変更・更新
ntshellをnewlibの下位の実装から、muslのsyscallの実装に変更・更新
以下のOSSをアップデート
・mruby-1.3.0
・musl-1.1.18
・onigmo-6.1.3
・tcc-0.9.27
以下のOSSを追加
・openssl-1.1.0e
・curl-7.57.0
・zlib-1.2.11
以下のmrbgemsを追加
・iij/mruby-digest
・iij/mruby-env
・iij/mruby-errno
・iij/mruby-iijson
・iij/mruby-ipaddr
・iij/mruby-mock
・iij/mruby-require
・iij/mruby-tls-openssl

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-ruby;charset=UTF-8
File size: 5.7 KB
Line 
1##
2# Exception ISO Test
3
4assert('Exception', '15.2.22') do
5 assert_equal Class, Exception.class
6end
7
8assert('Exception.exception', '15.2.22.4.1') do
9 e = Exception.exception('a')
10
11 assert_equal Exception, e.class
12end
13
14assert('Exception#exception', '15.2.22.5.1') do
15 e = Exception.new
16 re = RuntimeError.new
17 assert_equal e, e.exception
18 assert_equal e, e.exception(e)
19 assert_equal re, re.exception(re)
20 changed_re = re.exception('message has changed')
21 assert_not_equal re, changed_re
22 assert_equal 'message has changed', changed_re.message
23end
24
25assert('Exception#message', '15.2.22.5.2') do
26 e = Exception.exception('a')
27
28 assert_equal 'a', e.message
29end
30
31assert('Exception#to_s', '15.2.22.5.3') do
32 e = Exception.exception('a')
33
34 assert_equal 'a', e.to_s
35end
36
37assert('Exception.exception', '15.2.22.4.1') do
38 e = Exception.exception()
39 e.initialize('a')
40
41 assert_equal 'a', e.message
42end
43
44assert('NameError', '15.2.31') do
45 assert_raise(NameError) do
46 raise NameError.new
47 end
48
49 e = NameError.new "msg", "name"
50 assert_equal "msg", e.message
51 assert_equal "name", e.name
52end
53
54assert('ScriptError', '15.2.37') do
55 assert_raise(ScriptError) do
56 raise ScriptError.new
57 end
58end
59
60assert('SyntaxError', '15.2.38') do
61 assert_raise(SyntaxError) do
62 raise SyntaxError.new
63 end
64end
65
66# Not ISO specified
67
68assert('Exception 1') do
69r=begin
70 1+1
71 ensure
72 2+2
73 end
74 assert_equal 2, r
75end
76
77assert('Exception 2') do
78r=begin
79 1+1
80 begin
81 2+2
82 ensure
83 3+3
84 end
85 ensure
86 4+4
87 end
88 assert_equal 4, r
89end
90
91assert('Exception 3') do
92r=begin
93 1+1
94 begin
95 2+2
96 ensure
97 3+3
98 end
99 ensure
100 4+4
101 begin
102 5+5
103 ensure
104 6+6
105 end
106 end
107 assert_equal 4, r
108end
109
110assert('Exception 4') do
111 a = nil
112 1.times{|e|
113 begin
114 rescue => err
115 end
116 a = err.class
117 }
118 assert_equal NilClass, a
119end
120
121assert('Exception 5') do
122 $ans = []
123 def m
124 $!
125 end
126 def m2
127 1.times{
128 begin
129 return
130 ensure
131 $ans << m
132 end
133 }
134 end
135 m2
136 assert_equal [nil], $ans
137end
138
139assert('Exception 6') do
140 $i = 0
141 def m
142 iter{
143 begin
144 $i += 1
145 begin
146 $i += 2
147 break
148 ensure
149
150 end
151 ensure
152 $i += 4
153 end
154 $i = 0
155 }
156 end
157
158 def iter
159 yield
160 end
161 m
162 assert_equal 7, $i
163end
164
165assert('Exception 7') do
166 $i = 0
167 def m
168 begin
169 $i += 1
170 begin
171 $i += 2
172 return
173 ensure
174 $i += 3
175 end
176 ensure
177 $i += 4
178 end
179 p :end
180 end
181 m
182 assert_equal 10, $i
183end
184
185assert('Exception 8') do
186r=begin
187 1
188 rescue
189 2
190 else
191 3
192 end
193 assert_equal 3, r
194end
195
196assert('Exception 9') do
197r=begin
198 1+1
199 rescue
200 2+2
201 else
202 3+3
203 ensure
204 4+4
205 end
206 assert_equal 6, r
207end
208
209assert('Exception 10') do
210r=begin
211 1+1
212 begin
213 2+2
214 rescue
215 3+3
216 else
217 4+4
218 end
219 rescue
220 5+5
221 else
222 6+6
223 ensure
224 7+7
225 end
226 assert_equal 12, r
227end
228
229assert('Exception 11') do
230 a = :ok
231 begin
232 begin
233 raise Exception
234 rescue
235 a = :ng
236 end
237 rescue Exception
238 end
239 assert_equal :ok, a
240end
241
242assert('Exception 12') do
243 a = :ok
244 begin
245 raise Exception rescue a = :ng
246 rescue Exception
247 end
248 assert_equal :ok, a
249end
250
251assert('Exception 13') do
252 a = :ng
253 begin
254 raise StandardError
255 rescue TypeError, ArgumentError
256 a = :ng
257 rescue
258 a = :ok
259 else
260 a = :ng
261 end
262 assert_equal :ok, a
263end
264
265assert('Exception 14') do
266 def exception_test14; UnknownConstant; end
267 a = :ng
268 begin
269 send(:exception_test14)
270 rescue
271 a = :ok
272 end
273
274 assert_equal :ok, a
275end
276
277assert('Exception 15') do
278 a = begin
279 :ok
280 rescue
281 :ko
282 end
283 assert_equal :ok, a
284end
285
286assert('Exception 16') do
287 begin
288 raise "foo"
289 false
290 rescue => e
291 assert_equal "foo", e.message
292 end
293end
294
295assert('Exception 17') do
296r=begin
297 raise "a" # RuntimeError
298 rescue ArgumentError
299 1
300 rescue StandardError
301 2
302 else
303 3
304 ensure
305 4
306 end
307 assert_equal 2, r
308end
309
310assert('Exception 18') do
311r=begin
312 0
313 rescue ArgumentError
314 1
315 rescue StandardError
316 2
317 else
318 3
319 ensure
320 4
321 end
322 assert_equal 3, r
323end
324
325assert('Exception 19') do
326 class Class4Exception19
327 def a
328 r = @e = false
329 begin
330 b
331 rescue TypeError
332 r = self.z
333 end
334 [ r, @e ]
335 end
336
337 def b
338 begin
339 1 * "b"
340 ensure
341 @e = self.zz
342 end
343 end
344
345 def zz
346 true
347 end
348 def z
349 true
350 end
351 end
352 assert_equal [true, true], Class4Exception19.new.a
353end
354
355assert('Exception#inspect without message') do
356 assert_equal "Exception", Exception.new.inspect
357end
358
359assert('Exception#backtrace') do
360 assert_nothing_raised do
361 begin
362 raise "get backtrace"
363 rescue => e
364 e.backtrace
365 end
366 end
367end
368
369assert('Raise in ensure') do
370 assert_raise(ArgumentError) do
371 begin
372 raise "" # RuntimeError
373 ensure
374 raise ArgumentError
375 end
376 end
377end
378
379def backtrace_available?
380 begin
381 raise "XXX"
382 rescue => exception
383 not exception.backtrace.empty?
384 end
385end
386
387assert('GC in rescue') do
388 skip "backtrace isn't available" unless backtrace_available?
389
390 line = nil
391 begin
392 [1].each do
393 [2].each do
394 [3].each do
395 line = __LINE__; raise "XXX"
396 end
397 end
398 end
399 rescue => exception
400 GC.start
401 assert_equal("#{__FILE__}:#{line}:in call",
402 exception.backtrace.first)
403 end
404end
405
406assert('Method call in rescue') do
407 skip "backtrace isn't available" unless backtrace_available?
408
409 line = nil
410 begin
411 [1].each do
412 [2].each do
413 line = __LINE__; raise "XXX"
414 end
415 end
416 rescue => exception
417 [3].each do
418 end
419 assert_equal("#{__FILE__}:#{line}:in call",
420 exception.backtrace.first)
421 end
422end
Note: See TracBrowser for help on using the repository browser.