aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken6/tests
diff options
context:
space:
mode:
Diffstat (limited to 'sources/shiboken6/tests')
-rw-r--r--sources/shiboken6/tests/libminimal/listuser.cpp25
-rw-r--r--sources/shiboken6/tests/libminimal/listuser.h8
-rw-r--r--sources/shiboken6/tests/minimalbinding/listuser_test.py37
3 files changed, 68 insertions, 2 deletions
diff --git a/sources/shiboken6/tests/libminimal/listuser.cpp b/sources/shiboken6/tests/libminimal/listuser.cpp
index 6a0230d60..e9f1c4eab 100644
--- a/sources/shiboken6/tests/libminimal/listuser.cpp
+++ b/sources/shiboken6/tests/libminimal/listuser.cpp
@@ -133,3 +133,28 @@ const std::list<int> &ListUser::getConstIntList() const
{
return m_stdIntList;
}
+
+int ListUser::modifyIntListPtr(std::list<int> *list) const
+{
+ const int oldSize = int(list->size());
+ list->push_back(42);
+ return oldSize;
+}
+
+std::list<int> *ListUser::returnIntListByPtr() const
+{
+ return nullptr;
+}
+
+int ListUser::callReturnIntListByPtr() const
+{
+ auto *list = returnIntListByPtr();
+ return list != nullptr ? int(list->size()) : 0;
+}
+
+int ListUser::modifyDoubleListPtr(std::list<double> *list) const
+{
+ const int oldSize = int(list->size());
+ list->push_back(42);
+ return oldSize;
+}
diff --git a/sources/shiboken6/tests/libminimal/listuser.h b/sources/shiboken6/tests/libminimal/listuser.h
index 0eae69ae1..8fd6f7ad1 100644
--- a/sources/shiboken6/tests/libminimal/listuser.h
+++ b/sources/shiboken6/tests/libminimal/listuser.h
@@ -74,6 +74,14 @@ struct LIBMINIMAL_API ListUser
std::list<int> &getIntList();
const std::list<int> &getConstIntList() const;
+ int modifyIntListPtr(std::list<int> *list) const;
+
+ virtual std::list<int> *returnIntListByPtr() const;
+
+ int callReturnIntListByPtr() const;
+
+ int modifyDoubleListPtr(std::list<double> *list) const;
+
std::list<int> m_stdIntList;
};
diff --git a/sources/shiboken6/tests/minimalbinding/listuser_test.py b/sources/shiboken6/tests/minimalbinding/listuser_test.py
index a1fc48c08..a31a5aab2 100644
--- a/sources/shiboken6/tests/minimalbinding/listuser_test.py
+++ b/sources/shiboken6/tests/minimalbinding/listuser_test.py
@@ -44,7 +44,10 @@ from minimal import ListUser, Val, Obj, StdIntList
class ExtListUser(ListUser):
def __init__(self):
- ListUser.__init__(self)
+ super().__init__()
+ self._stdIntList = StdIntList()
+ self._stdIntList.append(1)
+ self._stdIntList.append(2)
def createIntList(self, num):
return list(range(0, num * 2, 2))
@@ -78,6 +81,9 @@ class ExtListUser(ListUser):
def sumListOfIntLists(self, intListList):
return sum([sum(line) for line in intListList]) * 2
+ def returnIntListByPtr(self):
+ return self._stdIntList
+
class IntListConversionTest(unittest.TestCase):
@@ -356,7 +362,34 @@ class ListOfIntListConversionTest(unittest.TestCase):
self.assertEqual(len(const_l), 4)
self.assertRaises(TypeError, const_l.append, 6)
+ def testListByPtrOpaque(self):
+ """Test a function taking C++ list by pointer for which an opaque
+ container exists."""
+ lu = ListUser()
+ python_list = [1, 2]
+ self.assertEqual(lu.modifyIntListPtr(python_list), 2)
+
+ # Pass an opaque container and verify whether it is modified by C++
+ cpp_list = StdIntList()
+ cpp_list.append(1)
+ cpp_list.append(2)
+ self.assertEqual(lu.modifyIntListPtr(cpp_list), 2)
+ self.assertEqual(len(cpp_list), 3)
+
+ def testListByPtr(self):
+ """Test a function taking C++ list by pointer for which no opaque
+ container exists."""
+ lu = ListUser()
+ python_list = [1.1, 22.2]
+ self.assertEqual(lu.modifyDoubleListPtr(python_list), 2)
+
+ def testReturnListByPtr(self):
+ """Test that a virtual function returning a list by pointer can be
+ reimplemented by a Python function returning an opaque container."""
+ lu = ExtListUser()
+ size = lu.callReturnIntListByPtr() # Call virtual from C++
+ self.assertEqual(size, 2)
+
if __name__ == '__main__':
unittest.main()
-