require 'test/unit' require 'timeout' require 'timeout_ext' class TestTimeoutExt < Test::Unit::TestCase class T include Timeout end def test_override res = Timeout.method(:timeout).source_location.inspect assert_not_match %r{\.rb\b}, res, res res = Timeout::Error.new.method(:exception).source_location.inspect assert_not_match %r{\.rb\b}, res, res T.new.method(:timeout).source_location.inspect assert_not_match %r{\.rb\b}, res, res end def test_basic_timeout Timeout.timeout(nil) { sleep 0.01 } Timeout.timeout(1) { assert_equal 1, Thread.list.size } assert_raise(Timeout::Error) do Timeout.timeout(0.1) do assert_equal 1, Thread.list.size sleep end end t0 = Process.clock_gettime(Process::CLOCK_MONOTONIC) assert_raise(Timeout::Error) do Timeout.timeout(0.1) do assert_equal 1, Thread.list.size sleep 2 end end t1 = Process.clock_gettime(Process::CLOCK_MONOTONIC) assert_operator(t1 - t0, :<=, 1) end def test_different_exception assert_raise(RuntimeError.new('hello world')) do Timeout.timeout(10) { raise 'hello world' } end end end