aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken6/tests/shibokenmodule/module_test.py
diff options
context:
space:
mode:
Diffstat (limited to 'sources/shiboken6/tests/shibokenmodule/module_test.py')
-rw-r--r--sources/shiboken6/tests/shibokenmodule/module_test.py112
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()