summaryrefslogtreecommitdiffstats
path: root/Lib/test/lock_tests.py
diff options
context:
space:
mode:
authorKristján Valur Jónsson <kristjan@ccpgames.com>2010-11-18 12:46:39 (GMT)
committerKristján Valur Jónsson <kristjan@ccpgames.com>2010-11-18 12:46:39 (GMT)
commit63315209506dafe15cb3e894f33793cbacadca20 (patch)
tree40673a47438aa4f73259f50d2a9919d429df2ff9 /Lib/test/lock_tests.py
parentbcc481000296a2227600ee59e92f0f78f541a32d (diff)
downloadcpython-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.py40
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):
"""