diff options
author | Kristján Valur Jónsson <kristjan@ccpgames.com> | 2010-11-18 12:46:39 (GMT) |
---|---|---|
committer | Kristján Valur Jónsson <kristjan@ccpgames.com> | 2010-11-18 12:46:39 (GMT) |
commit | 63315209506dafe15cb3e894f33793cbacadca20 (patch) | |
tree | 40673a47438aa4f73259f50d2a9919d429df2ff9 /Lib/test/lock_tests.py | |
parent | bcc481000296a2227600ee59e92f0f78f541a32d (diff) | |
download | cpython-63315209506dafe15cb3e894f33793cbacadca20.zip cpython-63315209506dafe15cb3e894f33793cbacadca20.tar.gz cpython-63315209506dafe15cb3e894f33793cbacadca20.tar.bz2 |
Issue 10260
Adding the wait_for() method to threading.Condition
Diffstat (limited to 'Lib/test/lock_tests.py')
-rw-r--r-- | Lib/test/lock_tests.py | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/Lib/test/lock_tests.py b/Lib/test/lock_tests.py index d956bb6..b6d818e 100644 --- a/Lib/test/lock_tests.py +++ b/Lib/test/lock_tests.py @@ -446,6 +446,46 @@ class ConditionTests(BaseTestCase): # In practice, this implementation has no spurious wakeups. self.assertFalse(result) + def test_waitfor(self): + cond = self.condtype() + state = 0 + def f(): + with cond: + result = cond.wait_for(lambda : state==4) + self.assertTrue(result) + self.assertEqual(state, 4) + b = Bunch(f, 1) + b.wait_for_started() + for i in range(5): + time.sleep(0.01) + with cond: + state += 1 + cond.notify() + b.wait_for_finished() + + def test_waitfor_timeout(self): + cond = self.condtype() + state = 0 + success = [] + def f(): + with cond: + dt = time.time() + result = cond.wait_for(lambda : state==4, timeout=0.1) + dt = time.time() - dt + self.assertFalse(result) + self.assertTimeout(dt, 0.1) + success.append(None) + b = Bunch(f, 1) + b.wait_for_started() + # Only increment 3 times, so state == 4 is never reached. + for i in range(3): + time.sleep(0.01) + with cond: + state += 1 + cond.notify() + b.wait_for_finished() + self.assertEqual(len(success), 1) + class BaseSemaphoreTests(BaseTestCase): """ |