diff options
author | Renato Filho <renato.filho@openbossa.org> | 2010-09-01 13:35:40 -0300 |
---|---|---|
committer | Hugo Parente Lima <hugo.pl@gmail.com> | 2012-03-09 19:10:09 -0300 |
commit | 2d170a0b8b1519befc4cdad57a0a46ccf8d16e0a (patch) | |
tree | bd7b63fd5bc1385412f4dea1f3a10cd5a17f599a /tests/testmodifyfunction.cpp | |
parent | 869b35c10ef573771532c6f2cb017dbfab315e61 (diff) |
Fixed function modification propagation.
Now all modifications on base function will be propagate until a new modification was found.
Reviewer: Hugo Parente Lima <hugo.pl@gmail.com>
Lauro Moura <lauro.neto@openbossa.org>
Diffstat (limited to 'tests/testmodifyfunction.cpp')
-rw-r--r-- | tests/testmodifyfunction.cpp | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/tests/testmodifyfunction.cpp b/tests/testmodifyfunction.cpp index 95ba16f40..3f92e3e13 100644 --- a/tests/testmodifyfunction.cpp +++ b/tests/testmodifyfunction.cpp @@ -79,6 +79,92 @@ void TestModifyFunction::testOwnershipTransfer() QCOMPARE(func->ownership(func->ownerClass(), TypeSystem::TargetLangCode, 0), TypeSystem::CppOwnership); } + +void TestModifyFunction::invalidateAfterUse() +{ + const char* cppCode ="\ + struct A {\ + virtual void call(int *a);\ + };\ + struct B : A {\ + };\ + struct C : B {\ + virtual void call2(int *a);\ + };\ + struct D : C {\ + virtual void call2(int *a);\ + };\ + struct E : D {\ + };\ + "; + const char* xmlCode = "\ + <typesystem package='Foo'> \ + <primitive-type name='int'/>\ + <object-type name='A'> \ + <modify-function signature='call(int*)'>\ + <modify-argument index='1' invalidate-after-use='true'/>\ + </modify-function>\ + </object-type>\ + <object-type name='B' /> \ + <object-type name='C'> \ + <modify-function signature='call2(int*)'>\ + <modify-argument index='1' invalidate-after-use='true'/>\ + </modify-function>\ + </object-type>\ + <object-type name='D'> \ + <modify-function signature='call2(int*)'>\ + <modify-argument index='1' invalidate-after-use='true'/>\ + </modify-function>\ + </object-type>\ + <object-type name='E' /> \ + </typesystem>"; + TestUtil t(cppCode, xmlCode, false, 0.1); + AbstractMetaClassList classes = t.builder()->classes(); + AbstractMetaClass* classB = classes.findClass("B"); + const AbstractMetaFunction* func = classB->findFunction("call"); + QCOMPARE(func->modifications().size(), 1); + QCOMPARE(func->modifications().at(0).argument_mods.size(), 1); + QVERIFY(func->modifications().at(0).argument_mods.at(0).resetAfterUse); + + AbstractMetaClass* classC = classes.findClass("C"); + QVERIFY(classC); + func = classC->findFunction("call"); + QCOMPARE(func->modifications().size(), 1); + QCOMPARE(func->modifications().at(0).argument_mods.size(), 1); + QVERIFY(func->modifications().at(0).argument_mods.at(0).resetAfterUse); + + func = classC->findFunction("call2"); + QCOMPARE(func->modifications().size(), 1); + QCOMPARE(func->modifications().at(0).argument_mods.size(), 1); + QVERIFY(func->modifications().at(0).argument_mods.at(0).resetAfterUse); + + AbstractMetaClass* classD = classes.findClass("D"); + QVERIFY(classD); + func = classD->findFunction("call"); + QCOMPARE(func->modifications().size(), 1); + QCOMPARE(func->modifications().at(0).argument_mods.size(), 1); + QVERIFY(func->modifications().at(0).argument_mods.at(0).resetAfterUse); + + func = classD->findFunction("call2"); + QCOMPARE(func->modifications().size(), 1); + QCOMPARE(func->modifications().at(0).argument_mods.size(), 1); + QVERIFY(func->modifications().at(0).argument_mods.at(0).resetAfterUse); + + AbstractMetaClass* classE = classes.findClass("E"); + QVERIFY(classE); + func = classE->findFunction("call"); + QVERIFY(func); + QCOMPARE(func->modifications().size(), 1); + QCOMPARE(func->modifications().at(0).argument_mods.size(), 1); + QVERIFY(func->modifications().at(0).argument_mods.at(0).resetAfterUse); + + func = classE->findFunction("call2"); + QVERIFY(func); + QCOMPARE(func->modifications().size(), 1); + QCOMPARE(func->modifications().at(0).argument_mods.size(), 1); + QVERIFY(func->modifications().at(0).argument_mods.at(0).resetAfterUse); +} + void TestModifyFunction::testWithApiVersion() { const char* cppCode ="\ |