diff options
author | Adrian Herrmann <adrian.herrmann@qt.io> | 2023-05-12 17:08:29 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2023-05-15 09:29:46 +0000 |
commit | 683c8ed5da398a66a8d193519430b19f64366bfc (patch) | |
tree | 8fcd2e2f0d340b0f5c53e1da6df778364a4d2516 | |
parent | a09f6aa2a1100401537208aaa3930ce8d18b94ee (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.py | 47 |
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) |