diff options
author | Simon Hausmann <simon.hausmann@theqtcompany.com> | 2014-10-23 12:05:44 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@digia.com> | 2014-10-24 10:58:52 +0200 |
commit | f876562de8eb978cea39fe72e76c49ae51ff2f97 (patch) | |
tree | 8bf0f51c48da760f977ed3fc296952cbbeb2e9d5 /tests/auto/qml | |
parent | cfff375afcfe63d25b3c1904ff58a90bcd1edb43 (diff) |
Fix syntax error when trying to declare read-only object properties
The grammar did not allow for the declaration of
readonly property QtObject foo: QtObject { ... }
and it required a workaround through an alias:
readonly property alias foo: _foo
property QtObject _foo: QtObject { ... }
This was merely a glitch in the grammar, I see no reason not to support this.
The semantics are like a const pointer in C++, the property itself is read-only
but the object pointed to has per-property defined read/write semantics.
Task-number: QTBUG-41971
Change-Id: I99e2e7ed58731e387a38e46ec39922d280a21ceb
Reviewed-by: Michael Brasser <michael.brasser@live.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'tests/auto/qml')
-rw-r--r-- | tests/auto/qml/qqmllanguage/data/readonlyObjectProperty.qml | 7 | ||||
-rw-r--r-- | tests/auto/qml/qqmllanguage/qqmllanguage.pro | 3 | ||||
-rw-r--r-- | tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp | 19 |
3 files changed, 29 insertions, 0 deletions
diff --git a/tests/auto/qml/qqmllanguage/data/readonlyObjectProperty.qml b/tests/auto/qml/qqmllanguage/data/readonlyObjectProperty.qml new file mode 100644 index 0000000000..3fc332f565 --- /dev/null +++ b/tests/auto/qml/qqmllanguage/data/readonlyObjectProperty.qml @@ -0,0 +1,7 @@ +import QtQml 2.0 + +QtObject { + readonly property QtObject subObject: QtObject { + property int readWrite: 42 + } +} diff --git a/tests/auto/qml/qqmllanguage/qqmllanguage.pro b/tests/auto/qml/qqmllanguage/qqmllanguage.pro index 3b0518cfdf..f0c8bb6c1b 100644 --- a/tests/auto/qml/qqmllanguage/qqmllanguage.pro +++ b/tests/auto/qml/qqmllanguage/qqmllanguage.pro @@ -16,3 +16,6 @@ QT += core-private gui-private qml-private network testlib include (../../shared/util.pri) DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 + +OTHER_FILES += \ + data/readonlyObjectProperty.qml diff --git a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp index ec3e38dd14..12d2f53596 100644 --- a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp +++ b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp @@ -151,6 +151,7 @@ private slots: void nestedComponentRoots(); void registrationOrder(); void readonly(); + void readonlyObjectProperties(); void receivers(); void registeredCompositeType(); void implicitImportsLast(); @@ -3274,6 +3275,24 @@ void tst_qqmllanguage::readonly() delete o; } +void tst_qqmllanguage::readonlyObjectProperties() +{ + QQmlComponent component(&engine, testFileUrl("readonlyObjectProperty.qml")); + + QScopedPointer<QObject> o(component.create()); + QVERIFY(!o.isNull()); + + QQmlProperty prop(o.data(), QStringLiteral("subObject"), &engine); + QVERIFY(!prop.isWritable()); + QVERIFY(!prop.write(QVariant::fromValue(o.data()))); + + QObject *subObject = qvariant_cast<QObject*>(prop.read()); + QVERIFY(subObject); + QCOMPARE(subObject->property("readWrite").toInt(), int(42)); + subObject->setProperty("readWrite", QVariant::fromValue(int(100))); + QCOMPARE(subObject->property("readWrite").toInt(), int(100)); +} + void tst_qqmllanguage::receivers() { QQmlComponent component(&engine, testFileUrl("receivers.qml")); |