diff options
| author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2025-02-17 11:17:34 +0100 |
|---|---|---|
| committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2025-02-20 09:20:27 +0100 |
| commit | 96e016d95d8e37eb76492ab45dc454767ccb21b6 (patch) | |
| tree | a8bdf4071fc48ec746666aa78a8cb96e9fd5f3c3 /sources/pyside6/tests/signals/disconnect_test.py | |
| parent | dc7165e366692296170fbb367e631b760098bc85 (diff) | |
Fix disconnecting a string-based connection by passing a callable
Amends cab304e70cce68bbdaa70d7f7b2bf6e95e85e6d2.
Restructure the test.
Pick-to: 6.8
Fixes: PYSIDE-3020
Task-number: PYSIDE-1057
Change-Id: I8954a534648ded5d476fec608d0699132a026461
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Diffstat (limited to 'sources/pyside6/tests/signals/disconnect_test.py')
| -rw-r--r-- | sources/pyside6/tests/signals/disconnect_test.py | 68 |
1 files changed, 60 insertions, 8 deletions
diff --git a/sources/pyside6/tests/signals/disconnect_test.py b/sources/pyside6/tests/signals/disconnect_test.py index 61ce4d5b8..ee0195777 100644 --- a/sources/pyside6/tests/signals/disconnect_test.py +++ b/sources/pyside6/tests/signals/disconnect_test.py @@ -11,14 +11,24 @@ sys.path.append(os.fspath(Path(__file__).resolve().parents[1])) from init_paths import init_test_paths init_test_paths(True) -from PySide6.QtCore import QObject, Signal +from PySide6.QtCore import QObject, Signal, Slot, SIGNAL, SLOT from testbinding import TestObject -class Foo(QObject): +class Sender(QObject): bar = Signal() +class Receiver(QObject): + def __init__(self, parent=None): + super().__init__(parent) + self.called = 0 + + @Slot() + def receiver(self): + self.called += 1 + + class TestDisconnect(unittest.TestCase): def theSlot1(self): self.called1 = True @@ -29,20 +39,62 @@ class TestDisconnect(unittest.TestCase): def testIt(self): self.called1 = False self.called2 = False - f = Foo() - f.bar.connect(self.theSlot1) - f.bar.connect(self.theSlot2) - f.bar.emit() + s = Sender() + s.bar.connect(self.theSlot1) + s.bar.connect(self.theSlot2) + s.bar.emit() self.assertTrue(self.called1) self.assertTrue(self.called2) self.called1 = False self.called2 = False - f.bar.disconnect() - f.bar.emit() + self.assertTrue(s.bar.disconnect()) # Disconnect sender + s.bar.emit() self.assertFalse(self.called1) self.assertFalse(self.called2) + def testCallable(self): + s = Sender() + r = Receiver() + s.bar.connect(r.receiver) + s.bar.emit() + self.assertEqual(r.called, 1) + self.assertTrue(s.bar.disconnect(r.receiver)) + s.bar.emit() + self.assertEqual(r.called, 1) + + def testStringBased(self): + s = Sender() + r = Receiver() + QObject.connect(s, SIGNAL("bar()"), r, SLOT("receiver()")) + s.bar.emit() + self.assertEqual(r.called, 1) + self.assertTrue(QObject.disconnect(s, SIGNAL("bar()"), r, SLOT("receiver()"))) + s.bar.emit() + self.assertEqual(r.called, 1) + + def testMixStringBasedCallable(self): + """PYSIDE-3020, Disconnect a string-based connection by passing a callable.""" + s = Sender() + r = Receiver() + QObject.connect(s, SIGNAL("bar()"), r, SLOT("receiver()")) + s.bar.emit() + self.assertEqual(r.called, 1) + self.assertTrue(s.bar.disconnect(r.receiver)) + s.bar.emit() + self.assertEqual(r.called, 1) + + def testMixCallableStringBased(self): + """PYSIDE-3020, test vice versa.""" + s = Sender() + r = Receiver() + s.bar.connect(r.receiver) + s.bar.emit() + self.assertEqual(r.called, 1) + self.assertTrue(QObject.disconnect(s, SIGNAL("bar()"), r, SLOT("receiver()"))) + s.bar.emit() + self.assertEqual(r.called, 1) + def testDuringCallback(self): """ Test to see if the C++ object for a connection is accessed after the method returns. This causes a segfault if the memory that was used by the |
