diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2014-04-26 14:42:39 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-04-28 12:50:17 +0200 |
commit | 68a662a2e15b790080ea12c2434f6e1fe60bda1b (patch) | |
tree | 2ac79cccf047e4ed5f61f06f9a3823715975daa1 /tests | |
parent | da4f5504822189a7efd279d2380e0737f9de3968 (diff) |
Fix translations in states causing failing assertions
This is a smaller fix suitable for the release branch, merely adding support
for translations to the bytearray compilation step for states and ensuring a
consistent error message when qsTr is used in list models.
The proper fix will be done in dev that eliminates the entire intermediate
QByteArray storage for custom compilers.
Task-number: QTBUG-38492
Change-Id: If5171f16eb742c718e48b8bbcb265b0c241cd5e7
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp | 50 | ||||
-rw-r--r-- | tests/auto/quick/qquickstates/data/QTBUG-38492.qml | 16 | ||||
-rw-r--r-- | tests/auto/quick/qquickstates/tst_qquickstates.cpp | 16 |
3 files changed, 82 insertions, 0 deletions
diff --git a/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp b/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp index 678849c371..9b57eeffa9 100644 --- a/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp +++ b/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp @@ -101,6 +101,8 @@ private slots: void static_types_data(); void static_i18n(); void static_i18n_data(); + void dynamic_i18n(); + void dynamic_i18n_data(); void static_nestedElements(); void static_nestedElements_data(); void dynamic_data(); @@ -341,6 +343,54 @@ void tst_qqmllistmodel::static_i18n() delete obj; } +void tst_qqmllistmodel::dynamic_i18n_data() +{ + QTest::addColumn<QString>("qml"); + QTest::addColumn<QVariant>("value"); + QTest::addColumn<QString>("error"); + + QTest::newRow("qsTr") + << QString::fromUtf8("ListElement { foo: qsTr(\"test\") }") + << QVariant(QString::fromUtf8("test")) + << QString("ListElement: cannot use script for property value"); + + QTest::newRow("qsTrId") + << "ListElement { foo: qsTrId(\"qtn_test\") }" + << QVariant(QString("qtn_test")) + << QString("ListElement: cannot use script for property value"); +} + +void tst_qqmllistmodel::dynamic_i18n() +{ + QFETCH(QString, qml); + QFETCH(QVariant, value); + QFETCH(QString, error); + + qml = "import QtQuick 2.0\nItem { property variant test: model.get(0).foo; ListModel { id: model; " + qml + " } }"; + + QQmlEngine engine; + QQmlComponent component(&engine); + component.setData(qml.toUtf8(), + QUrl::fromLocalFile(QString("dummy.qml"))); + + if (!error.isEmpty()) { + QVERIFY(component.isError()); + QCOMPARE(component.errors().at(0).description(), error); + return; + } + + QVERIFY(!component.isError()); + + QObject *obj = component.create(); + QVERIFY(obj != 0); + + QVariant actual = obj->property("test"); + + QCOMPARE(actual, value); + QCOMPARE(actual.toString(), value.toString()); + + delete obj; +} void tst_qqmllistmodel::static_nestedElements() { QFETCH(int, elementCount); diff --git a/tests/auto/quick/qquickstates/data/QTBUG-38492.qml b/tests/auto/quick/qquickstates/data/QTBUG-38492.qml new file mode 100644 index 0000000000..d6d6d81fd3 --- /dev/null +++ b/tests/auto/quick/qquickstates/data/QTBUG-38492.qml @@ -0,0 +1,16 @@ +import QtQuick 2.0 + +Item { + id: root + property string text; + + states: [ + State { + name: 'apply' + PropertyChanges { + target: root + text: qsTr("Test") + } + } + ] +} diff --git a/tests/auto/quick/qquickstates/tst_qquickstates.cpp b/tests/auto/quick/qquickstates/tst_qquickstates.cpp index 0c9b75636f..6b46ab1fae 100644 --- a/tests/auto/quick/qquickstates/tst_qquickstates.cpp +++ b/tests/auto/quick/qquickstates/tst_qquickstates.cpp @@ -148,6 +148,7 @@ private slots: void QTBUG_14830(); void avoidFastForward(); void revertListBug(); + void QTBUG_38492(); }; void tst_qquickstates::initTestCase() @@ -1626,6 +1627,21 @@ void tst_qquickstates::revertListBug() QCOMPARE(rect2->parentItem(), origParent2); //QTBUG-22583 causes rect2's parent item to be origParent1 } +void tst_qquickstates::QTBUG_38492() +{ + QQmlEngine engine; + + QQmlComponent rectComponent(&engine, testFileUrl("QTBUG-38492.qml")); + QQuickItem *item = qobject_cast<QQuickItem*>(rectComponent.create()); + QVERIFY(item != 0); + + QQuickItemPrivate::get(item)->setState("apply"); + + QCOMPARE(item->property("text").toString(), QString("Test")); + + delete item; +} + QTEST_MAIN(tst_qquickstates) #include "tst_qquickstates.moc" |