From 952f9f0bda958afa36421c6af828f55f643a3deb Mon Sep 17 00:00:00 2001 From: Hugo Parente Lima Date: Tue, 17 May 2011 16:34:08 -0300 Subject: Fix bug 686 - "Request to make Q[Mutex|Read|Write]Locker context managers" Reviewer: Marcelo Lira Luciano Wolf --- tests/QtCore/CMakeLists.txt | 1 + tests/QtCore/bug_686.py | 85 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 tests/QtCore/bug_686.py (limited to 'tests/QtCore') diff --git a/tests/QtCore/CMakeLists.txt b/tests/QtCore/CMakeLists.txt index 84d0ad017..e49e3909a 100644 --- a/tests/QtCore/CMakeLists.txt +++ b/tests/QtCore/CMakeLists.txt @@ -7,6 +7,7 @@ PYSIDE_TEST(bug_505.py) PYSIDE_TEST(bug_515.py) PYSIDE_TEST(bug_606.py) PYSIDE_TEST(bug_656.py) +PYSIDE_TEST(bug_686.py) PYSIDE_TEST(bug_699.py) PYSIDE_TEST(bug_706.py) PYSIDE_TEST(bug_723.py) diff --git a/tests/QtCore/bug_686.py b/tests/QtCore/bug_686.py new file mode 100644 index 000000000..97ead98f5 --- /dev/null +++ b/tests/QtCore/bug_686.py @@ -0,0 +1,85 @@ +import unittest +from PySide.QtCore import * + +class MyWriteThread(QThread): + def __init__(self, lock): + QThread.__init__(self) + self.lock = lock + self.started = False + self.canQuit = False + + def run(self): + self.started = True + while not self.lock.tryLockForWrite(): + pass + self.canQuit = True + +class MyReadThread(QThread): + def __init__(self, lock): + QThread.__init__(self) + self.lock = lock + self.started = False + self.canQuit = False + + def run(self): + self.started = True + while not self.lock.tryLockForRead(): + pass + self.canQuit = True + +class MyMutexedThread(QThread): + def __init__(self, mutex): + QThread.__init__(self) + self.mutex = mutex + self.started = False + self.canQuit = False + + def run(self): + self.started = True + while not self.mutex.tryLock(): + pass + self.canQuit = True + +class TestQMutex (unittest.TestCase): + + def testReadLocker(self): + lock = QReadWriteLock() + thread = MyWriteThread(lock) + + with QReadLocker(lock): + thread.start() + while not thread.started: + pass + self.assertFalse(thread.canQuit) + + thread.wait() + self.assertTrue(thread.canQuit) + + def testWriteLocker(self): + lock = QReadWriteLock() + thread = MyReadThread(lock) + + with QWriteLocker(lock): + thread.start() + while not thread.started: + pass + self.assertFalse(thread.canQuit) + + thread.wait() + self.assertTrue(thread.canQuit) + + def testMutexLocker(self): + mutex = QMutex() + thread = MyMutexedThread(mutex) + + with QMutexLocker(mutex): + thread.start() + while not thread.started: + pass + self.assertFalse(thread.canQuit) + + thread.wait() + self.assertTrue(thread.canQuit) + +if __name__ == '__main__': + unittest.main() -- cgit v1.2.3