~ubuntu-branches/debian/jessie/qtdeclarative-opensource-src/jessie

« back to all changes in this revision

Viewing changes to tests/auto/qml/qqmltranslation/tst_qqmltranslation.cpp

  • Committer: Package Import Robot
  • Author(s): Lisandro Damián Nicanor Pérez Meyer
  • Date: 2014-06-05 23:53:56 UTC
  • mfrom: (8.1.11 experimental)
  • Revision ID: package-import@ubuntu.com-20140605235356-cf36ioh08oh2oow4
Tags: 5.3.0-5
* Upload to unstable.
* Backport v4_yarr_jit_push_pop_addressTempRegister.patch to fix a bug
  of the JIT compiler in arm. Thanks Scott Kitterman for pointing it out.
* Update symbols files with buildds' logs.

Show diffs side-by-side

added added

removed removed

Lines of Context:
43
43
#include <QQmlEngine>
44
44
#include <QQmlComponent>
45
45
#include <QTranslator>
 
46
#include <QQmlContext>
 
47
#include <private/qqmlcompiler_p.h>
 
48
#include <private/qqmlengine_p.h>
46
49
#include "../../shared/util.h"
47
50
 
48
51
class tst_qqmltranslation : public QQmlDataTest
61
64
{
62
65
    QTest::addColumn<QString>("translation");
63
66
    QTest::addColumn<QUrl>("testFile");
 
67
    QTest::addColumn<bool>("verifyCompiledData");
64
68
 
65
 
    QTest::newRow("qml") << QStringLiteral("qml_fr") << testFileUrl("translation.qml");
66
 
    QTest::newRow("qrc") << QStringLiteral(":/qml_fr.qm") << QUrl("qrc:/translation.qml");
67
 
    QTest::newRow("js") << QStringLiteral("qml_fr") << testFileUrl("jstranslation.qml");
 
69
    QTest::newRow("qml") << QStringLiteral("qml_fr") << testFileUrl("translation.qml") << true;
 
70
    QTest::newRow("qrc") << QStringLiteral(":/qml_fr.qm") << QUrl("qrc:/translation.qml") << true;
 
71
    QTest::newRow("js") << QStringLiteral("qml_fr") << testFileUrl("jstranslation.qml") << false;
68
72
}
69
73
 
70
74
void tst_qqmltranslation::translation()
71
75
{
72
76
    QFETCH(QString, translation);
73
77
    QFETCH(QUrl, testFile);
 
78
    QFETCH(bool, verifyCompiledData);
74
79
 
75
80
    QTranslator translator;
76
81
    translator.load(translation, dataDirectory());
81
86
    QObject *object = component.create();
82
87
    QVERIFY(object != 0);
83
88
 
 
89
    if (verifyCompiledData) {
 
90
        QQmlContext *context = qmlContext(object);
 
91
        QQmlEnginePrivate *engine = QQmlEnginePrivate::get(context->engine());
 
92
        QQmlTypeData *typeData = engine->typeLoader.getType(context->baseUrl());
 
93
        QQmlCompiledData *cdata = typeData->compiledData();
 
94
        QVERIFY(cdata);
 
95
 
 
96
        QSet<QString> compiledTranslations;
 
97
        compiledTranslations << QStringLiteral("basic")
 
98
                             << QStringLiteral("disambiguation")
 
99
                             << QStringLiteral("singular") << QStringLiteral("plural");
 
100
 
 
101
        const QV4::CompiledData::QmlUnit *unit = cdata->qmlUnit;
 
102
        const QV4::CompiledData::Object *rootObject = unit->objectAt(unit->indexOfRootObject);
 
103
        const QV4::CompiledData::Binding *binding = rootObject->bindingTable();
 
104
        for (quint32 i = 0; i < rootObject->nBindings; ++i, ++binding) {
 
105
            const QString propertyName = unit->header.stringAt(binding->propertyNameIndex);
 
106
 
 
107
            const bool expectCompiledTranslation = compiledTranslations.contains(propertyName);
 
108
 
 
109
            if (expectCompiledTranslation) {
 
110
                if (binding->type != QV4::CompiledData::Binding::Type_Translation)
 
111
                    qDebug() << "binding for property" << propertyName << "is not a compiled translation";
 
112
                QCOMPARE(binding->type, quint32(QV4::CompiledData::Binding::Type_Translation));
 
113
            } else {
 
114
                if (binding->type == QV4::CompiledData::Binding::Type_Translation)
 
115
                    qDebug() << "binding for property" << propertyName << "is not supposed to be a compiled translation";
 
116
                QVERIFY(binding->type != QV4::CompiledData::Binding::Type_Translation);
 
117
            }
 
118
        }
 
119
    }
 
120
 
84
121
    QCOMPARE(object->property("basic").toString(), QLatin1String("bonjour"));
85
122
    QCOMPARE(object->property("basic2").toString(), QLatin1String("au revoir"));
86
123
    QCOMPARE(object->property("basic3").toString(), QLatin1String("bonjour"));
109
146
    QObject *object = component.create();
110
147
    QVERIFY(object != 0);
111
148
 
 
149
    {
 
150
        QQmlContext *context = qmlContext(object);
 
151
        QQmlEnginePrivate *engine = QQmlEnginePrivate::get(context->engine());
 
152
        QQmlTypeData *typeData = engine->typeLoader.getType(context->baseUrl());
 
153
        QQmlCompiledData *cdata = typeData->compiledData();
 
154
        QVERIFY(cdata);
 
155
 
 
156
        const QV4::CompiledData::QmlUnit *unit = cdata->qmlUnit;
 
157
        const QV4::CompiledData::Object *rootObject = unit->objectAt(unit->indexOfRootObject);
 
158
        const QV4::CompiledData::Binding *binding = rootObject->bindingTable();
 
159
        for (quint32 i = 0; i < rootObject->nBindings; ++i, ++binding) {
 
160
            const QString propertyName = unit->header.stringAt(binding->propertyNameIndex);
 
161
            if (propertyName == "idTranslation") {
 
162
                if (binding->type != QV4::CompiledData::Binding::Type_TranslationById)
 
163
                    qDebug() << "binding for property" << propertyName << "is not a compiled translation";
 
164
                QCOMPARE(binding->type, quint32(QV4::CompiledData::Binding::Type_TranslationById));
 
165
            } else {
 
166
                QVERIFY(binding->type != QV4::CompiledData::Binding::Type_Translation);
 
167
            }
 
168
        }
 
169
    }
 
170
 
112
171
    QCOMPARE(object->property("idTranslation").toString(), QLatin1String("bonjour tout le monde"));
113
172
    QCOMPARE(object->property("idTranslation2").toString(), QLatin1String("bonjour tout le monde"));
114
173
    QCOMPARE(object->property("idTranslation3").toString(), QLatin1String("bonjour tout le monde"));