summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorØystein Heskestad <oystein.heskestad@qt.io>2021-04-14 10:21:00 +0200
committerØystein Heskestad <oystein.heskestad@qt.io>2021-04-16 11:56:13 +0200
commite4c7122d78e4f8dccc246a027cde1bf43a87841d (patch)
tree9b2d61c79fd7350087f124717952eaf4a1fedd10
parent37d15b2f0bcda4918b0788d7b2c3cd96bb5eb1ce (diff)
downloadqtwebchannel-e4c7122d78e4f8dccc246a027cde1bf43a87841d.tar.gz
Add test for QProperty over QWebChannel
Task-number: QTBUG-91757 Change-Id: I45eb5aed2a1254fe2553a1cfc2475ccdb39252b1 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
-rw-r--r--tests/auto/webchannel/tst_webchannel.cpp52
-rw-r--r--tests/auto/webchannel/tst_webchannel.h12
2 files changed, 64 insertions, 0 deletions
diff --git a/tests/auto/webchannel/tst_webchannel.cpp b/tests/auto/webchannel/tst_webchannel.cpp
index 3f2c435..20e5da1 100644
--- a/tests/auto/webchannel/tst_webchannel.cpp
+++ b/tests/auto/webchannel/tst_webchannel.cpp
@@ -406,6 +406,10 @@ void TestWebChannel::testInfoForObject()
addMethod(QStringLiteral("overload"), "overload(QString)", false);
addMethod(QStringLiteral("overload"), "overload(QString,int)", false);
addMethod(QStringLiteral("overload"), "overload(QJsonArray)", false);
+ addMethod(QStringLiteral("bindableStringProperty"), "bindableStringProperty()");
+ addMethod(QStringLiteral("getStringProperty"), "getStringProperty()");
+ addMethod(QStringLiteral("bindStringPropertyToStringProperty2"), "bindStringPropertyToStringProperty2()");
+ addMethod(QStringLiteral("setStringProperty2"), "setStringProperty2(QString&)");
addMethod(QStringLiteral("method1"), "method1()");
QCOMPARE(info["methods"].toArray(), expected);
}
@@ -513,6 +517,19 @@ void TestWebChannel::testInfoForObject()
property.append(QJsonValue::fromVariant(QVariant::fromValue(obj.prop())));
expected.append(property);
}
+ {
+ QJsonArray property;
+ property.append(obj.metaObject()->indexOfProperty("stringProperty"));
+ property.append(QStringLiteral("stringProperty"));
+ {
+ QJsonArray signal;
+ signal.append(1);
+ signal.append(obj.metaObject()->indexOfMethod("stringPropertyChanged()"));
+ property.append(signal);
+ }
+ property.append(QJsonValue::fromVariant(QVariant::fromValue(obj.readStringProperty())));
+ expected.append(property);
+ }
QCOMPARE(info["properties"].toArray(), expected);
}
}
@@ -990,6 +1007,41 @@ void TestWebChannel::testAsyncObject()
thread.wait();
}
+void TestWebChannel::testQProperty()
+{
+ 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);
+
+ QVariant result;
+ QMetaObjectPublisher *publisher = channel.d_func()->publisher;
+
+ result = publisher->invokeMethod(&testObj, "getStringProperty", {});
+ QCOMPARE(result.toString(), obj1.value());
+
+ obj1 = "world";
+ result = publisher->invokeMethod(&testObj, "getStringProperty", {});
+ QCOMPARE(result.toString(), obj1.value());
+
+ publisher->invokeMethod(&testObj, "setStringProperty2", {"Hey"});
+ publisher->invokeMethod(&testObj, "bindStringPropertyToStringProperty2", {});
+ obj1 = "This should not affect getStringProperty";
+ result = publisher->invokeMethod(&testObj, "getStringProperty", {});
+ QCOMPARE(result.toString(), "Hey");
+
+ publisher->invokeMethod(&testObj, "setStringProperty2", {"again"});
+ result = publisher->invokeMethod(&testObj, "getStringProperty", {});
+ QCOMPARE(result.toString(), "again");
+}
+
class FunctionWrapper : public QObject
{
Q_OBJECT
diff --git a/tests/auto/webchannel/tst_webchannel.h b/tests/auto/webchannel/tst_webchannel.h
index c64cd05..e75c13c 100644
--- a/tests/auto/webchannel/tst_webchannel.h
+++ b/tests/auto/webchannel/tst_webchannel.h
@@ -90,6 +90,7 @@ class TestObject : public QObject
Q_PROPERTY(QObject * objectProperty READ objectProperty WRITE setObjectProperty NOTIFY objectPropertyChanged)
Q_PROPERTY(TestObject * returnedObject READ returnedObject WRITE setReturnedObject NOTIFY returnedObjectChanged)
Q_PROPERTY(QString prop READ prop WRITE setProp NOTIFY propChanged)
+ Q_PROPERTY(QString stringProperty READ readStringProperty WRITE setStringProperty BINDABLE bindableStringProperty NOTIFY stringPropertyChanged)
public:
explicit TestObject(QObject *parent = 0)
@@ -129,6 +130,9 @@ public:
return mProp;
}
+ QString readStringProperty() const { return mStringProperty; }
+ void setStringProperty(QString v) { mStringProperty = v; emit stringPropertyChanged(); }
+
Q_INVOKABLE void method1() {}
protected:
@@ -148,6 +152,7 @@ signals:
void replay();
void overloadSignal(int);
void overloadSignal(float);
+ void stringPropertyChanged();
public slots:
void slot1() {}
@@ -174,6 +179,10 @@ 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; }
protected slots:
void slot3() {}
@@ -185,6 +194,8 @@ public:
QObject *mObjectProperty;
TestObject *mReturnedObject;
QString mProp;
+ Q_OBJECT_BINDABLE_PROPERTY(TestObject, QString, mStringProperty);
+ QProperty<QString> mStringProperty2;
};
Q_DECLARE_OPERATORS_FOR_FLAGS(TestObject::TestFlags)
@@ -345,6 +356,7 @@ private slots:
void testJsonToVariant();
void testInfiniteRecursion();
void testAsyncObject();
+ void testQProperty();
void testDeletionDuringMethodInvocation_data();
void testDeletionDuringMethodInvocation();