summaryrefslogtreecommitdiff
path: root/tests/auto/webchannel/tst_webchannel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/webchannel/tst_webchannel.cpp')
-rw-r--r--tests/auto/webchannel/tst_webchannel.cpp52
1 files changed, 52 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