mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	 ba57274860
			
		
	
	
		ba57274860
		
	
	
	
	
		
			
			* lib/timeout.rb (Timeout#timeout): skip rescue clause only when no exception class is given. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42710 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			60 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| 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.1) { q.pop }
 | |
|     }
 | |
|   end
 | |
| 
 | |
|   def test_timeout
 | |
|     @flag = true
 | |
|     Thread.start {
 | |
|       sleep 0.1
 | |
|       @flag = false
 | |
|     }
 | |
|     assert_nothing_raised("[ruby-dev:38319]") do
 | |
|       Timeout.timeout(1) {
 | |
|         nil while @flag
 | |
|       }
 | |
|     end
 | |
|     assert !@flag, "[ruby-dev:38319]"
 | |
|   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.1 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.1, exc do
 | |
|         begin
 | |
|           sleep 3
 | |
|         rescue exc => e
 | |
|         end
 | |
|       end
 | |
|     end
 | |
|     assert_raise_with_message(exc, /execution expired/) {raise e if e}
 | |
|   end
 | |
| end
 |