From fcbf63e62c627deae76c1b8cb8c0876c536ed811 Mon Sep 17 00:00:00 2001 From: Jari Vetoniemi Date: Mon, 16 Mar 2020 18:49:26 +0900 Subject: Fresh start --- jni/ruby/test/test_timeout.rb | 100 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 jni/ruby/test/test_timeout.rb (limited to 'jni/ruby/test/test_timeout.rb') diff --git a/jni/ruby/test/test_timeout.rb b/jni/ruby/test/test_timeout.rb new file mode 100644 index 0000000..e4eba7f --- /dev/null +++ b/jni/ruby/test/test_timeout.rb @@ -0,0 +1,100 @@ +require 'test/unit' +require 'timeout' +require 'thread' + +class TestTimeout < Test::Unit::TestCase + def test_queue + q = Queue.new + assert_raise(Timeout::Error, "[ruby-dev:32935]") { + timeout(0.01) { q.pop } + } + end + + def test_timeout + assert_raise(Timeout::Error) do + Timeout.timeout(0.1) { + nil while true + } + end + end + + def test_cannot_convert_into_time_interval + bug3168 = '[ruby-dev:41010]' + def (n = Object.new).zero?; false; end + assert_raise(TypeError, bug3168) {Timeout.timeout(n) { sleep 0.1 }} + end + + def test_skip_rescue + bug8730 = '[Bug #8730]' + e = nil + assert_raise_with_message(Timeout::Error, /execution expired/, bug8730) do + timeout 0.01 do + begin + sleep 3 + rescue Exception => e + end + end + end + assert_nil(e, bug8730) + end + + def test_rescue_exit + exc = Class.new(RuntimeError) + e = nil + assert_nothing_raised(exc) do + timeout 0.01, exc do + begin + sleep 3 + rescue exc => e + end + end + end + assert_raise_with_message(exc, /execution expired/) {raise e if e} + end + + def test_custom_exception + bug9354 = '[ruby-core:59511] [Bug #9354]' + err = Class.new(StandardError) do + def initialize(msg) super end + end + assert_nothing_raised(ArgumentError, bug9354) do + assert_equal(:ok, timeout(100, err) {:ok}) + end + end + + def test_exit_exception + assert_raise_with_message(Timeout::Error, "boon") do + Timeout.timeout(10, Timeout::Error) do + raise Timeout::Error, "boon" + end + end + end + + def test_enumerator_next + bug9380 = '[ruby-dev:47872] [Bug #9380]: timeout in Enumerator#next' + e = (o=Object.new).to_enum + def o.each + sleep + end + assert_raise_with_message(Timeout::Error, 'execution expired', bug9380) do + Timeout.timeout(0.01) {e.next} + end + end + + def test_handle_interrupt + bug11344 = '[ruby-dev:49179] [Bug #11344]' + ok = false + assert_raise(Timeout::Error) { + Thread.handle_interrupt(Timeout::Error => :never) { + Timeout.timeout(0.01) { + sleep 0.2 + ok = true + Thread.handle_interrupt(Timeout::Error => :on_blocking) { + sleep 0.2 + } + } + } + } + assert(ok, bug11344) + end +end -- cgit v1.2.3