diff options
Diffstat (limited to 'sources/shiboken6/tests/shibokenmodule/module_test.py')
-rw-r--r-- | sources/shiboken6/tests/shibokenmodule/module_test.py | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/sources/shiboken6/tests/shibokenmodule/module_test.py b/sources/shiboken6/tests/shibokenmodule/module_test.py new file mode 100644 index 000000000..9f9f8f5a4 --- /dev/null +++ b/sources/shiboken6/tests/shibokenmodule/module_test.py @@ -0,0 +1,112 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import os +import sys +import unittest + +from pathlib import Path +sys.path.append(os.fspath(Path(__file__).resolve().parents[1])) +from shiboken_paths import init_paths # noqa: E402 +init_paths() + +from shiboken6 import Shiboken # noqa: E402 +from sample import BlackBox, ObjectType, ObjectModel, ObjectView, Point # noqa: E402 + + +class MultipleInherited (ObjectType, Point): + def __init__(self): + ObjectType.__init__(self) + Point.__init__(self) + + +class TestShiboken(unittest.TestCase): + def testIsValid(self): + self.assertTrue(Shiboken.isValid(object())) + self.assertTrue(Shiboken.isValid(None)) + + bb = BlackBox() + item = ObjectType() + ticket = bb.keepObjectType(item) + bb.disposeObjectType(ticket) + self.assertFalse(Shiboken.isValid(item)) + + def testWrapInstance(self): + addr = ObjectType.createObjectType() + obj = Shiboken.wrapInstance(addr, ObjectType) + self.assertFalse(Shiboken.createdByPython(obj)) + obj.setObjectName("obj") + self.assertEqual(obj.objectName(), "obj") + self.assertEqual(addr, obj.identifier()) + self.assertFalse(Shiboken.createdByPython(obj)) + + # avoid mem leak =] + bb = BlackBox() + self.assertTrue(Shiboken.createdByPython(bb)) + bb.disposeObjectType(bb.keepObjectType(obj)) + + def testWrapInstancePreserveId(self): + """PYSIDE-31: Verify that wrapInstance() returns the existing wrapper + even if a base class type is specified.""" + v = ObjectView() # inherits ObjectType + addresses = Shiboken.getCppPointer(v) + self.assertTrue(addresses) + address = addresses[0] + wrapped = Shiboken.wrapInstance(address, ObjectType) + self.assertEqual(id(wrapped), id(v)) + + def testIsOwnedByPython(self): + obj = ObjectType() + self.assertTrue(Shiboken.ownedByPython(obj)) + p = ObjectType() + obj.setParent(p) + self.assertFalse(Shiboken.ownedByPython(obj)) + + def testDump(self): + """Just check if dump doesn't crash on certain use cases""" + p = ObjectType() + obj = ObjectType(p) + obj2 = ObjectType(obj) + obj3 = ObjectType(obj) # noqa: F841 + self.assertEqual(Shiboken.dump(None), "Ordinary Python type.") + Shiboken.dump(obj) + + model = ObjectModel(p) + v = ObjectView(model, p) + Shiboken.dump(v) + + m = MultipleInherited() + Shiboken.dump(m) + self.assertEqual(len(Shiboken.getCppPointer(m)), 2) + + # Don't crash even after deleting an object + Shiboken.invalidate(obj) + Shiboken.dump(obj) # deleted + Shiboken.dump(p) # child deleted + Shiboken.dump(obj2) # parent deleted + + def testDelete(self): + obj = ObjectType() + child = ObjectType(obj) + self.assertTrue(Shiboken.isValid(obj)) + self.assertTrue(Shiboken.isValid(child)) + # Note: this test doesn't assure that the object dtor was really called + Shiboken.delete(obj) + self.assertFalse(Shiboken.isValid(obj)) + self.assertFalse(Shiboken.isValid(child)) + + def testVersionAttr(self): + self.assertEqual(type(Shiboken.__version__), str) + self.assertTrue(len(Shiboken.__version__) >= 5) + self.assertEqual(type(Shiboken.__version_info__), tuple) + self.assertEqual(len(Shiboken.__version_info__), 5) + + def testAllWrappers(self): + obj = ObjectType() + self.assertTrue(obj in Shiboken.getAllValidWrappers()) + Shiboken.delete(obj) + self.assertFalse(obj in Shiboken.getAllValidWrappers()) + + +if __name__ == '__main__': + unittest.main() |