void TestPrimitiveTypeTag::testPrimitiveTypeDefaultConstructor()
{
    const char* cppCode ="\
    struct A {};\
    struct B {};\
    ";
    const char* xmlCode = "\
    <typesystem package=\"Foo\"> \
        <primitive-type name='A' default-constructor='A()'/> \
        <object-type name='B' /> \
    </typesystem>";
    TestUtil t(cppCode, xmlCode, false);

    AbstractMetaClassList classes = t.builder()->classes();
    QCOMPARE(classes.count(), 1);
    AbstractMetaClass* classB = classes.findClass("B");
    QVERIFY(classB);

    PrimitiveTypeEntry* typeEntry = TypeDatabase::instance()->findPrimitiveType("A");
    QVERIFY(typeEntry);
    QVERIFY(typeEntry->hasDefaultConstructor());
    QCOMPARE(typeEntry->defaultConstructor(), QString("A()"));
}
{
    const char* cppCode ="struct A{};";
    const char* xmlCode = "\
    <typesystem package='Foo'>\
        <template name='code_template'>\
        code template content\
        </template>\
        <value-type name='A'>\
            <inject-code class='native'>\
                <insert-template name='code_template'/>\
            </inject-code>\
        </value-type>\
    </typesystem>";
    TestUtil t(cppCode, xmlCode, false);
    AbstractMetaClassList classes = t.builder()->classes();
    QCOMPARE(classes.count(), 1);
    AbstractMetaClass* classA = classes.findClass("A");
    QVERIFY(classA);
    QCOMPARE(classA->typeEntry()->codeSnips().count(), 1);
    QString code = classA->typeEntry()->codeSnips().first().code();
    QVERIFY(code.contains("code template content"));
}

void TestInsertTemplate::testInsertTemplateOnModuleInjectCode()
{
    const char* cppCode ="";
    const char* xmlCode = "\
    <typesystem package='Foo'>\
        <template name='code_template'>\
        code template content\
        </template>\