diff options
| author | shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-03-16 11:31:00 +0000 |
|---|---|---|
| committer | shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-03-16 11:31:00 +0000 |
| commit | d0244d23268fa6a9959da1c153a78dc719f204fe (patch) | |
| tree | 007952b0ff9087e06bff025d51773a427adc634e /test/thread/test_thread.rb | |
| parent | 62cba2e11cfc2cdeb5ea6766f1cd69c38ea02164 (diff) | |
| download | ruby-d0244d23268fa6a9959da1c153a78dc719f204fe.tar.gz ruby-d0244d23268fa6a9959da1c153a78dc719f204fe.tar.xz ruby-d0244d23268fa6a9959da1c153a78dc719f204fe.zip | |
* merge -r 12066:12069
git-svn-id: http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_8_6@12077 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/thread/test_thread.rb')
| -rw-r--r-- | test/thread/test_thread.rb | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/test/thread/test_thread.rb b/test/thread/test_thread.rb new file mode 100644 index 000000000..abdcebffc --- /dev/null +++ b/test/thread/test_thread.rb @@ -0,0 +1,67 @@ +require 'thread' +require 'test/unit' + +class TC_Thread < Test::Unit::TestCase + def setup + Thread.abort_on_exception = true + end + def teardown + Thread.abort_on_exception = false + end + def test_condvar + mutex = Mutex.new + condvar = ConditionVariable.new + result = [] + mutex.synchronize do + t = Thread.new do + mutex.synchronize do + result << 1 + condvar.signal + end + end + + result << 0 + condvar.wait(mutex) + result << 2 + t.join + end + assert_equal([0, 1, 2], result) + end + + def test_condvar_wait_not_owner + mutex = Mutex.new + condvar = ConditionVariable.new + + assert_raises(ThreadError) { condvar.wait(mutex) } + end + + def test_condvar_wait_exception_handling + # Calling wait in the only thread running should raise a ThreadError of + # 'stopping only thread' + mutex = Mutex.new + condvar = ConditionVariable.new + + Thread.abort_on_exception = false + + locked = false + thread = Thread.new do + mutex.synchronize do + begin + condvar.wait(mutex) + rescue Exception + locked = mutex.locked? + raise + end + end + end + + while !thread.stop? + sleep(0.1) + end + + thread.raise Interrupt, "interrupt a dead condition variable" + assert_raises(Interrupt) { thread.value } + assert(locked) + end +end + |
