aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorHugo Lima <hugo.lima@openbossa.org>2009-09-10 11:17:11 -0300
committerHugo Lima <hugo.lima@openbossa.org>2009-09-15 14:01:38 -0300
commit752c22056f4ba61961a01819992f9af71a3b0416 (patch)
treede1531dc76801c6d7fdc6688be3879b920f95975 /tests
parent2bf0c409590c15b72a960d693fad4ac48ce4b8a6 (diff)
Fix a bug related to function default values.
ApiExtractor tries to modify the defaultValue every time, so then return value of originalDefaultValue() if diferent from the return value of defaultValue() when they dont need to be. Unit test included.
Diffstat (limited to 'tests')
-rw-r--r--tests/testabstractmetaclass.cpp53
-rw-r--r--tests/testabstractmetaclass.h2
2 files changed, 55 insertions, 0 deletions
diff --git a/tests/testabstractmetaclass.cpp b/tests/testabstractmetaclass.cpp
index 2050fca20..63df54598 100644
--- a/tests/testabstractmetaclass.cpp
+++ b/tests/testabstractmetaclass.cpp
@@ -137,6 +137,59 @@ void TestAbstractMetaClass::testVirtualMethods()
QCOMPARE(funcC->implementingClass(), c);
}
+void TestAbstractMetaClass::testDefaultValues()
+{
+ const char* cppCode ="\
+ struct A {\
+ class B {};\
+ void method(B b = B());\
+ };\
+ ";
+ const char* xmlCode = "\
+ <typesystem package=\"Foo\"> \
+ <value-type name='A'/> \
+ <value-type name='A::B'/> \
+ </typesystem>";
+ TestUtil t(cppCode, xmlCode, false);
+ AbstractMetaClassList classes = t.builder()->classes();
+ QCOMPARE(classes.count(), 2);
+ AbstractMetaClass* classA = classes.findClass("A");
+ QCOMPARE(classA->queryFunctionsByName("method").count(), 1);
+ AbstractMetaFunction* method = classA->queryFunctionsByName("method").first();
+ AbstractMetaArgument* arg = method->arguments().first();
+ QCOMPARE(arg->defaultValueExpression(), arg->originalDefaultValueExpression());
+}
+
+void TestAbstractMetaClass::testModifiedDefaultValues()
+{
+ const char* cppCode ="\
+ struct A {\
+ class B {};\
+ void method(B b = B());\
+ };\
+ ";
+ const char* xmlCode = "\
+ <typesystem package=\"Foo\"> \
+ <value-type name='A'> \
+ <modify-function signature='method'>\
+ <modify-argument index='1'>\
+ <replace-default-expression with='Hello'/>\
+ </modify-argument>\
+ </modify-function>\
+ </value-type>\
+ <value-type name='A::B'/> \
+ </typesystem>";
+ TestUtil t(cppCode, xmlCode, false);
+ AbstractMetaClassList classes = t.builder()->classes();
+ QCOMPARE(classes.count(), 2);
+ AbstractMetaClass* classA = classes.findClass("A");
+ QCOMPARE(classA->queryFunctionsByName("method").count(), 1);
+ AbstractMetaFunction* method = classA->queryFunctionsByName("method").first();
+ AbstractMetaArgument* arg = method->arguments().first();
+ QCOMPARE(arg->defaultValueExpression(), QString("B()"));
+ QCOMPARE(arg->originalDefaultValueExpression(), QString("Hello"));
+}
+
QTEST_APPLESS_MAIN(TestAbstractMetaClass)
diff --git a/tests/testabstractmetaclass.h b/tests/testabstractmetaclass.h
index 54336e7bf..c89cbc5d1 100644
--- a/tests/testabstractmetaclass.h
+++ b/tests/testabstractmetaclass.h
@@ -35,6 +35,8 @@ private slots:
void testClassName();
void testClassNameUnderNamespace();
void testVirtualMethods();
+ void testDefaultValues();
+ void testModifiedDefaultValues();
};
#endif // TESTABSTRACTMETACLASS_H