diff options
| author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-11-06 09:59:29 +0100 |
|---|---|---|
| committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-11-09 15:49:23 +0000 |
| commit | 4ea3fcec20fdd80ae71cd69039e0ecae0a40653e (patch) | |
| tree | a2364d5452dd232fce7361d4522b5fe2c38cfcc5 /sources/shiboken6/ApiExtractor/tests/testaddfunction.cpp | |
| parent | 3428efa5f69d321bcacdd106b0e724ab99bb63ed (diff) | |
shiboken6: Replace AddedFunction::TypeInfo by TypeInfo
AddedFunction::TypeInfo was a stripped-down version of the
code model's TypeInfo with its own, simplified parser.
Replacing it by TypeInfo allows for removing the parser
code and the entire
AbstractMetaBuilderPrivate::translateType(AddedFunction::TypeInfo)
branch. The more powerful TypeParser from the code model
can then be used, allowing for more complex types in <add-function>
or <declare-function>.
As a drive by, replace the AddedFunction constructor by a static
factory function, allowing to pass up parse errors.
Change-Id: I33ad19e9b5ed30bd27898afe771401ddc98c8c73
Reviewed-by: Christian Tismer <tismer@stackless.com>
Diffstat (limited to 'sources/shiboken6/ApiExtractor/tests/testaddfunction.cpp')
| -rw-r--r-- | sources/shiboken6/ApiExtractor/tests/testaddfunction.cpp | 107 |
1 files changed, 68 insertions, 39 deletions
diff --git a/sources/shiboken6/ApiExtractor/tests/testaddfunction.cpp b/sources/shiboken6/ApiExtractor/tests/testaddfunction.cpp index ca10cbfc6..20ca3ae6f 100644 --- a/sources/shiboken6/ApiExtractor/tests/testaddfunction.cpp +++ b/sources/shiboken6/ApiExtractor/tests/testaddfunction.cpp @@ -38,41 +38,64 @@ void TestAddFunction::testParsingFuncNameAndConstness() { // generic test... const char sig1[] = "func(type1, const type2, const type3* const)"; - AddedFunction f1(QLatin1String(sig1), QLatin1String("void")); - QCOMPARE(f1.name(), QLatin1String("func")); - QCOMPARE(f1.arguments().count(), 3); - AddedFunction::TypeInfo retval = f1.returnType(); - QCOMPARE(retval.name, QLatin1String("void")); - QCOMPARE(retval.indirections, 0); - QCOMPARE(retval.isConstant, false); - QCOMPARE(retval.isReference, false); + QString errorMessage; + auto f1 = AddedFunction::createAddedFunction(QLatin1String(sig1), QLatin1String("void"), + &errorMessage); + QVERIFY2(!f1.isNull(), qPrintable(errorMessage)); + QCOMPARE(f1->name(), QLatin1String("func")); + QCOMPARE(f1->arguments().count(), 3); + TypeInfo retval = f1->returnType(); + QCOMPARE(retval.qualifiedName(), QStringList{QLatin1String("void")}); + QCOMPARE(retval.indirections(), 0); + QCOMPARE(retval.isConstant(), false); + QCOMPARE(retval.referenceType(), NoReference); // test with a ugly template as argument and other ugly stuff const char sig2[] = " _fu__nc_ ( type1, const type2, const Abc<int& , C<char*> * > * *@my_name@, const type3* const ) const "; - AddedFunction f2(QLatin1String(sig2), QLatin1String("const Abc<int& , C<char*> * > * *")); - QCOMPARE(f2.name(), QLatin1String("_fu__nc_")); - const auto &args = f2.arguments(); + auto f2 = AddedFunction::createAddedFunction(QLatin1String(sig2), + QLatin1String("const Abc<int& , C<char*> * > * *"), + &errorMessage); + QVERIFY2(!f2.isNull(), qPrintable(errorMessage)); + QCOMPARE(f2->name(), QLatin1String("_fu__nc_")); + const auto &args = f2->arguments(); QCOMPARE(args.count(), 4); - retval = f2.returnType(); - QCOMPARE(retval.name, QLatin1String("Abc<int& , C<char*> * >")); - QCOMPARE(retval.indirections, 2); - QCOMPARE(retval.isConstant, true); - QCOMPARE(retval.isReference, false); - retval = args.at(2).typeInfo; + retval = f2->returnType(); + QCOMPARE(retval.qualifiedName(), QStringList{QLatin1String("Abc")}); + QCOMPARE(retval.instantiations().size(), 2); + QCOMPARE(retval.toString(), QLatin1String("const Abc<int&, C<char*>*>**")); + QCOMPARE(retval.indirections(), 2); + QCOMPARE(retval.isConstant(), true); + QCOMPARE(retval.referenceType(), NoReference); QVERIFY(args.at(0).name.isEmpty()); QVERIFY(args.at(1).name.isEmpty()); + QCOMPARE(args.at(2).name, QLatin1String("my_name")); + auto arg2Type = args.at(2).typeInfo; + QCOMPARE(arg2Type.qualifiedName(), QStringList{QLatin1String("Abc")}); + QCOMPARE(arg2Type.instantiations().size(), 2); + QCOMPARE(arg2Type.toString(), QLatin1String("const Abc<int&, C<char*>*>**")); + QCOMPARE(arg2Type.indirections(), 2); + QCOMPARE(arg2Type.isConstant(), true); + QCOMPARE(arg2Type.referenceType(), NoReference); + QVERIFY(args.at(3).name.isEmpty()); - QCOMPARE(retval.name, QLatin1String("Abc<int& , C<char*> * >")); - QCOMPARE(retval.indirections, 2); - QCOMPARE(retval.isConstant, true); - QCOMPARE(retval.isReference, false); // function with no args. const char sig3[] = "func()"; - AddedFunction f3(QLatin1String(sig3), QLatin1String("void")); - QCOMPARE(f3.name(), QLatin1String("func")); - QCOMPARE(f3.arguments().count(), 0); + auto f3 = AddedFunction::createAddedFunction(QLatin1String(sig3), QLatin1String("void"), + &errorMessage); + QVERIFY2(!f3.isNull(), qPrintable(errorMessage)); + QCOMPARE(f3->name(), QLatin1String("func")); + QCOMPARE(f3->arguments().count(), 0); + + // const call operator + const char sig4[] = "operator()(int)const"; + auto f4 = AddedFunction::createAddedFunction(QLatin1String(sig4), QLatin1String("int"), + &errorMessage); + QVERIFY2(!f4.isNull(), qPrintable(errorMessage)); + QCOMPARE(f4->name(), QLatin1String("operator()")); + QCOMPARE(f4->arguments().count(), 1); + QVERIFY(f4->isConstant()); } void TestAddFunction::testAddFunction() @@ -196,11 +219,13 @@ void TestAddFunction::testAddFunctionCodeSnippets() void TestAddFunction::testAddFunctionWithoutParenteses() { const char sig1[] = "func"; - AddedFunction f1(QLatin1String(sig1), QLatin1String("void")); - - QCOMPARE(f1.name(), QLatin1String("func")); - QCOMPARE(f1.arguments().count(), 0); - QCOMPARE(f1.isConstant(), false); + QString errorMessage; + auto f1 = AddedFunction::createAddedFunction(QLatin1String(sig1), QLatin1String("void"), + &errorMessage); + QVERIFY2(!f1.isNull(), qPrintable(errorMessage)); + QCOMPARE(f1->name(), QLatin1String("func")); + QCOMPARE(f1->arguments().count(), 0); + QCOMPARE(f1->isConstant(), false); const char cppCode[] = "struct A {};\n"; const char xmlCode[] = "\ @@ -226,11 +251,13 @@ void TestAddFunction::testAddFunctionWithoutParenteses() void TestAddFunction::testAddFunctionWithDefaultArgs() { const char sig1[] = "func"; - AddedFunction f1(QLatin1String(sig1), QLatin1String("void")); - - QCOMPARE(f1.name(), QLatin1String("func")); - QCOMPARE(f1.arguments().count(), 0); - QCOMPARE(f1.isConstant(), false); + QString errorMessage; + auto f1 = AddedFunction::createAddedFunction(QLatin1String(sig1), QLatin1String("void"), + &errorMessage); + QVERIFY2(!f1.isNull(), qPrintable(errorMessage)); + QCOMPARE(f1->name(), QLatin1String("func")); + QCOMPARE(f1->arguments().count(), 0); + QCOMPARE(f1->isConstant(), false); const char cppCode[] = "struct A { };\n"; const char xmlCode[] = "\ @@ -291,11 +318,13 @@ void TestAddFunction::testAddFunctionAtModuleLevel() void TestAddFunction::testAddFunctionWithVarargs() { const char sig1[] = "func(int,char,...)"; - AddedFunction f1( QLatin1String(sig1), QLatin1String("void")); - - QCOMPARE(f1.name(), QLatin1String("func")); - QCOMPARE(f1.arguments().count(), 3); - QVERIFY(!f1.isConstant()); + QString errorMessage; + auto f1 = AddedFunction::createAddedFunction(QLatin1String(sig1), QLatin1String("void"), + &errorMessage); + QVERIFY2(!f1.isNull(), qPrintable(errorMessage)); + QCOMPARE(f1->name(), QLatin1String("func")); + QCOMPARE(f1->arguments().count(), 3); + QVERIFY(!f1->isConstant()); const char cppCode[] = "struct A {};\n"; const char xmlCode[] = "\ |
