aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcelo Lira <marcelo.lira@openbossa.org>2010-09-20 19:29:57 -0300
committerHugo Parente Lima <hugo.pl@gmail.com>2012-03-09 19:10:10 -0300
commit47cf0c2fafd1cdf594a319a7e42c606880ce0d51 (patch)
treef9e05b310cf716919b32c47534103871ae9d5073
parente6b15c234864cc8061f43a1c238ad57b78dcc61f (diff)
Updates tests to use nesting of type declarations.
Also added a new cases to test the nesting of type tags a bit more. Reviewed by Luciano Wolf <luciano.wolf@openbossa.org> Reviewed by Renato Araújo <renato.filho@openbossa.org>
-rw-r--r--tests/CMakeLists.txt10
-rw-r--r--tests/testenum.cpp19
-rw-r--r--tests/testnamespace.cpp13
-rw-r--r--tests/testnestedtypes.cpp87
-rw-r--r--tests/testnestedtypes.h35
5 files changed, 147 insertions, 17 deletions
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index ce054e2e5..a4cb4a13b 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -11,20 +11,18 @@ declare_test(testabstractmetaclass)
declare_test(testabstractmetatype)
declare_test(testaddfunction)
declare_test(testcodeinjection)
+declare_test(testcontainer)
declare_test(testconversionoperator)
declare_test(testconversionruletag)
-declare_test(testcontainer)
declare_test(testctorinformation)
declare_test(testdtorinformation)
declare_test(testenum)
declare_test(testfunctiontag)
declare_test(testimplicitconversions)
-if (NOT DISABLE_DOCSTRINGS)
- declare_test(testmodifydocumentation)
-endif()
declare_test(testmodifyfunction)
declare_test(testmultipleinheritance)
declare_test(testnamespace)
+declare_test(testnestedtypes)
declare_test(testprimitivetypetag)
declare_test(testrefcounttag)
declare_test(testreferencetopointer)
@@ -34,3 +32,7 @@ declare_test(testreverseoperators)
declare_test(testtemplates)
declare_test(testtoposort)
declare_test(testvoidarg)
+if (NOT DISABLE_DOCSTRINGS)
+ declare_test(testmodifydocumentation)
+endif()
+
diff --git a/tests/testenum.cpp b/tests/testenum.cpp
index 4ae6cb58a..82a0288ac 100644
--- a/tests/testenum.cpp
+++ b/tests/testenum.cpp
@@ -38,9 +38,10 @@ void TestEnum::testEnumCppSignature()
";
const char* xmlCode = "\
<typesystem package=\"Foo\"> \
- <value-type name='A'/> \
<enum-type name='GlobalEnum' />\
- <enum-type name='A::ClassEnum' />\
+ <value-type name='A'> \
+ <enum-type name='ClassEnum' />\
+ </value-type> \
<function signature='func(A::ClassEnum)' />\
</typesystem>";
@@ -85,9 +86,10 @@ void TestEnum::testEnumWithApiVersion()
";
const char* xmlCode = "\
<typesystem package=\"Foo\"> \
- <value-type name='A'/> \
- <enum-type name='A::ClassEnum' since='0.1'/>\
- <enum-type name='A::ClassEnum2' since='0.2'/>\
+ <value-type name='A'> \
+ <enum-type name='ClassEnum' since='0.1'/>\
+ <enum-type name='ClassEnum2' since='0.2'/>\
+ </value-type> \
</typesystem>";
TestUtil t(cppCode, xmlCode, true, 0.1);
@@ -106,11 +108,12 @@ void TestEnum::testAnonymousEnum()
";
const char* xmlCode = "\
<typesystem package=\"Foo\"> \
- <value-type name='A'/> \
<!-- Uses the first value of the enum to identify it. -->\
<enum-type identified-by-value='Global0'/>\
- <!-- Uses the second value of the enum to identify it. -->\
- <enum-type identified-by-value='A::A1'/>\
+ <value-type name='A'> \
+ <!-- Uses the second value of the enum to identify it. -->\
+ <enum-type identified-by-value='A1'/>\
+ </value-type> \
</typesystem>";
TestUtil t(cppCode, xmlCode, false);
diff --git a/tests/testnamespace.cpp b/tests/testnamespace.cpp
index 3833700a7..7fc457db0 100644
--- a/tests/testnamespace.cpp
+++ b/tests/testnamespace.cpp
@@ -38,8 +38,9 @@ void TestNamespace::testNamespaceMembers()
};";
const char* xmlCode = "\
<typesystem package='Foo'> \
- <namespace-type name='Namespace' />\
- <enum-type name='Namespace::Option' /> \
+ <namespace-type name='Namespace'>\
+ <enum-type name='Option' /> \
+ </namespace-type>\
</typesystem>";
TestUtil t(cppCode, xmlCode, false);
AbstractMetaClassList classes = t.builder()->classes();
@@ -64,9 +65,11 @@ void TestNamespace::testNamespaceInnerClassMembers()
};";
const char* xmlCode = "\
<typesystem package='Foo'> \
- <namespace-type name='OuterNamespace' />\
- <namespace-type name='OuterNamespace::InnerNamespace' />\
- <value-type name='OuterNamespace::InnerNamespace::SomeClass' /> \
+ <namespace-type name='OuterNamespace'>\
+ <namespace-type name='InnerNamespace'>\
+ <value-type name='SomeClass' /> \
+ </namespace-type>\
+ </namespace-type>\
</typesystem>";
TestUtil t(cppCode, xmlCode, false);
AbstractMetaClassList classes = t.builder()->classes();
diff --git a/tests/testnestedtypes.cpp b/tests/testnestedtypes.cpp
new file mode 100644
index 000000000..76c5ccd1a
--- /dev/null
+++ b/tests/testnestedtypes.cpp
@@ -0,0 +1,87 @@
+/*
+* This file is part of the API Extractor project.
+*
+* Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+*
+* Contact: PySide team <contact@pyside.org>
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* version 2 as published by the Free Software Foundation.
+*
+* This program is distributed in the hope that it will be useful, but
+* WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA
+*
+*/
+
+#include "testnestedtypes.h"
+#include <QtTest/QTest>
+#include "testutil.h"
+
+void TestNestedTypes::testNestedTypesModifications()
+{
+ const char* cppCode ="\
+ namespace OuterNamespace {\
+ namespace InnerNamespace {\
+ struct SomeClass {\
+ void method() {}\
+ };\
+ };\
+ };\
+ ";
+ const char* xmlCode = "\
+ <typesystem package='Foo'> \
+ <namespace-type name='OuterNamespace'>\
+ <namespace-type name='InnerNamespace'>\
+ <inject-code class='native'>custom_code1();</inject-code>\
+ <add-function signature='method()' return-type='OuterNamespace::InnerNamespace::SomeClass'>\
+ <inject-code class='target'>custom_code2();</inject-code>\
+ </add-function>\
+ <object-type name='SomeClass' target-lang-name='RenamedSomeClass'>\
+ <modify-function signature='method()' remove='all'/>\
+ </object-type>\
+ </namespace-type>\
+ </namespace-type>\
+ </typesystem>";
+
+ TestUtil t(cppCode, xmlCode, false);
+ AbstractMetaClassList classes = t.builder()->classes();
+
+ AbstractMetaClass* ons = classes.findClass("OuterNamespace");
+ QVERIFY(ons);
+
+ AbstractMetaClass* ins = classes.findClass("OuterNamespace::InnerNamespace");
+ QVERIFY(ins);
+ QCOMPARE(ins->functions().count(), 1);
+ QCOMPARE(ins->typeEntry()->codeSnips().count(), 1);
+ CodeSnip snip = ins->typeEntry()->codeSnips().first();
+ QCOMPARE(snip.code(), QString("custom_code1();"));
+
+ AbstractMetaFunction* addedFunc = ins->functions().first();
+ QVERIFY(addedFunc->isUserAdded());
+ QCOMPARE(addedFunc->visibility(), uint(AbstractMetaFunction::Public));
+ QCOMPARE(addedFunc->functionType(), AbstractMetaFunction::NormalFunction);
+ QCOMPARE(addedFunc->type()->minimalSignature(), QString("OuterNamespace::InnerNamespace::SomeClass"));
+
+ QCOMPARE(addedFunc->modifications().size(), 1);
+ QVERIFY(addedFunc->modifications().first().isCodeInjection());
+ snip = addedFunc->modifications().first().snips.first();
+ QCOMPARE(snip.code(), QString("custom_code2();"));
+
+ AbstractMetaClass* sc = classes.findClass("OuterNamespace::InnerNamespace::SomeClass");
+ QVERIFY(ins);
+ QCOMPARE(sc->functions().count(), 2); // default constructor and removed method
+ AbstractMetaFunction* removedFunc = sc->functions().last();
+ QVERIFY(removedFunc->isModifiedRemoved());
+}
+
+QTEST_APPLESS_MAIN(TestNestedTypes)
+
+#include "testnestedtypes.moc"
diff --git a/tests/testnestedtypes.h b/tests/testnestedtypes.h
new file mode 100644
index 000000000..b9980b0a6
--- /dev/null
+++ b/tests/testnestedtypes.h
@@ -0,0 +1,35 @@
+/*
+* This file is part of the API Extractor project.
+*
+* Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+*
+* Contact: PySide team <contact@pyside.org>
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* version 2 as published by the Free Software Foundation.
+*
+* This program is distributed in the hope that it will be useful, but
+* WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA
+*
+*/
+
+#ifndef TESTNESTEDTYPES_H
+#define TESTNESTEDTYPES_H
+#include <QObject>
+
+class TestNestedTypes : public QObject
+{
+ Q_OBJECT
+private slots:
+ void testNestedTypesModifications();
+};
+
+#endif