diff options
Diffstat (limited to 'sources/pyside6/tests/QtWidgets/qlayout_ref_test.py')
-rw-r--r-- | sources/pyside6/tests/QtWidgets/qlayout_ref_test.py | 83 |
1 files changed, 33 insertions, 50 deletions
diff --git a/sources/pyside6/tests/QtWidgets/qlayout_ref_test.py b/sources/pyside6/tests/QtWidgets/qlayout_ref_test.py index 255119562..df9bd7f90 100644 --- a/sources/pyside6/tests/QtWidgets/qlayout_ref_test.py +++ b/sources/pyside6/tests/QtWidgets/qlayout_ref_test.py @@ -1,36 +1,11 @@ -############################################################################# -## -## Copyright (C) 2016 The Qt Company Ltd. -## Contact: https://www.qt.io/licensing/ -## -## This file is part of the test suite of Qt for Python. -## -## $QT_BEGIN_LICENSE:GPL-EXCEPT$ -## Commercial License Usage -## Licensees holding valid commercial Qt licenses may use this file in -## accordance with the commercial license agreement provided with the -## Software or, alternatively, in accordance with the terms contained in -## a written agreement between you and The Qt Company. For licensing terms -## and conditions see https://www.qt.io/terms-conditions. For further -## information use the contact form at https://www.qt.io/contact-us. -## -## GNU General Public License Usage -## Alternatively, this file may be used under the terms of the GNU -## General Public License version 3 as published by the Free Software -## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -## included in the packaging of this file. Please review the following -## information to ensure the GNU General Public License requirements will -## be met: https://www.gnu.org/licenses/gpl-3.0.html. -## -## $QT_END_LICENSE$ -## -############################################################################# +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 '''Test cases for QLayout handling of child widgets references''' +import gc import os import sys -from sys import getrefcount import unittest from pathlib import Path @@ -62,30 +37,34 @@ class SaveReference(UsesQApplication): # Release resources del self.widget2 del self.widget1 + # PYSIDE-535: Need to collect garbage in PyPy to trigger deletion + gc.collect() super(SaveReference, self).tearDown() + @unittest.skipUnless(hasattr(sys, "getrefcount"), f"{sys.implementation.name} has no refcount") def checkLayoutReference(self, layout): # Checks the reference cound handling of layout.addWidget - self.assertEqual(getrefcount(self.widget1), 2) + self.assertEqual(sys.getrefcount(self.widget1), 2) layout.addWidget(self.widget1) - self.assertEqual(getrefcount(self.widget1), 3) + self.assertEqual(sys.getrefcount(self.widget1), 3) - self.assertEqual(getrefcount(self.widget2), 2) + self.assertEqual(sys.getrefcount(self.widget2), 2) layout.addWidget(self.widget2) - self.assertEqual(getrefcount(self.widget2), 3) + self.assertEqual(sys.getrefcount(self.widget2), 3) # Check if doesn't mess around with previous widget refcount - self.assertEqual(getrefcount(self.widget1), 3) + self.assertEqual(sys.getrefcount(self.widget1), 3) + @unittest.skipUnless(hasattr(sys, "getrefcount"), f"{sys.implementation.name} has no refcount") def testMoveLayout(self): l = QHBoxLayout() - self.assertEqual(getrefcount(self.widget1), 2) + self.assertEqual(sys.getrefcount(self.widget1), 2) l.addWidget(self.widget1) - self.assertEqual(getrefcount(self.widget1), 3) + self.assertEqual(sys.getrefcount(self.widget1), 3) w = QWidget() w.setLayout(l) - self.assertEqual(getrefcount(self.widget1), 3) + self.assertEqual(sys.getrefcount(self.widget1), 3) def testHBoxReference(self): # QHBoxLayout.addWidget reference count @@ -131,20 +110,24 @@ class MultipleAdd(UsesQApplication): del self.widget del self.layout del self.win + # PYSIDE-535: Need to collect garbage in PyPy to trigger deletion + gc.collect() super(MultipleAdd, self).tearDown() + @unittest.skipUnless(hasattr(sys, "getrefcount"), f"{sys.implementation.name} has no refcount") def testRefCount(self): # Multiple QLayout.addWidget calls on the same widget - self.assertEqual(getrefcount(self.widget), 2) + self.assertEqual(sys.getrefcount(self.widget), 2) self.layout.addWidget(self.widget) - self.assertEqual(getrefcount(self.widget), 3) + self.assertEqual(sys.getrefcount(self.widget), 3) self.layout.addWidget(self.widget) - self.assertEqual(getrefcount(self.widget), 3) + self.assertEqual(sys.getrefcount(self.widget), 3) self.layout.addWidget(self.widget) - self.assertEqual(getrefcount(self.widget), 3) + self.assertEqual(sys.getrefcount(self.widget), 3) class InternalAdd(UsesQApplication): + @unittest.skipUnless(hasattr(sys, "getrefcount"), f"{sys.implementation.name} has no refcount") def testInternalRef(self): mw = QWidget() w = QWidget() @@ -153,35 +136,35 @@ class InternalAdd(UsesQApplication): topLayout = QGridLayout() # unique reference - self.assertEqual(getrefcount(w), 2) - self.assertEqual(getrefcount(ow), 2) + self.assertEqual(sys.getrefcount(w), 2) + self.assertEqual(sys.getrefcount(ow), 2) topLayout.addWidget(w, 0, 0) topLayout.addWidget(ow, 1, 0) # layout keep the referemce - self.assertEqual(getrefcount(w), 3) - self.assertEqual(getrefcount(ow), 3) + self.assertEqual(sys.getrefcount(w), 3) + self.assertEqual(sys.getrefcount(ow), 3) mainLayout = QGridLayout() mainLayout.addLayout(topLayout, 1, 0, 1, 4) # the same reference - self.assertEqual(getrefcount(w), 3) - self.assertEqual(getrefcount(ow), 3) + self.assertEqual(sys.getrefcount(w), 3) + self.assertEqual(sys.getrefcount(ow), 3) mw.setLayout(mainLayout) # now trasfer the ownership to mw - self.assertEqual(getrefcount(w), 3) - self.assertEqual(getrefcount(ow), 3) + self.assertEqual(sys.getrefcount(w), 3) + self.assertEqual(sys.getrefcount(ow), 3) del mw # remove the ref and invalidate the widget - self.assertEqual(getrefcount(w), 2) - self.assertEqual(getrefcount(ow), 2) + self.assertEqual(sys.getrefcount(w), 2) + self.assertEqual(sys.getrefcount(ow), 2) if __name__ == '__main__': |