From 973a5389ac0f2a5d899025843b9af9e587eff7d3 Mon Sep 17 00:00:00 2001 From: Marcelo Lira Date: Mon, 16 May 2011 12:57:58 -0300 Subject: Added a new test binding called 'minimal'. The purpose is to have the smallest possible binding to help when doing complex changes that require a good deal of debugging and tracking, and the many operations performed in too many wrapped classes will clutter any output used for those purposes. In other words: don't add anything here except with a good reason for it, prefer to use 'sample' or 'other' binding for that. Reviewed by Hugo Parente Reviewed by Luciano Wolf --- tests/CMakeLists.txt | 14 ++++--- tests/libminimal/CMakeLists.txt | 11 +++++ tests/libminimal/libminimalmacros.h | 40 ++++++++++++++++++ tests/libminimal/obj.cpp | 38 +++++++++++++++++ tests/libminimal/obj.h | 46 ++++++++++++++++++++ tests/libminimal/val.h | 39 +++++++++++++++++ tests/minimalbinding/CMakeLists.txt | 38 +++++++++++++++++ tests/minimalbinding/global.h | 2 + tests/minimalbinding/minimal-binding.txt.in | 15 +++++++ tests/minimalbinding/obj_test.py | 65 +++++++++++++++++++++++++++++ tests/minimalbinding/typesystem_minimal.xml | 8 ++++ tests/minimalbinding/val_test.py | 39 +++++++++++++++++ 12 files changed, 350 insertions(+), 5 deletions(-) create mode 100644 tests/libminimal/CMakeLists.txt create mode 100644 tests/libminimal/libminimalmacros.h create mode 100644 tests/libminimal/obj.cpp create mode 100644 tests/libminimal/obj.h create mode 100644 tests/libminimal/val.h create mode 100644 tests/minimalbinding/CMakeLists.txt create mode 100644 tests/minimalbinding/global.h create mode 100644 tests/minimalbinding/minimal-binding.txt.in create mode 100644 tests/minimalbinding/obj_test.py create mode 100644 tests/minimalbinding/typesystem_minimal.xml create mode 100644 tests/minimalbinding/val_test.py diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index b9d60262f..b6053b530 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,3 +1,4 @@ +add_subdirectory(libminimal) add_subdirectory(libsample) add_subdirectory(libother) @@ -9,10 +10,13 @@ else() set(GENERATOR_EXTRA_FLAGS ) endif() +add_subdirectory(minimalbinding) add_subdirectory(samplebinding) add_subdirectory(otherbinding) -file(GLOB TEST_FILES samplebinding/*_test.py otherbinding/*_test.py) +file(GLOB TEST_FILES minimalbinding/*_test.py + samplebinding/*_test.py + otherbinding/*_test.py) set(test_blacklist "") @@ -25,16 +29,16 @@ if(CMAKE_VERSION VERSION_LESS 2.8) message("CMake version greater than 2.8 necessary to run tests") else() if(WIN32) - set(TEST_PYTHONPATH "${sample_BINARY_DIR};${other_BINARY_DIR}") - set(TEST_LIBRARY_PATH "$ENV{PATH};${libsample_BINARY_DIR};${libother_BINARY_DIR};${libshiboken_BINARY_DIR}") + set(TEST_PYTHONPATH "${minimal_BINARY_DIR};${sample_BINARY_DIR};${other_BINARY_DIR}") + set(TEST_LIBRARY_PATH "$ENV{PATH};${libminimal_BINARY_DIR};${libsample_BINARY_DIR};${libother_BINARY_DIR};${libshiboken_BINARY_DIR}") set(LIBRARY_PATH_VAR "PATH") string(REPLACE "\\" "/" TEST_PYTHONPATH "${TEST_PYTHONPATH}") string(REPLACE "\\" "/" TEST_LIBRARY_PATH "${TEST_LIBRARY_PATH}") string(REPLACE ";" "\\;" TEST_PYTHONPATH "${TEST_PYTHONPATH}") string(REPLACE ";" "\\;" TEST_LIBRARY_PATH "${TEST_LIBRARY_PATH}") else() - set(TEST_PYTHONPATH "${sample_BINARY_DIR}:${other_BINARY_DIR}") - set(TEST_LIBRARY_PATH "$ENV{LD_LIBRARY_PATH}:${libsample_BINARY_DIR}:${libother_BINARY_DIR}:${libshiboken_BINARY_DIR}") + set(TEST_PYTHONPATH "${minimal_BINARY_DIR}:${sample_BINARY_DIR}:${other_BINARY_DIR}") + set(TEST_LIBRARY_PATH "$ENV{LD_LIBRARY_PATH}:${libminimal_BINARY_DIR}:${libsample_BINARY_DIR}:${libother_BINARY_DIR}:${libshiboken_BINARY_DIR}") set(LIBRARY_PATH_VAR "LD_LIBRARY_PATH") endif() diff --git a/tests/libminimal/CMakeLists.txt b/tests/libminimal/CMakeLists.txt new file mode 100644 index 000000000..7fa87dc39 --- /dev/null +++ b/tests/libminimal/CMakeLists.txt @@ -0,0 +1,11 @@ +project(libminimal) + +set(libminimal_SRC +obj.cpp +) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}) +add_definitions("-DLIBMINIMAL_BUILD") +add_library(libminimal SHARED ${libminimal_SRC}) +set_property(TARGET libminimal PROPERTY PREFIX "") + diff --git a/tests/libminimal/libminimalmacros.h b/tests/libminimal/libminimalmacros.h new file mode 100644 index 000000000..7996035ec --- /dev/null +++ b/tests/libminimal/libminimalmacros.h @@ -0,0 +1,40 @@ +/* +* This file is part of the Shiboken Python Bindings Generator project. +* +* Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +* +* Contact: PySide team +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; either +* version 2.1 of the License, or (at your option) any later version. +* +* This library 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 library; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef LIBMINIMALMACROS_H +#define LIBMINIMALMACROS_H + +#if defined _WIN32 || defined __CYGWIN__ + #if LIBMINIMAL_BUILD + #define LIBMINIMAL_API __declspec(dllexport) + #else + #define LIBMINIMAL_API __declspec(dllimport) + #endif +#else +#if __GNUC__ >= 4 + #define LIBMINIMAL_API __attribute__ ((visibility("default"))) +#else + #define LIBMINIMAL_API +#endif +#endif + +#endif diff --git a/tests/libminimal/obj.cpp b/tests/libminimal/obj.cpp new file mode 100644 index 000000000..cb115b72f --- /dev/null +++ b/tests/libminimal/obj.cpp @@ -0,0 +1,38 @@ +/* + * This file is part of the Shiboken Python Binding Generator project. + * + * Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). + * + * Contact: PySide team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "obj.h" + +Obj::Obj(int objId) : m_objId(objId) +{ +} + +Obj::~Obj() +{ +} + +bool +Obj::virtualMethod(int val) +{ + return !bool(val%2); +} + diff --git a/tests/libminimal/obj.h b/tests/libminimal/obj.h new file mode 100644 index 000000000..384d8e74b --- /dev/null +++ b/tests/libminimal/obj.h @@ -0,0 +1,46 @@ +/* + * This file is part of the Shiboken Python Binding Generator project. + * + * Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). + * + * Contact: PySide team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef OBJ_H +#define OBJ_H + +#include "libminimalmacros.h" + +class LIBMINIMAL_API Obj +{ +public: + explicit Obj(int objId); + virtual ~Obj(); + + int objId() { return m_objId; } + void setObjId(int objId) { m_objId = objId; } + + virtual bool virtualMethod(int val); + bool callVirtualMethod(int val) { return virtualMethod(val); } +private: + Obj(const Obj&); + Obj& operator=(const Obj&); + int m_objId; +}; + +#endif // OBJ_H + diff --git a/tests/libminimal/val.h b/tests/libminimal/val.h new file mode 100644 index 000000000..3cdf64c4b --- /dev/null +++ b/tests/libminimal/val.h @@ -0,0 +1,39 @@ +/* + * This file is part of the Shiboken Python Binding Generator project. + * + * Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). + * + * Contact: PySide team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef VAL_H +#define VAL_H + +#include "libminimalmacros.h" + +class LIBMINIMAL_API Val +{ +public: + explicit Val(int valId) : m_valId(valId) {} + int valId() { return m_valId; } + void setValId(int valId) { m_valId = valId; } +private: + int m_valId; +}; + +#endif // VAL_H + diff --git a/tests/minimalbinding/CMakeLists.txt b/tests/minimalbinding/CMakeLists.txt new file mode 100644 index 000000000..2a78ae7a3 --- /dev/null +++ b/tests/minimalbinding/CMakeLists.txt @@ -0,0 +1,38 @@ +project(minimal) + +set(minimal_TYPESYSTEM +${CMAKE_CURRENT_SOURCE_DIR}/typesystem_minimal.xml +) + +set(minimal_SRC +${CMAKE_CURRENT_BINARY_DIR}/minimal/minimal_module_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/minimal/obj_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/minimal/val_wrapper.cpp +) + +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/minimal-binding.txt.in" + "${CMAKE_CURRENT_BINARY_DIR}/minimal-binding.txt" @ONLY) + +add_custom_command(OUTPUT ${minimal_SRC} +COMMAND ${GENERATORRUNNER_BINARY} --project-file=${CMAKE_CURRENT_BINARY_DIR}/minimal-binding.txt ${GENERATOR_EXTRA_FLAGS} +WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +COMMENT "Running generator for 'minimal' test binding..." +) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_SOURCE_DIR} + ${SBK_PYTHON_INCLUDE_DIR} + ${libminimal_SOURCE_DIR} + ${libshiboken_SOURCE_DIR}) +add_library(minimal MODULE ${minimal_SRC}) +set_property(TARGET minimal PROPERTY PREFIX "") +if(WIN32) + set_property(TARGET minimal PROPERTY SUFFIX ".pyd") +endif() +target_link_libraries(minimal + libminimal + ${SBK_PYTHON_LIBRARIES} + libshiboken) + +add_dependencies(minimal shiboken_generator) + diff --git a/tests/minimalbinding/global.h b/tests/minimalbinding/global.h new file mode 100644 index 000000000..112023202 --- /dev/null +++ b/tests/minimalbinding/global.h @@ -0,0 +1,2 @@ +#include "obj.h" +#include "val.h" diff --git a/tests/minimalbinding/minimal-binding.txt.in b/tests/minimalbinding/minimal-binding.txt.in new file mode 100644 index 000000000..b6bcf05b8 --- /dev/null +++ b/tests/minimalbinding/minimal-binding.txt.in @@ -0,0 +1,15 @@ +[generator-project] + +generator-set = @generators_BINARY_DIR@/shiboken_generator@CMAKE_RELEASE_POSTFIX@@CMAKE_DEBUG_POSTFIX@@CMAKE_SHARED_LIBRARY_SUFFIX@ + +header-file = @CMAKE_CURRENT_SOURCE_DIR@/global.h +typesystem-file = @minimal_TYPESYSTEM@ + +output-directory = @CMAKE_CURRENT_BINARY_DIR@ + +include-path = @libminimal_SOURCE_DIR@ + +typesystem-path = @CMAKE_CURRENT_SOURCE_DIR@ + +enable-parent-ctor-heuristic +use-isnull-as-nb_nonzero diff --git a/tests/minimalbinding/obj_test.py b/tests/minimalbinding/obj_test.py new file mode 100644 index 000000000..20b12aa03 --- /dev/null +++ b/tests/minimalbinding/obj_test.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# This file is part of the Shiboken Python Bindings Generator project. +# +# Copyright (C) 2011 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 + +import unittest +from minimal import Obj + +class ExtObj(Obj): + def __init__(self, objId): + Obj.__init__(self, objId) + self.virtual_method_called = False + + def virtualMethod(self, val): + self.virtual_method_called = True + return not Obj.virtualMethod(self, val) + + +class ObjTest(unittest.TestCase): + + def testNormalMethod(self): + objId = 123 + obj = Obj(objId) + self.assertEqual(obj.objId(), objId) + + def testVirtualMethod(self): + obj = Obj(0) + even_number = 8 + self.assertEqual(obj.virtualMethod(even_number), obj.callVirtualMethod(even_number)) + + def testNormalMethodFromExtendedClass(self): + objId = 123 + obj = ExtObj(objId) + self.assertEqual(obj.objId(), objId) + + def testVirtualMethodFromExtendedClass(self): + obj = ExtObj(0) + even_number = 8 + self.assertEqual(obj.virtualMethod(even_number), obj.callVirtualMethod(even_number)) + self.assert_(obj.virtual_method_called) + +if __name__ == '__main__': + unittest.main() + diff --git a/tests/minimalbinding/typesystem_minimal.xml b/tests/minimalbinding/typesystem_minimal.xml new file mode 100644 index 000000000..da9d9b12a --- /dev/null +++ b/tests/minimalbinding/typesystem_minimal.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/tests/minimalbinding/val_test.py b/tests/minimalbinding/val_test.py new file mode 100644 index 000000000..71d658f8f --- /dev/null +++ b/tests/minimalbinding/val_test.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# This file is part of the Shiboken Python Bindings Generator project. +# +# Copyright (C) 2011 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 + +import unittest +from minimal import Val + +class ValTest(unittest.TestCase): + + def testNormalMethod(self): + valId = 123 + val = Val(valId) + self.assertEqual(val.valId(), valId) + +if __name__ == '__main__': + unittest.main() + -- cgit v1.2.3