From 700ebd831f9ee7143c525bb936cd55f2a91adcc7 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 28 Jun 2017 10:12:21 +0200 Subject: Shiboken: Improve Handling of array types Change the AbstractMetaType::signature() functions to work with the nested AbstractMetaType types instead of TypeEntry so that the correct array signatures appear in the signature of AbstractMetaFunction. Task-number: PYSIDE-354 Task-number: PYSIDE-516 Change-Id: I90aa11891c95ccdcbae81fb70db4bec0e62f5923 Reviewed-by: Alexandru Croitor --- .../ApiExtractor/tests/testarrayargument.cpp | 36 ++++++++++++++++++++++ .../ApiExtractor/tests/testarrayargument.h | 1 + 2 files changed, 37 insertions(+) (limited to 'sources/shiboken2/ApiExtractor/tests') diff --git a/sources/shiboken2/ApiExtractor/tests/testarrayargument.cpp b/sources/shiboken2/ApiExtractor/tests/testarrayargument.cpp index 4d46d44bc..72d29fb06 100644 --- a/sources/shiboken2/ApiExtractor/tests/testarrayargument.cpp +++ b/sources/shiboken2/ApiExtractor/tests/testarrayargument.cpp @@ -58,6 +58,42 @@ void TestArrayArgument::testArrayArgumentWithSizeDefinedByInteger() QCOMPARE(arg->type()->arrayElementType()->name(), QLatin1String("double")); } +static QString functionMinimalSignature(const AbstractMetaClass *c, const QString &name) +{ + const AbstractMetaFunction *f = c->findFunction(name); + return f ? f->minimalSignature() : QString(); +} + +void TestArrayArgument::testArraySignature() +{ + const char cppCode[] ="\ + struct A {\n\ + void mi1(int arg[5]);\n\ + void mi1c(const int arg[5]);\n\ + void muc2(unsigned char *arg[2][3]);\n\ + void mc2c(const char *arg[5][6]);\n\ + };\n"; + const char xmlCode[] = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(builder->classes(), QLatin1String("A")); + QCOMPARE(functionMinimalSignature(classA, QLatin1String("mi1")), + QLatin1String("mi1(int[5])")); + QCOMPARE(functionMinimalSignature(classA, QLatin1String("mi1c")), + QLatin1String("mi1c(const int[5])")); + QCOMPARE(functionMinimalSignature(classA, QLatin1String("muc2")), + QLatin1String("muc2(unsigned char*[2][3])")); + QCOMPARE(functionMinimalSignature(classA, QLatin1String("mc2c")), + QLatin1String("mc2c(const char*[5][6])")); +} + void TestArrayArgument::testArrayArgumentWithSizeDefinedByEnumValue() { const char* cppCode ="\ diff --git a/sources/shiboken2/ApiExtractor/tests/testarrayargument.h b/sources/shiboken2/ApiExtractor/tests/testarrayargument.h index b50232ef4..45ca8e655 100644 --- a/sources/shiboken2/ApiExtractor/tests/testarrayargument.h +++ b/sources/shiboken2/ApiExtractor/tests/testarrayargument.h @@ -35,6 +35,7 @@ class TestArrayArgument : public QObject Q_OBJECT private slots: void testArrayArgumentWithSizeDefinedByInteger(); + void testArraySignature(); void testArrayArgumentWithSizeDefinedByEnumValue(); void testArrayArgumentWithSizeDefinedByEnumValueFromGlobalEnum(); }; -- cgit v1.2.3