summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArno Rehn <a.rehn@menlosystems.com>2021-04-16 15:16:40 +0200
committerArno Rehn <a.rehn@menlosystems.com>2021-04-16 15:39:53 +0200
commit9d21b49006ee6be2991988280ad811010ae28111 (patch)
tree43440d02dd50c25471bb2935312123b19d60baf0
parent28455e59c0b940200fe0223472a80104ce1a02dd (diff)
downloadqtwebchannel-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.cpp18
-rw-r--r--tests/auto/webchannel/tst_webchannel.h7
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;
};