diff options
-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(); |