blob: 030080e3a4a7eb3715ccffc48a651c08607df8fe [file] [log] [blame]
Facundo Batistac12b9882008-02-23 22:54:12 +00001import unittest
2import test.test_support
3
Brett Cannon9d441822008-05-08 19:26:08 +00004mutex = test.test_support.import_module("mutex", deprecated=True)
5
Facundo Batistac12b9882008-02-23 22:54:12 +00006class MutexTest(unittest.TestCase):
7
Facundo Batistac12b9882008-02-23 22:54:12 +00008 def test_lock_and_unlock(self):
Benjamin Petersonc5393c62008-06-03 01:30:37 +00009
10 def called_by_mutex(some_data):
11 self.assertEqual(some_data, "spam")
Benjamin Peterson5c8da862009-06-30 22:57:08 +000012 self.assertTrue(m.test(), "mutex not held")
Benjamin Petersonc5393c62008-06-03 01:30:37 +000013 # Nested locking
14 m.lock(called_by_mutex2, "eggs")
15
16 def called_by_mutex2(some_data):
Serhiy Storchaka88761452012-12-28 00:32:19 +020017 self.assertEqual(some_data, "eggs")
Benjamin Peterson5c8da862009-06-30 22:57:08 +000018 self.assertTrue(m.test(), "mutex not held")
19 self.assertTrue(ready_for_2,
Benjamin Petersonc5393c62008-06-03 01:30:37 +000020 "called_by_mutex2 called too soon")
21
22 m = mutex.mutex()
23 read_for_2 = False
24 m.lock(called_by_mutex, "spam")
25 ready_for_2 = True
Facundo Batistac12b9882008-02-23 22:54:12 +000026 # unlock both locks
Benjamin Petersonc5393c62008-06-03 01:30:37 +000027 m.unlock()
28 m.unlock()
Benjamin Peterson5c8da862009-06-30 22:57:08 +000029 self.assertFalse(m.test(), "mutex still held")
Facundo Batistac12b9882008-02-23 22:54:12 +000030
31def test_main():
32 test.test_support.run_unittest(MutexTest)
33
34if __name__ == "__main__":
35 test_main()