// 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 "testcontainer.h" #include #include "testutil.h" #include #include #include #include void TestContainer::testContainerType() { const char* cppCode ="\ namespace std {\n\ template\n\ class list {\n\ T get(int x) { return 0; }\n\ };\n\ }\n\ class A : public std::list {\n\ };\n"; const char* xmlCode = "\ \n\ \n\ \n\ \n\ \n"; QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, true)); QVERIFY(!builder.isNull()); AbstractMetaClassList classes = builder->classes(); QCOMPARE(classes.size(), 2); //search for class A AbstractMetaClass* classA = AbstractMetaClass::findClass(classes, u"A"); QVERIFY(classA); auto baseContainer = classA->typeEntry()->baseContainerType(); QVERIFY(baseContainer); QCOMPARE(reinterpret_cast(baseContainer)->containerKind(), ContainerTypeEntry::ListContainer); } void TestContainer::testListOfValueType() { const char* cppCode ="\ namespace std {\n\ template\n\ class list {\n\ T get(int x) { return 0; }\n\ };\n\ }\n\ class ValueType {};\n\ class A : public std::list {\n\ };\n"; const char* xmlCode = "\ \n\ \n\ \n\ \n\ \n\ \n"; QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, true)); QVERIFY(!builder.isNull()); AbstractMetaClassList classes = builder->classes(); QCOMPARE(classes.size(), 3); const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, u"A"); QVERIFY(classA); QCOMPARE(classA->templateBaseClassInstantiations().size(), 1); const AbstractMetaType templateInstanceType = classA->templateBaseClassInstantiations().constFirst(); QCOMPARE(templateInstanceType.indirections(), 0); QVERIFY(!templateInstanceType.typeEntry()->isObject()); QVERIFY(templateInstanceType.typeEntry()->isValue()); QCOMPARE(templateInstanceType.referenceType(), NoReference); QVERIFY(!templateInstanceType.isObject()); QVERIFY(!templateInstanceType.isValuePointer()); QVERIFY(templateInstanceType.isValue()); } QTEST_APPLESS_MAIN(TestContainer)