1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

merge revision(s) 44517,44518,44519,44523: [Backport #9354]

* lib/timeout.rb (Timeout#timeout): when a custom exception is given,
	  no instance is needed to be caught, so defer creating new instance
	  until it is raised.  [ruby-core:59511] [Bug #9354]

	* lib/timeout.rb (Timeout#timeout): should not rescue ordinarily
	  raised ExitException, which should not be thrown.

	* lib/timeout.rb (Timeout::ExitException.catch): set @thread only if
	  it ought to be caught.

	* lib/timeout.rb (Timeout::ExitException.catch): pass arguments
	  for new instance.

	* lib/timeout.rb (Timeout::ExitException#exception): fallback to
	  Timeout::Error if couldn't throw.  [ruby-dev:47872] [Bug #9380]

	* lib/timeout.rb (Timeout#timeout): initialize ExitException with
	  message for the fallback case.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@44841 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
naruse 2014-02-05 12:43:19 +00:00
parent c0bdb2511d
commit c00e288936
4 changed files with 78 additions and 10 deletions

View file

@ -57,4 +57,33 @@ class TestTimeout < Test::Unit::TestCase
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::ExitException, "boon") do
Timeout.timeout(10, Timeout::ExitException) do
raise Timeout::ExitException, "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
end