62
65
QTest::addColumn<QString>("translation");
63
66
QTest::addColumn<QUrl>("testFile");
67
QTest::addColumn<bool>("verifyCompiledData");
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;
70
74
void tst_qqmltranslation::translation()
72
76
QFETCH(QString, translation);
73
77
QFETCH(QUrl, testFile);
78
QFETCH(bool, verifyCompiledData);
75
80
QTranslator translator;
76
81
translator.load(translation, dataDirectory());
81
86
QObject *object = component.create();
82
87
QVERIFY(object != 0);
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();
96
QSet<QString> compiledTranslations;
97
compiledTranslations << QStringLiteral("basic")
98
<< QStringLiteral("disambiguation")
99
<< QStringLiteral("singular") << QStringLiteral("plural");
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);
107
const bool expectCompiledTranslation = compiledTranslations.contains(propertyName);
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));
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);
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);
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();
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));
166
QVERIFY(binding->type != QV4::CompiledData::Binding::Type_Translation);
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"));