diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/GenerateSipBindings/CMakeLists.txt | 19 | ||||
| -rw-r--r-- | tests/GenerateSipBindings/cpplib.cpp | 40 | ||||
| -rw-r--r-- | tests/GenerateSipBindings/cpplib.h | 26 | ||||
| -rw-r--r-- | tests/GenerateSipBindings/external_lib.cpp | 13 | ||||
| -rw-r--r-- | tests/GenerateSipBindings/external_lib.h | 12 | ||||
| -rw-r--r-- | tests/GenerateSipBindings/rules_SipTest.py | 8 | ||||
| -rw-r--r-- | tests/GenerateSipBindings/testscript.py | 16 | 
7 files changed, 121 insertions, 13 deletions
| diff --git a/tests/GenerateSipBindings/CMakeLists.txt b/tests/GenerateSipBindings/CMakeLists.txt index 223b2fed..c223bcef 100644 --- a/tests/GenerateSipBindings/CMakeLists.txt +++ b/tests/GenerateSipBindings/CMakeLists.txt @@ -10,8 +10,15 @@ set(CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE ON)  set(CMAKE_CXX_STANDARD 14) +add_library(ExternalLib SHARED external_lib.cpp) +target_link_libraries(ExternalLib PUBLIC Qt5::Core) +target_compile_features(ExternalLib PUBLIC cxx_nullptr) +  add_library(CppLib SHARED cpplib.cpp) -target_link_libraries(CppLib PUBLIC Qt5::Core) +target_link_libraries(CppLib +    PUBLIC Qt5::Core +    PRIVATE ExternalLib +)  target_compile_features(CppLib PUBLIC cxx_nullptr)  list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../find-modules) @@ -19,6 +26,16 @@ list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../find-modules)  find_package(PythonModuleGeneration REQUIRED)  ecm_generate_python_binding( +  TARGET ExternalLib +  PYTHONNAMESPACE PyTest +  MODULENAME ExternalLib +  SIP_DEPENDS +    QtCore/QtCoremod.sip +  HEADERS +    external_lib.h +) + +ecm_generate_python_binding(    TARGET CppLib    PYTHONNAMESPACE PyTest    MODULENAME CppLib diff --git a/tests/GenerateSipBindings/cpplib.cpp b/tests/GenerateSipBindings/cpplib.cpp index 8dc7492b..524a0936 100644 --- a/tests/GenerateSipBindings/cpplib.cpp +++ b/tests/GenerateSipBindings/cpplib.cpp @@ -1,6 +1,8 @@  #include "cpplib.h" +#include "external_lib.h" +  MyObject::MyObject(QObject* parent)    : QObject(parent)  { @@ -65,19 +67,21 @@ int MyObject::groups(unsigned int maxCount) const    return maxCount;  } -class FwdDecl +int MyObject::externalFwdDecl(const ExternalFwdDecl& f)  { +  return f.getValue(); +} -}; - -int MyObject::fwdDecl(const FwdDecl&) +int MyObject::externalFwdDeclRef(ExternalFwdDecl& f)  { -  return 42; +  return f.getValue();  } -int MyObject::fwdDeclRef(FwdDecl&) +int MyObject::localDeclListDecl(const QList<LocalFwdDecl>& l)  { -  return 42; +  return std::accumulate(l.begin(), l.end(), 0, [](int current, LocalFwdDecl const& next){ +    return current + next.getValue(); +  });  }  int MyObject::const_parameters(const int input, QObject* const obj) const @@ -86,6 +90,28 @@ int MyObject::const_parameters(const int input, QObject* const obj) const    return input / 2;  } +int MyObject::localFwdDecl(const LocalFwdDecl& f) +{ +  return f.getValue(); +} + +int MyObject::localListDecl(const QList<int>& l) +{ +  return std::accumulate(l.begin(), l.end(), 0); +} + +LocalFwdDecl::LocalFwdDecl(int value) +  : m_value(value) +{ + +} + +int LocalFwdDecl::getValue() const +{ +  return m_value; +} + +  NonCopyable::NonCopyable()    : mNum(new int(42))  { diff --git a/tests/GenerateSipBindings/cpplib.h b/tests/GenerateSipBindings/cpplib.h index 9b9adcba..3ae9448a 100644 --- a/tests/GenerateSipBindings/cpplib.h +++ b/tests/GenerateSipBindings/cpplib.h @@ -10,7 +10,10 @@  #include <functional> -class FwdDecl; +class ExternalFwdDecl; +class LocalFwdDecl; + +template<typename T> class QList;  class MyObject : public QObject  { @@ -46,8 +49,14 @@ public:    int const_parameters(const int input, QObject* const obj = 0) const; -  int fwdDecl(const FwdDecl& f); -  int fwdDeclRef(FwdDecl& f); +  int externalFwdDecl(const ExternalFwdDecl& f); +  int externalFwdDeclRef(ExternalFwdDecl& f); + +  int localFwdDecl(const LocalFwdDecl& f); + +  int localListDecl(const QList<int>& l); + +  int localDeclListDecl(const QList<LocalFwdDecl>& l);    mode_t dummyFunc(QObject* parent) { return 0; } @@ -77,6 +86,17 @@ private Q_SLOTS:    void privateSlot2();  }; +class LocalFwdDecl +{ +public: +  LocalFwdDecl(int value); + +  int getValue() const; + +private: +  int m_value; +}; +  class NonCopyable  {  public: diff --git a/tests/GenerateSipBindings/external_lib.cpp b/tests/GenerateSipBindings/external_lib.cpp new file mode 100644 index 00000000..a08125ff --- /dev/null +++ b/tests/GenerateSipBindings/external_lib.cpp @@ -0,0 +1,13 @@ + +#include "external_lib.h" + +ExternalFwdDecl::ExternalFwdDecl(int value) +  : m_value(value) +{ + +} + +int ExternalFwdDecl::getValue() const +{ +  return m_value; +} diff --git a/tests/GenerateSipBindings/external_lib.h b/tests/GenerateSipBindings/external_lib.h new file mode 100644 index 00000000..f5ea38b2 --- /dev/null +++ b/tests/GenerateSipBindings/external_lib.h @@ -0,0 +1,12 @@ + +#pragma once + +class ExternalFwdDecl +{ +public: +  ExternalFwdDecl(int value); + +  int getValue() const; +private: +  int m_value; +}; diff --git a/tests/GenerateSipBindings/rules_SipTest.py b/tests/GenerateSipBindings/rules_SipTest.py index ad3fcb64..c570a039 100644 --- a/tests/GenerateSipBindings/rules_SipTest.py +++ b/tests/GenerateSipBindings/rules_SipTest.py @@ -10,10 +10,13 @@ def local_container_rules():          [".*", "Shared", ".*", ".*", ".*", rules_engine.discard_QSharedData_base]      ] +def local_forward_declaration_rules(): +    return [ +        [".*", "ExternalFwdDecl", ".*", rules_engine.mark_forward_declaration_external] +    ] +  def local_function_rules():      return [ -        ["MyObject", "fwdDecl", ".*", ".*", ".*", rules_engine.function_discard], -        ["MyObject", "fwdDeclRef", ".*", ".*", ".*", rules_engine.function_discard],          ["TypedefUser", "setTagPattern", ".*", ".*", ".*", rules_engine.function_discard],      ] @@ -34,6 +37,7 @@ class RuleSet(Qt5Ruleset.RuleSet):      def __init__(self):          Qt5Ruleset.RuleSet.__init__(self)          self._container_db = rules_engine.ContainerRuleDb(lambda: local_container_rules() + Qt5Ruleset.container_rules()) +        self._forward_declaration_db = rules_engine.ForwardDeclarationRuleDb(lambda: local_forward_declaration_rules() + Qt5Ruleset.forward_declaration_rules())          self._fn_db = rules_engine.FunctionRuleDb(lambda: local_function_rules() + Qt5Ruleset.function_rules())          self._typedef_db = rules_engine.TypedefRuleDb(lambda: local_typedef_rules() + Qt5Ruleset.typedef_rules())          self._modulecode = rules_engine.ModuleCodeDb({ diff --git a/tests/GenerateSipBindings/testscript.py b/tests/GenerateSipBindings/testscript.py index 9faea837..9e12bd17 100644 --- a/tests/GenerateSipBindings/testscript.py +++ b/tests/GenerateSipBindings/testscript.py @@ -26,6 +26,22 @@ assert(mo.const_parameters(30, mo) == 10)  assert(mo.qtEnumTest(QtCore.Qt.MatchContains | QtCore.Qt.MatchStartsWith) == 3)  assert(mo.localEnumTest(PyTest.CppLib.MyObject.Val2) == 2) +lfd = PyTest.CppLib.LocalFwdDecl(18) + +assert(mo.localFwdDecl(lfd) == 18) + +import PyTest.ExternalLib + +efd = PyTest.ExternalLib.ExternalFwdDecl(18) + +assert(mo.externalFwdDecl(efd) == 18) + +assert(mo.localListDecl([1, 5, 7]) == 13) + +lfdl = [PyTest.CppLib.LocalFwdDecl(3), PyTest.CppLib.LocalFwdDecl(6)] + +assert(mo.localDeclListDecl(lfdl) == 9) +  #  # Verify that an enum with attributes can be read.  # | 
