diff options
author | Arno Rehn <a.rehn@menlosystems.com> | 2021-04-16 15:16:40 +0200 |
---|---|---|
committer | Arno Rehn <a.rehn@menlosystems.com> | 2021-04-16 15:39:53 +0200 |
commit | 9d21b49006ee6be2991988280ad811010ae28111 (patch) | |
tree | 43440d02dd50c25471bb2935312123b19d60baf0 | |
parent | 28455e59c0b940200fe0223472a80104ce1a02dd (diff) | |
download | qtwebchannel-9d21b49006ee6be2991988280ad811010ae28111.tar.gz |
Fix up the recently added test for QProperty/QWebChannel interaction
The recently added code was not quite conformant to the coding style and
did not properly use Q_OBJECT_BINDABLE_PROPERTY together with a notify
signal. This commit fixes both.
The commit also adds a test to verify that changes to a QProperty are
actually transmitted over QWebChannel. At the moment, this relies on
notify signals. A follow-up patch will use onValueChanged() to propagate
changes of properties without a NOTIFY signal.
Task-number: QTBUG-91757
Change-Id: Ia5a323cba02dc72df774beeba445d40140d7af7f
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
-rw-r--r-- | tests/auto/webchannel/tst_webchannel.cpp | 18 | ||||
-rw-r--r-- | tests/auto/webchannel/tst_webchannel.h | 7 |
2 files changed, 19 insertions, 6 deletions
diff --git a/tests/auto/webchannel/tst_webchannel.cpp b/tests/auto/webchannel/tst_webchannel.cpp index f9f6845..1b48949 100644 --- a/tests/auto/webchannel/tst_webchannel.cpp +++ b/tests/auto/webchannel/tst_webchannel.cpp @@ -409,7 +409,7 @@ void TestWebChannel::testInfoForObject() addMethod(QStringLiteral("bindableStringProperty"), "bindableStringProperty()"); addMethod(QStringLiteral("getStringProperty"), "getStringProperty()"); addMethod(QStringLiteral("bindStringPropertyToStringProperty2"), "bindStringPropertyToStringProperty2()"); - addMethod(QStringLiteral("setStringProperty2"), "setStringProperty2(QString&)"); + addMethod(QStringLiteral("setStringProperty2"), "setStringProperty2(QString)"); addMethod(QStringLiteral("method1"), "method1()"); QCOMPARE(info["methods"].toArray(), expected); } @@ -1007,20 +1007,26 @@ void TestWebChannel::testAsyncObject() void TestWebChannel::testQProperty() { + static const int IndexOfStringProperty = + TestObject::staticMetaObject.indexOfProperty("stringProperty"); + + DummyTransport transport; QWebChannel channel; TestObject testObj; testObj.setObjectName("testObject"); QProperty<QString> obj1("Hello"); testObj.bindableStringProperty().setBinding([&](){ return obj1.value(); }); + QCOMPARE(obj1.value(), testObj.readStringProperty()); channel.registerObject(testObj.objectName(), &testObj); - channel.connectTo(m_dummyTransport); - channel.d_func()->publisher->initializeClient(m_dummyTransport); + channel.connectTo(&transport); + channel.d_func()->publisher->initializeClient(&transport); QVariant result; QMetaObjectPublisher *publisher = channel.d_func()->publisher; + publisher->setClientIsIdle(true); result = publisher->invokeMethod(&testObj, "getStringProperty", {}); QCOMPARE(result.toString(), obj1.value()); @@ -1029,6 +1035,12 @@ void TestWebChannel::testQProperty() result = publisher->invokeMethod(&testObj, "getStringProperty", {}); QCOMPARE(result.toString(), obj1.value()); + publisher->sendPendingPropertyUpdates(); + QVERIFY(!transport.messagesSent().isEmpty()); + const QJsonObject updateMessage = transport.messagesSent().last()["data"][0].toObject(); + QCOMPARE(updateMessage["object"], testObj.objectName()); + QCOMPARE(updateMessage["properties"][QString::number(IndexOfStringProperty)], obj1.value()); + publisher->invokeMethod(&testObj, "setStringProperty2", {"Hey"}); publisher->invokeMethod(&testObj, "bindStringPropertyToStringProperty2", {}); obj1 = "This should not affect getStringProperty"; diff --git a/tests/auto/webchannel/tst_webchannel.h b/tests/auto/webchannel/tst_webchannel.h index e75c13c..0660f89 100644 --- a/tests/auto/webchannel/tst_webchannel.h +++ b/tests/auto/webchannel/tst_webchannel.h @@ -131,7 +131,7 @@ public: } QString readStringProperty() const { return mStringProperty; } - void setStringProperty(QString v) { mStringProperty = v; emit stringPropertyChanged(); } + void setStringProperty(const QString &v) { mStringProperty = v; } Q_INVOKABLE void method1() {} @@ -179,10 +179,11 @@ public slots: QString overload(const QString &str) { return str.toUpper(); } QString overload(const QString &str, int i) { return str.toUpper() + QString::number(i + 1); } QString overload(const QJsonArray &v) { return QString::number(v[1].toInt()) + v[0].toString(); } + QBindable<QString> bindableStringProperty() { return &mStringProperty; } QString getStringProperty() const { return mStringProperty; } void bindStringPropertyToStringProperty2() { bindableStringProperty().setBinding(Qt::makePropertyBinding(mStringProperty2)); } - void setStringProperty2(QString& string) { mStringProperty2 = string; } + void setStringProperty2(const QString &string) { mStringProperty2 = string; } protected slots: void slot3() {} @@ -194,7 +195,7 @@ public: QObject *mObjectProperty; TestObject *mReturnedObject; QString mProp; - Q_OBJECT_BINDABLE_PROPERTY(TestObject, QString, mStringProperty); + Q_OBJECT_BINDABLE_PROPERTY(TestObject, QString, mStringProperty, &TestObject::stringPropertyChanged); QProperty<QString> mStringProperty2; }; |