aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdrian Herrmann <adrian.herrmann@qt.io>2023-05-12 17:08:29 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2023-05-15 09:29:46 +0000
commit683c8ed5da398a66a8d193519430b19f64366bfc (patch)
tree8fcd2e2f0d340b0f5c53e1da6df778364a4d2516
parenta09f6aa2a1100401537208aaa3930ce8d18b94ee (diff)
Fix anonymous slot memory leak test
- Remove LeakerExternal test. - Use the right assert. - General simplifications. Task-number: PYSIDE-2299 Change-Id: I0851b2b75ff5658d0ced18b73a4a4b175397cc88 Reviewed-by: Christian Tismer <tismer@stackless.com> (cherry picked from commit f26d222093e55c677a7dda53cdefb16194e7385d) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--sources/pyside6/tests/signals/anonymous_slot_leak_test.py47
1 files changed, 15 insertions, 32 deletions
diff --git a/sources/pyside6/tests/signals/anonymous_slot_leak_test.py b/sources/pyside6/tests/signals/anonymous_slot_leak_test.py
index 3b297111f..560a08659 100644
--- a/sources/pyside6/tests/signals/anonymous_slot_leak_test.py
+++ b/sources/pyside6/tests/signals/anonymous_slot_leak_test.py
@@ -15,55 +15,38 @@ from PySide6.QtWidgets import QWidget
from helper.usesqapplication import UsesQApplication
-try:
- sys.gettotalrefcount
- have_debug = True
-except AttributeError:
- have_debug = False
+have_debug = hasattr(sys, "gettotalrefcount")
-def external_slot():
- pass
+class LeakerLambda():
+ def __init__(self, widget):
+ widget.windowIconChanged.connect(lambda *args: None)
-class Leaker:
- def __init__(self, slot):
- widget = QWidget()
- widget.windowIconChanged.connect(slot)
-
-
-class LeakerLambda(Leaker):
- def __init__(self):
- super().__init__(lambda *args: None)
-
-
-class LeakerFunctoolsPartial(Leaker):
- def __init__(self):
- super().__init__(partial(int, 0))
-
-
-class LeakerExternal(Leaker):
- def __init__(self):
- super().__init__(external_slot)
+class LeakerFunctoolsPartial():
+ def __init__(self, widget):
+ widget.windowIconChanged.connect(partial(int, 0))
class TestBugPYSIDE2299(UsesQApplication):
def leak(self, leaker):
+ widget = QWidget()
+
+ # Warm-up
+ leaker(widget)
+
refs_before = sys.gettotalrefcount()
for _ in range(1000):
- leaker()
+ leaker(widget)
refs_after = sys.gettotalrefcount()
- self.assertNotAlmostEqual(refs_after - refs_before, 0, delta=10)
+
+ self.assertAlmostEqual(refs_after - refs_before, 0, delta=10)
@unittest.skipUnless(have_debug, "You need a debug build")
def test_lambda(self):
self.leak(LeakerLambda)
@unittest.skipUnless(have_debug, "You need a debug build")
- def test_external(self):
- self.leak(LeakerExternal)
-
- @unittest.skipUnless(have_debug, "You need a debug build")
def test_functools_partial(self):
self.leak(LeakerFunctoolsPartial)