From 6988b9cb5d770389123ced8f55cec617b2217ddb Mon Sep 17 00:00:00 2001 From: Marcelo Lira Date: Tue, 13 Jul 2010 11:17:47 -0300 Subject: Fixed wrong overload decisor generated code. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The decisor must check for the number of arguments before calling Converter::isConvertible method, to avoid passing NULL pointers to it. Unit tests were added. Reviewed by Luciano Wolf Reviewed by Renato Araújo --- tests/libsample/samplenamespace.cpp | 20 +++++++++++++++ tests/libsample/samplenamespace.h | 15 +++++++++++ tests/samplebinding/decisor_test.py | 51 +++++++++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 tests/samplebinding/decisor_test.py (limited to 'tests') diff --git a/tests/libsample/samplenamespace.cpp b/tests/libsample/samplenamespace.cpp index 7ad200830..159b19f0b 100644 --- a/tests/libsample/samplenamespace.cpp +++ b/tests/libsample/samplenamespace.cpp @@ -93,5 +93,25 @@ enumItemAsDefaultValueToIntArgument(int value) return value; } +void +forceDecisorSideA(ObjectType* object) +{ +} + +void +forceDecisorSideA(const Point& pt, const Str& text, ObjectType* object) +{ +} + +void +forceDecisorSideB(int a, ObjectType* object) +{ +} + +void +forceDecisorSideB(int a, const Point& pt, const Str& text, ObjectType* object) +{ +} + } // namespace SampleNamespace diff --git a/tests/libsample/samplenamespace.h b/tests/libsample/samplenamespace.h index e43a92f41..0456c56ef 100644 --- a/tests/libsample/samplenamespace.h +++ b/tests/libsample/samplenamespace.h @@ -36,6 +36,10 @@ #define SAMPLENAMESPACE_H #include "libsamplemacros.h" +#include "str.h" +#include "point.h" + +class ObjectType; namespace SampleNamespace { @@ -97,6 +101,17 @@ public: OkThisIsRecursiveEnough* methodReturningTypeFromParentScope() { return 0; } }; +// The combination of the following two overloaded methods could trigger a +// problematic behaviour on the overload decisor, if it isn't working properly. +LIBSAMPLE_API void forceDecisorSideA(ObjectType* object = 0); +LIBSAMPLE_API void forceDecisorSideA(const Point& pt, const Str& text, ObjectType* object = 0); + +// The combination of the following two overloaded methods could trigger a +// problematic behaviour on the overload decisor, if it isn't working properly. +// This is a variation of forceDecisorSideB. +LIBSAMPLE_API void forceDecisorSideB(int a, ObjectType* object = 0); +LIBSAMPLE_API void forceDecisorSideB(int a, const Point& pt, const Str& text, ObjectType* object = 0); + } // namespace SampleNamespace #endif // SAMPLENAMESPACE_H diff --git a/tests/samplebinding/decisor_test.py b/tests/samplebinding/decisor_test.py new file mode 100644 index 000000000..458298c0c --- /dev/null +++ b/tests/samplebinding/decisor_test.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# This file is part of the Shiboken Python Bindings Generator project. +# +# Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +# +# Contact: PySide team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public License +# version 2.1 as published by the Free Software Foundation. Please +# review the following information to ensure the GNU Lesser General +# Public License version 2.1 requirements will be met: +# http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +# # +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA + +'''Test cases for the method overload decisor.''' + +import unittest + +from sample import SampleNamespace, Point + +class DecisorTest(unittest.TestCase): + '''Test cases for the method overload decisor.''' + + def testCallWithInvalidParametersSideA(self): + '''Call a method missing with the last argument missing. + This can trigger the bug #262, which means using an argument + not provided by the user.''' + pt = Point() + self.assertRaises(TypeError, SampleNamespace.forceDecisorSideA, pt) + + def testCallWithInvalidParametersSideB(self): + '''Same as the previous test, but with an integer as first argument, + just to complicate things for the overload method decisor.''' + pt = Point() + self.assertRaises(TypeError, SampleNamespace.forceDecisorSideB, 1, pt) + +if __name__ == '__main__': + unittest.main() + -- cgit v1.2.3