summaryrefslogtreecommitdiff
path: root/bootstraptest/test_exception.rb
blob: decfdc08a308959ae980158444b63a9de1f12aa9 (plain)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432
assert_equal %q{2}, %q{ begin 1+1 ensure 2+2 end } assert_equal %q{4}, %q{ begin 1+1 begin 2+2 ensure 3+3 end ensure 4+4 end } assert_equal %q{4}, %q{ begin 1+1 begin 2+2 ensure 3+3 end ensure 4+4 begin 5+5 ensure 6+6 end end } assert_equal %q{NilClass}, %q{ a = nil 1.times{|e| begin rescue => err end a = err.class } a } assert_equal %q{RuntimeError}, %q{ a = nil 1.times{|e| begin raise rescue => err end a = err.class } a } assert_equal %q{}, %q{ $! } assert_equal %q{FOO}, %q{ begin raise "FOO" rescue $! end } assert_equal %q{FOO}, %q{ def m $! end begin raise "FOO" rescue m() end } assert_equal %q{[#<RuntimeError: BAR>, #<RuntimeError: FOO>]}, %q{ $ans = [] def m $! end begin raise "FOO" rescue begin raise "BAR" rescue $ans << m() end $ans << m() end $ans } assert_equal %q{[#<RuntimeError: FOO>, #<RuntimeError: FOO>]}, %q{ $ans = [] def m $! end begin begin raise "FOO" ensure $ans << m() end rescue $ans << m() end } assert_equal %q{[nil]}, %q{ $ans = [] def m $! end def m2 1.times{ begin return ensure $ans << m end } end m2 $ans } assert_equal %q{ok}, %q{ begin raise rescue :ok end } assert_equal %q{ok}, %q{ begin raise rescue :ok ensure :ng end } assert_equal %q{RuntimeError}, %q{ begin raise rescue => e e.class end } assert_equal %q{ng}, %q{ begin raise rescue StandardError :ng rescue Exception :ok end } assert_equal %q{c}, %q{ begin begin raise "a" rescue raise "b" ensure raise "c" end rescue => e e.message end } assert_equal %q{33}, %q{ def m a, b a + b end m(1, begin raise rescue 2 end) + m(10, begin raise rescue 20 ensure 30 end) } assert_equal %q{3}, %q{ def m a, b a + b end m(begin raise rescue 1 end, begin raise rescue 2 end) } assert_equal %q{ok3}, %q{ class E1 < Exception end def m yield end begin begin begin m{ raise } rescue E1 :ok2 ensure end rescue :ok3 ensure end rescue E1 :ok ensure end } assert_equal %q{7}, %q{ $i = 0 def m iter{ begin $i += 1 begin $i += 2 break ensure end ensure $i += 4 end $i = 0 } end def iter yield end m $i } assert_equal %q{10}, %q{ $i = 0 def m begin $i += 1 begin $i += 2 return ensure $i += 3 end ensure $i += 4 end p :end end m $i } assert_equal %q{1}, %q{ begin 1 rescue 2 end } assert_equal %q{4}, %q{ begin 1 begin 2 rescue 3 end 4 rescue 5 end } assert_equal %q{3}, %q{ begin 1 rescue 2 else 3 end } assert_equal %q{2}, %q{ begin 1+1 rescue 2+2 ensure 3+3 end } assert_equal %q{2}, %q{ begin 1+1 rescue 2+2 ensure 3+3 end } assert_equal %q{6}, %q{ begin 1+1 rescue 2+2 else 3+3 ensure 4+4 end } assert_equal %q{12}, %q{ begin 1+1 begin 2+2 rescue 3+3 else 4+4 end rescue 5+5 else 6+6 ensure 7+7 end } assert_equal %q{ok}, %q{ # proc{ begin raise break rescue :ok end }.call } assert_equal %q{}, %q{ proc do begin raise StandardError redo rescue StandardError end end.call } ## assert_match /undefined method 'foo\'/, %q{#` STDERR.reopen(STDOUT) class C def inspect bar {} end def bar raise ensure end end C.new.foo }, "[ruby-dev:31407]" assert_equal 'nil', %q{ doit = false exc = nil t = Thread.new { begin doit = true sleep 10 ensure exc = $! end } Thread.pass until doit t.kill t.join exc.inspect }, '[ruby-dev:32608]' assert_equal 'divided by 0', %q{ class ZeroDivisionError def self.new(message) 42 end end begin 1/0 rescue Exception => e e.message end }, '[ruby-core:24767]' assert_equal 'ok', %q{ class C def ===(o) true end end begin begin raise rescue C.new end rescue TypeError :ok end } 
close