aboutsummaryrefslogtreecommitdiffstats
path: root/tests/testcontainer.cpp
diff options
context:
space:
mode:
authorMarcelo Lira <marcelo.lira@openbossa.org>2011-10-19 14:27:36 -0300
committerHugo Parente Lima <hugo.pl@gmail.com>2012-03-09 19:10:19 -0300
commitf12e470665c66101baf3a52fca0737b5102d5420 (patch)
tree967235b615a604122d183414ca892d21a8eda205 /tests/testcontainer.cpp
parent6b0d3bae3a0c015c3341a6d615a6b6d799322d8a (diff)
Fixes setting of template argument's usage pattern.
Comes with an unit test. Reviewed by Hugo Parente <hugo.lima@openbossa.org> Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
Diffstat (limited to 'tests/testcontainer.cpp')
-rw-r--r--tests/testcontainer.cpp42
1 files changed, 41 insertions, 1 deletions
diff --git a/tests/testcontainer.cpp b/tests/testcontainer.cpp
index 563b75c20..3d31f8a61 100644
--- a/tests/testcontainer.cpp
+++ b/tests/testcontainer.cpp
@@ -38,7 +38,7 @@ void TestContainer::testContainerType()
};\
";
const char* xmlCode = "\
- <typesystem package=\"Foo\"> \
+ <typesystem package='Foo'> \
<namespace-type name='std' generate='no' /> \
<container-type name='std::list' type='list' /> \
<object-type name='A'/> \
@@ -54,6 +54,46 @@ void TestContainer::testContainerType()
QCOMPARE(reinterpret_cast<const ContainerTypeEntry*>(classA->typeEntry()->baseContainerType())->type(), ContainerTypeEntry::ListContainer);
}
+void TestContainer::testListOfValueType()
+{
+ const char* cppCode ="\
+ namespace std {\
+ template<class T>\
+ class list { \
+ T get(int x) { return 0; }\
+ };\
+ }\
+ class ValueType {};\
+ class A : public std::list<ValueType> {\
+ };\
+ ";
+ const char* xmlCode = "\
+ <typesystem package='Foo'> \
+ <namespace-type name='std' generate='no' /> \
+ <container-type name='std::list' type='list' /> \
+ <value-type name='ValueType'/> \
+ <value-type name='A'/> \
+ </typesystem>";
+
+ TestUtil t(cppCode, xmlCode, true);
+ AbstractMetaClassList classes = t.builder()->classes();
+ QCOMPARE(classes.count(), 3);
+
+ AbstractMetaClass* classA = classes.findClass("A");
+ QVERIFY(classA);
+ QCOMPARE(classA->templateBaseClassInstantiations().count(), 1);
+ const AbstractMetaType* templateInstanceType = classA->templateBaseClassInstantiations().first();
+ QVERIFY(templateInstanceType);
+
+ QCOMPARE(templateInstanceType->indirections(), 0);
+ QVERIFY(!templateInstanceType->typeEntry()->isObject());
+ QVERIFY(templateInstanceType->typeEntry()->isValue());
+ QVERIFY(!templateInstanceType->isReference());
+ QVERIFY(!templateInstanceType->isObject());
+ QVERIFY(!templateInstanceType->isValuePointer());
+ QVERIFY(templateInstanceType->isValue());
+}
+
QTEST_APPLESS_MAIN(TestContainer)
#include "testcontainer.moc"