From 068900d4f0af107e03dca9b530fff47deac4066d Mon Sep 17 00:00:00 2001 From: Marcelo Lira Date: Mon, 28 Jun 2010 17:42:24 -0300 Subject: Added test for template inheritance involving a forward declaration. When things goes awry methods from the template parent class got duplicated in the inheriting class. --- tests/testtemplates.cpp | 32 ++++++++++++++++++++++++++++++++ tests/testtemplates.h | 1 + 2 files changed, 33 insertions(+) diff --git a/tests/testtemplates.cpp b/tests/testtemplates.cpp index 19bc32eca..97738fda7 100644 --- a/tests/testtemplates.cpp +++ b/tests/testtemplates.cpp @@ -110,6 +110,38 @@ void TestTemplates::testTemplateOnContainers() QCOMPARE(instance2->typeEntry()->qualifiedCppName(), QString("Namespace::E1")); } +void TestTemplates::testTemplateInheritanceMixedWithForwardDeclaration() +{ + const char cppCode[] = "\ + enum SomeEnum { E1, E2 };\ + template struct Future;\ + template\ + struct A {\ + A();\ + void method();\ + friend struct Future;\ + };\ + typedef A B;\ + template struct Future {};\ + "; + const char xmlCode[] = "\ + \ + \ + \ + \ + \ + "; + + TestUtil t(cppCode, xmlCode, false); + AbstractMetaClassList classes = t.builder()->classes(); + + AbstractMetaClass* classB = classes.findClass("B"); + QVERIFY(!classB->baseClass()); + QVERIFY(classB->baseClassName().isNull()); + // 3 functions: simple constructor, copy constructor and "method()". + QCOMPARE(classB->functions().count(), 3); +} + QTEST_APPLESS_MAIN(TestTemplates) #include "testtemplates.moc" diff --git a/tests/testtemplates.h b/tests/testtemplates.h index b04002a75..430a7599c 100644 --- a/tests/testtemplates.h +++ b/tests/testtemplates.h @@ -32,6 +32,7 @@ class TestTemplates : public QObject private slots: void testTemplateOnContainers(); void testTemplateWithNamespace(); + void testTemplateInheritanceMixedWithForwardDeclaration(); }; #endif -- cgit v1.2.3