diff options
author | Liang Qi <liang.qi@qt.io> | 2019-02-25 10:15:13 +0100 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2019-02-25 10:15:13 +0100 |
commit | 3809bdf15524e65397447eb7ba62a289c5ef58d4 (patch) | |
tree | 96fd257f2dba2696a79026ab1101a57496189875 | |
parent | 7fa4cf258af693f0fe61e5006ad83a91c63a45df (diff) | |
parent | d14c6aa5855ebfb8bb624efd7817bb3cdd4c96e4 (diff) | |
download | qtwebchannel-3809bdf15524e65397447eb7ba62a289c5ef58d4.tar.gz |
Merge remote-tracking branch 'origin/5.12' into 5.13v5.13.0-beta1
Conflicts:
src/webchannel/qmetaobjectpublisher.cpp
Done-With: Arno Rehn <a.rehn@menlosystems.com>
Change-Id: I763a76cf055547c5c5e59511ded51c467d6c7526
-rw-r--r-- | src/webchannel/qmetaobjectpublisher.cpp | 3 | ||||
-rw-r--r-- | tests/auto/webchannel/tst_webchannel.cpp | 35 | ||||
-rw-r--r-- | tests/auto/webchannel/tst_webchannel.h | 2 |
3 files changed, 40 insertions, 0 deletions
diff --git a/src/webchannel/qmetaobjectpublisher.cpp b/src/webchannel/qmetaobjectpublisher.cpp index cd2d940..c9285b7 100644 --- a/src/webchannel/qmetaobjectpublisher.cpp +++ b/src/webchannel/qmetaobjectpublisher.cpp @@ -491,6 +491,9 @@ QObject *QMetaObjectPublisher::unwrapObject(const QString &objectId) const ObjectInfo objectInfo = wrappedObjects.value(objectId); if (objectInfo.object && !objectInfo.classinfo.isEmpty()) return objectInfo.object; + QObject *object = registeredObjects.value(objectId); + if (object) + return object; } qWarning() << "No wrapped object" << objectId; diff --git a/tests/auto/webchannel/tst_webchannel.cpp b/tests/auto/webchannel/tst_webchannel.cpp index 13d1567..9a0f575 100644 --- a/tests/auto/webchannel/tst_webchannel.cpp +++ b/tests/auto/webchannel/tst_webchannel.cpp @@ -708,6 +708,25 @@ void TestWebChannel::testWrapRegisteredObject() QCOMPARE(obj.objectName(), returnedId); } +void TestWebChannel::testUnwrapObject() +{ + QWebChannel channel; + + { + TestObject obj; + obj.setObjectName("testObject"); + channel.registerObject(obj.objectName(), &obj); + QObject *unwrapped = channel.d_func()->publisher->unwrapObject(obj.objectName()); + QCOMPARE(unwrapped, &obj); + } + { + TestObject obj; + QJsonObject objectInfo = channel.d_func()->publisher->wrapResult(QVariant::fromValue(&obj), m_dummyTransport).toObject(); + QObject *unwrapped = channel.d_func()->publisher->unwrapObject(objectInfo["id"].toString()); + QCOMPARE(unwrapped, &obj); + } +} + void TestWebChannel::testRemoveUnusedTransports() { QWebChannel channel; @@ -780,6 +799,22 @@ void TestWebChannel::testWrapValues() } } +void TestWebChannel::testWrapObjectWithMultipleTransports() +{ + QWebChannel channel; + QMetaObjectPublisher *pub = channel.d_func()->publisher; + + DummyTransport *dummyTransport = new DummyTransport(this); + DummyTransport *dummyTransport2 = new DummyTransport(this); + + TestObject obj; + + pub->wrapResult(QVariant::fromValue(&obj), dummyTransport); + pub->wrapResult(QVariant::fromValue(&obj), dummyTransport2); + + QCOMPARE(pub->transportedWrappedObjects.count(), 2); +} + void TestWebChannel::testJsonToVariant() { QWebChannel channel; diff --git a/tests/auto/webchannel/tst_webchannel.h b/tests/auto/webchannel/tst_webchannel.h index c4fee23..3d16f7b 100644 --- a/tests/auto/webchannel/tst_webchannel.h +++ b/tests/auto/webchannel/tst_webchannel.h @@ -311,9 +311,11 @@ private slots: void testSetPropertyConversion(); void testDisconnect(); void testWrapRegisteredObject(); + void testUnwrapObject(); void testRemoveUnusedTransports(); void testPassWrappedObjectBack(); void testWrapValues(); + void testWrapObjectWithMultipleTransports(); void testJsonToVariant(); void testInfiniteRecursion(); void testAsyncObject(); |