void TestWebChannel::testDeregisterObjects() { QWebChannel channel; TestObject testObject; testObject.setObjectName("myTestObject"); channel.registerObject(testObject.objectName(), &testObject); channel.connectTo(m_dummyTransport); channel.d_func()->publisher->initializeClient(m_dummyTransport); QJsonObject connectMessage = QJsonDocument::fromJson(("{\"type\": 7," "\"object\": \"myTestObject\"," "\"signal\": " + QString::number(testObject.metaObject()->indexOfSignal("sig1()")) + "}").toLatin1()).object(); channel.d_func()->publisher->handleMessage(connectMessage, m_dummyTransport); emit testObject.sig1(); channel.deregisterObject(&testObject); emit testObject.sig1(); }
void TestWebChannel::testInfoForObject() { TestObject obj; obj.setObjectName("myTestObject"); QWebChannel channel; const QJsonObject info = channel.d_func()->publisher->classInfoForObject(&obj, m_dummyTransport); QCOMPARE(info.keys(), QStringList() << "enums" << "methods" << "properties" << "signals"); { // enums QJsonObject fooEnum; fooEnum["Asdf"] = TestObject::Asdf; fooEnum["Bar"] = TestObject::Bar; QJsonObject expected; expected["Foo"] = fooEnum; QCOMPARE(info["enums"].toObject(), expected); } { // methods & slots QJsonArray expected; { QJsonArray method; method.append(QStringLiteral("deleteLater")); method.append(obj.metaObject()->indexOfMethod("deleteLater()")); expected.append(method); } { QJsonArray method; method.append(QStringLiteral("slot1")); method.append(obj.metaObject()->indexOfMethod("slot1()")); expected.append(method); } { QJsonArray method; method.append(QStringLiteral("slot2")); method.append(obj.metaObject()->indexOfMethod("slot2(QString)")); expected.append(method); } { QJsonArray method; method.append(QStringLiteral("method1")); method.append(obj.metaObject()->indexOfMethod("method1()")); expected.append(method); } QCOMPARE(info["methods"].toArray(), expected); } { // signals QJsonArray expected; { QJsonArray signal; signal.append(QStringLiteral("destroyed")); signal.append(obj.metaObject()->indexOfMethod("destroyed(QObject*)")); expected.append(signal); } { QJsonArray signal; signal.append(QStringLiteral("sig1")); signal.append(obj.metaObject()->indexOfMethod("sig1()")); expected.append(signal); } { QJsonArray signal; signal.append(QStringLiteral("sig2")); signal.append(obj.metaObject()->indexOfMethod("sig2(QString)")); expected.append(signal); } QCOMPARE(info["signals"].toArray(), expected); } { // properties QJsonArray expected; { QJsonArray property; property.append(obj.metaObject()->indexOfProperty("objectName")); property.append(QStringLiteral("objectName")); { QJsonArray signal; signal.append(1); signal.append(obj.metaObject()->indexOfMethod("objectNameChanged(QString)")); property.append(signal); } property.append(obj.objectName()); expected.append(property); } { QJsonArray property; property.append(obj.metaObject()->indexOfProperty("foo")); property.append(QStringLiteral("foo")); { QJsonArray signal; property.append(signal); } property.append(obj.foo()); expected.append(property); } { QJsonArray property; property.append(obj.metaObject()->indexOfProperty("asdf")); property.append(QStringLiteral("asdf")); { QJsonArray signal; signal.append(1); signal.append(obj.metaObject()->indexOfMethod("asdfChanged()")); property.append(signal); } property.append(obj.asdf()); expected.append(property); } { QJsonArray property; property.append(obj.metaObject()->indexOfProperty("bar")); property.append(QStringLiteral("bar")); { QJsonArray signal; signal.append(QStringLiteral("theBarHasChanged")); signal.append(obj.metaObject()->indexOfMethod("theBarHasChanged()")); property.append(signal); } property.append(obj.bar()); expected.append(property); } QCOMPARE(info["properties"].toArray(), expected); } }