aboutsummaryrefslogtreecommitdiffstats
path: root/sources/pyside6/tests/signals/disconnect_test.py
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2025-02-17 11:17:34 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2025-02-20 09:20:27 +0100
commit96e016d95d8e37eb76492ab45dc454767ccb21b6 (patch)
treea8bdf4071fc48ec746666aa78a8cb96e9fd5f3c3 /sources/pyside6/tests/signals/disconnect_test.py
parentdc7165e366692296170fbb367e631b760098bc85 (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.py68
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