// Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #include "testrefcounttag.h" #include "testutil.h" #include #include #include #include #include using namespace Qt::StringLiterals; void TestRefCountTag::testReferenceCountTag() { const char cppCode[] = "\ struct A {};\n\ struct B {\n\ void keepObject(B* b);\n\ };\n"; const char xmlCode[] = "\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n"; QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); QVERIFY(!builder.isNull()); AbstractMetaClassList classes = builder->classes(); const AbstractMetaClass *classB = AbstractMetaClass::findClass(classes, u"B"); const auto func = classB->findFunction(u"keepObject"); QVERIFY(!func.isNull()); const auto refCount = func->modifications().constFirst().argument_mods().constFirst().referenceCounts().constFirst(); QCOMPARE(refCount.action, ReferenceCount::Add); } void TestRefCountTag::testWithApiVersion() { const char cppCode[] = "\ struct A {};\n\ struct B {\n\ void keepObject(B*, B*);\n\ };\n"; const char xmlCode[] = "\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n"; QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false, u"0.1"_s)); QVERIFY(!builder.isNull()); AbstractMetaClassList classes = builder->classes(); const AbstractMetaClass *classB = AbstractMetaClass::findClass(classes, u"B"); const auto func = classB->findFunction(u"keepObject"); QVERIFY(!func.isNull()); const auto refCount = func->modifications().constFirst().argument_mods().constFirst().referenceCounts().constFirst(); QCOMPARE(refCount.action, ReferenceCount::Add); QCOMPARE(func->modifications().size(), 1); } QTEST_APPLESS_MAIN(TestRefCountTag)