From 9c6b541ceef3039e9e19a1d9a12223851a849cf6 Mon Sep 17 00:00:00 2001 From: Marcelo Lira Date: Wed, 10 Aug 2011 00:59:19 -0300 Subject: Improved the generation of argument conversion in modified functions. Added the SBK_UNUSED macro to libshiboken to prevent compilation warnings. An unit test was added. Reviewed by Hugo Parente Reviewed by Luciano Wolf --- tests/libsample/modifications.cpp | 20 ++++++++++++++++++++ tests/libsample/modifications.h | 14 +++++++++++--- tests/samplebinding/modifications_test.py | 6 ++++++ tests/samplebinding/typesystem_sample.xml | 15 ++++++++++++++- 4 files changed, 51 insertions(+), 4 deletions(-) (limited to 'tests') diff --git a/tests/libsample/modifications.cpp b/tests/libsample/modifications.cpp index 739ca5c74..d809e823e 100644 --- a/tests/libsample/modifications.cpp +++ b/tests/libsample/modifications.cpp @@ -22,9 +22,21 @@ #include #include "modifications.h" +#include "objecttype.h" using namespace std; +Modifications::Modifications() +{ + m_object = new ObjectType(); + m_object->setObjectName("MyObject"); +} + +Modifications::~Modifications() +{ + delete m_object; +} + std::pair Modifications::pointToPair(Point pt, bool* ok) { @@ -109,3 +121,11 @@ Modifications::sumPointCoordinates(const Point* point) { return point->x() + point->y(); } + +bool +Modifications::nonConversionRuleForArgumentWithDefaultValue(ObjectType** object) +{ + if (object) + *object = m_object; + return true; +} diff --git a/tests/libsample/modifications.h b/tests/libsample/modifications.h index c7a7748c6..2acffa406 100644 --- a/tests/libsample/modifications.h +++ b/tests/libsample/modifications.h @@ -27,11 +27,13 @@ #include #include "point.h" +class ObjectType; + class LIBSAMPLE_API Modifications { public: - Modifications() {} - virtual ~Modifications() {} + Modifications(); + virtual ~Modifications(); enum OverloadedModFunc { OverloadedNone, @@ -102,6 +104,13 @@ public: // Mark the argument with a tag; // the test implementation must expect point never to be null. int sumPointCoordinates(const Point* point); + + // Sets an ObjectType in the argument and returns true. + bool nonConversionRuleForArgumentWithDefaultValue(ObjectType** object = 0); + ObjectType* getObject() const { return m_object; } + +private: + ObjectType* m_object; }; class LIBSAMPLE_API AbstractModifications : public Modifications @@ -117,4 +126,3 @@ public: }; #endif // MODIFICATIONS_H - diff --git a/tests/samplebinding/modifications_test.py b/tests/samplebinding/modifications_test.py index 344801015..3cb502ce6 100644 --- a/tests/samplebinding/modifications_test.py +++ b/tests/samplebinding/modifications_test.py @@ -148,5 +148,11 @@ class ModificationsTest(unittest.TestCase): self.assertEqual(self.mods.sumPointCoordinates(point), 12 + 34) self.assertRaises(TypeError, self.mods.sumPointCoordinates, None) + def testNonConversionRuleForArgumentWithDefaultValue(self): + status, obj = self.mods.nonConversionRuleForArgumentWithDefaultValue() + self.assert_(status) + self.assertEqual(obj, self.mods.getObject()) + self.assertEqual(obj.objectName(), 'MyObject') + if __name__ == '__main__': unittest.main() diff --git a/tests/samplebinding/typesystem_sample.xml b/tests/samplebinding/typesystem_sample.xml index dc4faf352..4f1d5481b 100644 --- a/tests/samplebinding/typesystem_sample.xml +++ b/tests/samplebinding/typesystem_sample.xml @@ -728,6 +728,19 @@ + + + + + + + + + ObjectType* tmpObject = 0; + %RETURN_TYPE %0 = %CPPSELF.%FUNCTION_NAME(&tmpObject); + %PYARG_0 = Shiboken::makeTuple(%0, tmpObject); + + @@ -1761,4 +1774,4 @@ - \ No newline at end of file + -- cgit v1.2.3