diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-03-09 13:19:22 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-03-09 13:19:22 +0000 |
commit | c21c3b0befeb46a51b6bf3758ffa30813bea0ff0 (patch) | |
tree | 9754ff1ca740f6346cf8483ec915d4054bc5da2d /web/server/h2o/libh2o/deps/mruby/test/t/exception.rb | |
parent | Adding upstream version 1.43.2. (diff) | |
download | netdata-c21c3b0befeb46a51b6bf3758ffa30813bea0ff0.tar.xz netdata-c21c3b0befeb46a51b6bf3758ffa30813bea0ff0.zip |
Adding upstream version 1.44.3.upstream/1.44.3
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'web/server/h2o/libh2o/deps/mruby/test/t/exception.rb')
-rw-r--r-- | web/server/h2o/libh2o/deps/mruby/test/t/exception.rb | 422 |
1 files changed, 422 insertions, 0 deletions
diff --git a/web/server/h2o/libh2o/deps/mruby/test/t/exception.rb b/web/server/h2o/libh2o/deps/mruby/test/t/exception.rb new file mode 100644 index 000000000..ce7b5841e --- /dev/null +++ b/web/server/h2o/libh2o/deps/mruby/test/t/exception.rb @@ -0,0 +1,422 @@ +## +# Exception ISO Test + +assert('Exception', '15.2.22') do + assert_equal Class, Exception.class +end + +assert('Exception.exception', '15.2.22.4.1') do + e = Exception.exception('a') + + assert_equal Exception, e.class +end + +assert('Exception#exception', '15.2.22.5.1') do + e = Exception.new + re = RuntimeError.new + assert_equal e, e.exception + assert_equal e, e.exception(e) + assert_equal re, re.exception(re) + changed_re = re.exception('message has changed') + assert_not_equal re, changed_re + assert_equal 'message has changed', changed_re.message +end + +assert('Exception#message', '15.2.22.5.2') do + e = Exception.exception('a') + + assert_equal 'a', e.message +end + +assert('Exception#to_s', '15.2.22.5.3') do + e = Exception.exception('a') + + assert_equal 'a', e.to_s +end + +assert('Exception.exception', '15.2.22.4.1') do + e = Exception.exception() + e.initialize('a') + + assert_equal 'a', e.message +end + +assert('NameError', '15.2.31') do + assert_raise(NameError) do + raise NameError.new + end + + e = NameError.new "msg", "name" + assert_equal "msg", e.message + assert_equal "name", e.name +end + +assert('ScriptError', '15.2.37') do + assert_raise(ScriptError) do + raise ScriptError.new + end +end + +assert('SyntaxError', '15.2.38') do + assert_raise(SyntaxError) do + raise SyntaxError.new + end +end + +# Not ISO specified + +assert('Exception 1') do +r=begin + 1+1 + ensure + 2+2 + end + assert_equal 2, r +end + +assert('Exception 2') do +r=begin + 1+1 + begin + 2+2 + ensure + 3+3 + end + ensure + 4+4 + end + assert_equal 4, r +end + +assert('Exception 3') do +r=begin + 1+1 + begin + 2+2 + ensure + 3+3 + end + ensure + 4+4 + begin + 5+5 + ensure + 6+6 + end + end + assert_equal 4, r +end + +assert('Exception 4') do + a = nil + 1.times{|e| + begin + rescue => err + end + a = err.class + } + assert_equal NilClass, a +end + +assert('Exception 5') do + $ans = [] + def m + $! + end + def m2 + 1.times{ + begin + return + ensure + $ans << m + end + } + end + m2 + assert_equal [nil], $ans +end + +assert('Exception 6') do + $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 + assert_equal 7, $i +end + +assert('Exception 7') do + $i = 0 + def m + begin + $i += 1 + begin + $i += 2 + return + ensure + $i += 3 + end + ensure + $i += 4 + end + p :end + end + m + assert_equal 10, $i +end + +assert('Exception 8') do +r=begin + 1 + rescue + 2 + else + 3 + end + assert_equal 3, r +end + +assert('Exception 9') do +r=begin + 1+1 + rescue + 2+2 + else + 3+3 + ensure + 4+4 + end + assert_equal 6, r +end + +assert('Exception 10') do +r=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 12, r +end + +assert('Exception 11') do + a = :ok + begin + begin + raise Exception + rescue + a = :ng + end + rescue Exception + end + assert_equal :ok, a +end + +assert('Exception 12') do + a = :ok + begin + raise Exception rescue a = :ng + rescue Exception + end + assert_equal :ok, a +end + +assert('Exception 13') do + a = :ng + begin + raise StandardError + rescue TypeError, ArgumentError + a = :ng + rescue + a = :ok + else + a = :ng + end + assert_equal :ok, a +end + +assert('Exception 14') do + def exception_test14; UnknownConstant; end + a = :ng + begin + send(:exception_test14) + rescue + a = :ok + end + + assert_equal :ok, a +end + +assert('Exception 15') do + a = begin + :ok + rescue + :ko + end + assert_equal :ok, a +end + +assert('Exception 16') do + begin + raise "foo" + false + rescue => e + assert_equal "foo", e.message + end +end + +assert('Exception 17') do +r=begin + raise "a" # RuntimeError + rescue ArgumentError + 1 + rescue StandardError + 2 + else + 3 + ensure + 4 + end + assert_equal 2, r +end + +assert('Exception 18') do +r=begin + 0 + rescue ArgumentError + 1 + rescue StandardError + 2 + else + 3 + ensure + 4 + end + assert_equal 3, r +end + +assert('Exception 19') do + class Class4Exception19 + def a + r = @e = false + begin + b + rescue TypeError + r = self.z + end + [ r, @e ] + end + + def b + begin + 1 * "b" + ensure + @e = self.zz + end + end + + def zz + true + end + def z + true + end + end + assert_equal [true, true], Class4Exception19.new.a +end + +assert('Exception#inspect without message') do + assert_equal "Exception", Exception.new.inspect +end + +assert('Exception#backtrace') do + assert_nothing_raised do + begin + raise "get backtrace" + rescue => e + e.backtrace + end + end +end + +assert('Raise in ensure') do + assert_raise(ArgumentError) do + begin + raise "" # RuntimeError + ensure + raise ArgumentError + end + end +end + +def backtrace_available? + begin + raise "XXX" + rescue => exception + not exception.backtrace.empty? + end +end + +assert('GC in rescue') do + skip "backtrace isn't available" unless backtrace_available? + + line = nil + begin + [1].each do + [2].each do + [3].each do + line = __LINE__; raise "XXX" + end + end + end + rescue => exception + GC.start + assert_equal("#{__FILE__}:#{line}:in call", + exception.backtrace.first) + end +end + +assert('Method call in rescue') do + skip "backtrace isn't available" unless backtrace_available? + + line = nil + begin + [1].each do + [2].each do + line = __LINE__; raise "XXX" + end + end + rescue => exception + [3].each do + end + assert_equal("#{__FILE__}:#{line}:in call", + exception.backtrace.first) + end +end |