summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-error/test/exception.rb
diff options
context:
space:
mode:
authortake_cheeze <[email protected]>2015-06-22 00:05:45 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2015-07-15 14:46:56 +0900
commitcdd72d9c3783749c979edf62522cf9636681538d (patch)
treefbedcf59fc7176d7e6b82adf20170e44b3787a98 /mrbgems/mruby-error/test/exception.rb
parent2e4bc2de8889a321fbde9898bc9afc9daefd8f76 (diff)
downloadmruby-cdd72d9c3783749c979edf62522cf9636681538d.tar.gz
mruby-cdd72d9c3783749c979edf62522cf9636681538d.zip
Implement `mrb_protect`, `mrb_ensure`, `mrb_rescue`, `mrb_rescue_exceptions`.
(`mrb_rescue_exceptions` is mruby implementation of `rb_rescue2`.) Closes #2844, closes #2837.
Diffstat (limited to 'mrbgems/mruby-error/test/exception.rb')
-rw-r--r--mrbgems/mruby-error/test/exception.rb53
1 files changed, 53 insertions, 0 deletions
diff --git a/mrbgems/mruby-error/test/exception.rb b/mrbgems/mruby-error/test/exception.rb
new file mode 100644
index 000000000..b5ea719a2
--- /dev/null
+++ b/mrbgems/mruby-error/test/exception.rb
@@ -0,0 +1,53 @@
+assert 'mrb_protect' do
+ assert_equal ['test', false] do
+ ExceptionTest.mrb_protect { 'test' }
+ end
+ assert_equal [nil, true] do
+ ExceptionTest.mrb_protect { raise 'test' }
+ end
+end
+
+assert 'mrb_ensure' do
+ a = false
+ assert_equal 'test' do
+ ExceptionTest.mrb_ensure Proc.new { 'test' }, Proc.new { a = true }
+ end
+ assert_true a
+
+ a = false
+ assert_raise RuntimeError do
+ ExceptionTest.mrb_ensure Proc.new { raise 'test' }, Proc.new { a = true }
+ end
+ assert_true a
+end
+
+assert 'mrb_rescue' do
+ assert_equal 'test' do
+ ExceptionTest.mrb_rescue Proc.new { 'test' }, Proc.new {}
+ end
+
+ class CustomExp < Exception
+ end
+
+ assert_raise CustomExp do
+ ExceptionTest.mrb_rescue Proc.new { raise CustomExp.new 'test' }, Proc.new { 'rescue' }
+ end
+
+ assert_equal 'rescue' do
+ ExceptionTest.mrb_rescue Proc.new { raise 'test' }, Proc.new { 'rescue' }
+ end
+end
+
+assert 'mrb_rescue_exceptions' do
+ assert_equal 'test' do
+ ExceptionTest.mrb_rescue_exceptions Proc.new { 'test' }, Proc.new {}
+ end
+
+ assert_raise RangeError do
+ ExceptionTest.mrb_rescue_exceptions Proc.new { raise RangeError.new 'test' }, Proc.new { 'rescue' }
+ end
+
+ assert_equal 'rescue' do
+ ExceptionTest.mrb_rescue_exceptions Proc.new { raise TypeError.new 'test' }, Proc.new { 'rescue' }
+ end
+end