aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken6/tests/samplebinding/static_nonstatic_methods_test.py
diff options
context:
space:
mode:
Diffstat (limited to 'sources/shiboken6/tests/samplebinding/static_nonstatic_methods_test.py')
-rw-r--r--sources/shiboken6/tests/samplebinding/static_nonstatic_methods_test.py91
1 files changed, 91 insertions, 0 deletions
diff --git a/sources/shiboken6/tests/samplebinding/static_nonstatic_methods_test.py b/sources/shiboken6/tests/samplebinding/static_nonstatic_methods_test.py
new file mode 100644
index 000000000..cf0889299
--- /dev/null
+++ b/sources/shiboken6/tests/samplebinding/static_nonstatic_methods_test.py
@@ -0,0 +1,91 @@
+#!/usr/bin/env python
+# 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 overloads involving static and non-static versions of a method.'''
+
+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
+init_paths()
+
+from sample import SimpleFile
+
+
+class SimpleFile2 (SimpleFile):
+ def exists(self):
+ return "Mooo"
+
+
+class SimpleFile3 (SimpleFile):
+ pass
+
+
+class SimpleFile4 (SimpleFile):
+ exists = 5
+
+
+class StaticNonStaticMethodsTest(unittest.TestCase):
+ '''Test cases for overloads involving static and non-static versions of a method.'''
+
+ def setUp(self):
+ filename = f'simplefile{os.getpid()}.txt'
+ self.existing_filename = Path(filename)
+ self.delete_file = False
+ if not self.existing_filename.exists():
+ with self.existing_filename.open('w') as f:
+ for line in range(10):
+ f.write('sbrubbles\n')
+ self.delete_file = True
+
+ self.non_existing_filename = Path('inexistingfile.txt')
+ i = 0
+ while self.non_existing_filename.exists():
+ i += 1
+ filename = 'inexistingfile-{i}.txt'
+ self.non_existing_filename = Path(filename)
+
+ def tearDown(self):
+ if self.delete_file:
+ os.remove(self.existing_filename)
+
+ def testCallingStaticMethodWithClass(self):
+ '''Call static method using class.'''
+ self.assertTrue(SimpleFile.exists(os.fspath(self.existing_filename)))
+ self.assertFalse(SimpleFile.exists(os.fspath(self.non_existing_filename)))
+
+ def testCallingStaticMethodWithInstance(self):
+ '''Call static method using instance of class.'''
+ f = SimpleFile(os.fspath(self.non_existing_filename))
+ self.assertTrue(f.exists(os.fspath(self.existing_filename)))
+ self.assertFalse(f.exists(os.fspath(self.non_existing_filename)))
+
+ def testCallingInstanceMethod(self):
+ '''Call instance method.'''
+ f1 = SimpleFile(os.fspath(self.non_existing_filename))
+ self.assertFalse(f1.exists())
+ f2 = SimpleFile(os.fspath(self.existing_filename))
+ self.assertTrue(f2.exists())
+
+ def testOverridingStaticNonStaticMethod(self):
+ f = SimpleFile2(os.fspath(self.existing_filename))
+ self.assertEqual(f.exists(), "Mooo")
+
+ f = SimpleFile3(os.fspath(self.existing_filename))
+ self.assertTrue(f.exists())
+
+ f = SimpleFile4(os.fspath(self.existing_filename))
+ self.assertEqual(f.exists, 5)
+
+ def testDuckPunchingStaticNonStaticMethod(self):
+ f = SimpleFile(os.fspath(self.existing_filename))
+ f.exists = lambda: "Meee"
+ self.assertEqual(f.exists(), "Meee")
+
+
+if __name__ == '__main__':
+ unittest.main()