⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tst_qwebframe.cpp

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    QCOMPARE(evalJS("myObject.mySignal.disconnect(otherObject, myHandler)"), sUndefined);    evalJS("gotSignal = false");    m_myObject->emitMySignal();    QCOMPARE(evalJS("gotSignal"), sFalse);    {        QString type;        evalJS("myObject.mySignal.disconnect(otherObject, myHandler)", type);        QCOMPARE(type, sError);    }    QCOMPARE(evalJS("myObject.mySignal.connect(otherObject, myHandler)"), sUndefined);    evalJS("gotSignal = false");    m_myObject->emitMySignal();    QCOMPARE(evalJS("gotSignal"), sTrue);    QCOMPARE(evalJS("signalArgs.length == 0"), sTrue);    QCOMPARE(evalJS("slotThisObject"),evalJS("otherObject"));    QCOMPARE(evalJS("signalSender"),evalJS("myObject"));    QCOMPARE(evalJS("slotThisObject.name"), QLatin1String("foo"));    QCOMPARE(evalJS("myObject.mySignal.disconnect(otherObject, myHandler)"), sUndefined);    evalJS("yetAnotherObject = { name:'bar', func : function() { } }");    QCOMPARE(evalJS("myObject.mySignal2.connect(yetAnotherObject, myHandler)"), sUndefined);    evalJS("gotSignal = false");    m_myObject->emitMySignal2(true);    QCOMPARE(evalJS("gotSignal"), sTrue);    QCOMPARE(evalJS("signalArgs.length == 1"), sTrue);    QCOMPARE(evalJS("slotThisObject == yetAnotherObject"), sTrue);    QCOMPARE(evalJS("signalSender == myObject"), sTrue);    QCOMPARE(evalJS("slotThisObject.name"), QLatin1String("bar"));    QCOMPARE(evalJS("myObject.mySignal2.disconnect(yetAnotherObject, myHandler)"), sUndefined);    QCOMPARE(evalJS("myObject.mySignal2.connect(myObject, myHandler)"), sUndefined);    evalJS("gotSignal = false");    m_myObject->emitMySignal2(true);    QCOMPARE(evalJS("gotSignal"), sTrue);    QCOMPARE(evalJS("signalArgs.length == 1"), sTrue);    QCOMPARE(evalJS("slotThisObject == myObject"), sTrue);    QCOMPARE(evalJS("signalSender == myObject"), sTrue);    QCOMPARE(evalJS("myObject.mySignal2.disconnect(myObject, myHandler)"), sUndefined);    // connect(obj, string)    QCOMPARE(evalJS("myObject.mySignal.connect(yetAnotherObject, 'func')"), sUndefined);    QCOMPARE(evalJS("myObject.mySignal.connect(myObject, 'mySlot')"), sUndefined);    QCOMPARE(evalJS("myObject.mySignal.disconnect(yetAnotherObject, 'func')"), sUndefined);    QCOMPARE(evalJS("myObject.mySignal.disconnect(myObject, 'mySlot')"), sUndefined);    // check that emitting signals from script works    // no arguments    QCOMPARE(evalJS("myObject.mySignal.connect(myObject.mySlot)"), sUndefined);    m_myObject->resetQtFunctionInvoked();    QCOMPARE(evalJS("myObject.mySignal()"), sUndefined);    QCOMPARE(m_myObject->qtFunctionInvoked(), 20);    QCOMPARE(evalJS("myObject.mySignal.disconnect(myObject.mySlot)"), sUndefined);    // one argument    QCOMPARE(evalJS("myObject.mySignalWithIntArg.connect(myObject.mySlotWithIntArg)"), sUndefined);    m_myObject->resetQtFunctionInvoked();    QCOMPARE(evalJS("myObject.mySignalWithIntArg(123)"), sUndefined);    QCOMPARE(m_myObject->qtFunctionInvoked(), 21);    QCOMPARE(m_myObject->qtFunctionActuals().size(), 1);    QCOMPARE(m_myObject->qtFunctionActuals().at(0).toInt(), 123);    QCOMPARE(evalJS("myObject.mySignalWithIntArg.disconnect(myObject.mySlotWithIntArg)"), sUndefined);    QCOMPARE(evalJS("myObject.mySignalWithIntArg.connect(myObject.mySlotWithDoubleArg)"), sUndefined);    m_myObject->resetQtFunctionInvoked();    QCOMPARE(evalJS("myObject.mySignalWithIntArg(123)"), sUndefined);    QCOMPARE(m_myObject->qtFunctionInvoked(), 22);    QCOMPARE(m_myObject->qtFunctionActuals().size(), 1);    QCOMPARE(m_myObject->qtFunctionActuals().at(0).toDouble(), 123.0);    QCOMPARE(evalJS("myObject.mySignalWithIntArg.disconnect(myObject.mySlotWithDoubleArg)"), sUndefined);    QCOMPARE(evalJS("myObject.mySignalWithIntArg.connect(myObject.mySlotWithStringArg)"), sUndefined);    m_myObject->resetQtFunctionInvoked();    QCOMPARE(evalJS("myObject.mySignalWithIntArg(123)"), sUndefined);    QCOMPARE(m_myObject->qtFunctionInvoked(), 23);    QCOMPARE(m_myObject->qtFunctionActuals().size(), 1);    QCOMPARE(m_myObject->qtFunctionActuals().at(0).toString(), QLatin1String("123"));    QCOMPARE(evalJS("myObject.mySignalWithIntArg.disconnect(myObject.mySlotWithStringArg)"), sUndefined);    // connecting to overloaded slot    QCOMPARE(evalJS("myObject.mySignalWithIntArg.connect(myObject.myOverloadedSlot)"), sUndefined);    m_myObject->resetQtFunctionInvoked();    QCOMPARE(evalJS("myObject.mySignalWithIntArg(123)"), sUndefined);    QCOMPARE(m_myObject->qtFunctionInvoked(), 26); // double overload    QCOMPARE(m_myObject->qtFunctionActuals().size(), 1);    QCOMPARE(m_myObject->qtFunctionActuals().at(0).toInt(), 123);    QCOMPARE(evalJS("myObject.mySignalWithIntArg.disconnect(myObject.myOverloadedSlot)"), sUndefined);    QCOMPARE(evalJS("myObject.mySignalWithIntArg.connect(myObject['myOverloadedSlot(int)'])"), sUndefined);    m_myObject->resetQtFunctionInvoked();    QCOMPARE(evalJS("myObject.mySignalWithIntArg(456)"), sUndefined);    QCOMPARE(m_myObject->qtFunctionInvoked(), 28); // int overload    QCOMPARE(m_myObject->qtFunctionActuals().size(), 1);    QCOMPARE(m_myObject->qtFunctionActuals().at(0).toInt(), 456);    QCOMPARE(evalJS("myObject.mySignalWithIntArg.disconnect(myObject['myOverloadedSlot(int)'])"), sUndefined);    // erroneous input    {        // ### QtScript adds .connect to all functions, WebKit does only to signals/slots        QString type;        QString ret = evalJS("(function() { }).connect()", type);        QCOMPARE(type, sError);        QCOMPARE(ret, QLatin1String("TypeError: Result of expression '(function() { }).connect' [undefined] is not a function."));    }    {        QString type;        QString ret = evalJS("var o = { }; o.connect = Function.prototype.connect;  o.connect()", type);        QCOMPARE(type, sError);        QCOMPARE(ret, QLatin1String("TypeError: Result of expression 'o.connect' [undefined] is not a function."));    }    {        QString type;        QString ret = evalJS("(function() { }).connect(123)", type);        QCOMPARE(type, sError);        QCOMPARE(ret, QLatin1String("TypeError: Result of expression '(function() { }).connect' [undefined] is not a function."));    }    {        QString type;        QString ret = evalJS("var o = { }; o.connect = Function.prototype.connect;  o.connect(123)", type);        QCOMPARE(type, sError);        QCOMPARE(ret, QLatin1String("TypeError: Result of expression 'o.connect' [undefined] is not a function."));    }    {        QString type;        QString ret = evalJS("myObject.myInvokable.connect(123)", type);        QCOMPARE(type, sError);        QCOMPARE(ret, QLatin1String("TypeError: QtMetaMethod.connect: MyQObject::myInvokable() is not a signal"));    }    {        QString type;        QString ret = evalJS("myObject.myInvokable.connect(function() { })", type);        QCOMPARE(type, sError);        QCOMPARE(ret, QLatin1String("TypeError: QtMetaMethod.connect: MyQObject::myInvokable() is not a signal"));    }    {        QString type;        QString ret = evalJS("myObject.mySignal.connect(123)", type);        QCOMPARE(type, sError);        QCOMPARE(ret, QLatin1String("TypeError: QtMetaMethod.connect: target is not a function"));    }    {        QString type;        QString ret = evalJS("myObject.mySignal.disconnect()", type);        QCOMPARE(type, sError);        QCOMPARE(ret, QLatin1String("Error: QtMetaMethod.disconnect: no arguments given"));    }    {        QString type;        QString ret = evalJS("var o = { }; o.disconnect = myObject.mySignal.disconnect;  o.disconnect()", type);        QCOMPARE(type, sError);        QCOMPARE(ret, QLatin1String("Error: QtMetaMethod.disconnect: no arguments given"));    }    /* XFAIL - Function.prototype doesn't get connect/disconnect, just signals/slots    {        QString type;        QString ret = evalJS("(function() { }).disconnect(123)", type);        QCOMPARE(type, sError);        QCOMPARE(ret, QLatin1String("TypeError: QtMetaMethod.disconnect: this object is not a signal"));    }    */    {        QString type;        QString ret = evalJS("var o = { }; o.disconnect = myObject.myInvokable.disconnect; o.disconnect(123)", type);        QCOMPARE(type, sError);        QCOMPARE(ret, QLatin1String("TypeError: QtMetaMethod.disconnect: MyQObject::myInvokable() is not a signal"));    }    {        QString type;        QString ret = evalJS("myObject.myInvokable.disconnect(123)", type);        QCOMPARE(type, sError);        QCOMPARE(ret, QLatin1String("TypeError: QtMetaMethod.disconnect: MyQObject::myInvokable() is not a signal"));    }    {        QString type;        QString ret = evalJS("myObject.myInvokable.disconnect(function() { })", type);        QCOMPARE(type, sError);        QCOMPARE(ret, QLatin1String("TypeError: QtMetaMethod.disconnect: MyQObject::myInvokable() is not a signal"));    }    {        QString type;        QString ret = evalJS("myObject.mySignal.disconnect(123)", type);        QCOMPARE(type, sError);        QCOMPARE(ret, QLatin1String("TypeError: QtMetaMethod.disconnect: target is not a function"));    }    {        QString type;        QString ret = evalJS("myObject.mySignal.disconnect(function() { })", type);        QCOMPARE(type, sError);        QCOMPARE(ret, QLatin1String("Error: QtMetaMethod.disconnect: failed to disconnect from MyQObject::mySignal()"));    }    // when the wrapper dies, the connection stays alive    QCOMPARE(evalJS("myObject.mySignal.connect(myObject.mySlot)"), sUndefined);    m_myObject->resetQtFunctionInvoked();    m_myObject->emitMySignal();    QCOMPARE(m_myObject->qtFunctionInvoked(), 20);    evalJS("myObject = null");    evalJS("gc()");    m_myObject->resetQtFunctionInvoked();    m_myObject->emitMySignal();    QCOMPARE(m_myObject->qtFunctionInvoked(), 20);}void tst_QWebFrame::classEnums(){    // We don't do the meta thing currently, unfortunately!!!    /*    QString myClass = m_engine->newQMetaObject(m_myObject->metaObject(), m_engine->undefinedValue());    m_engine->globalObject().setProperty("MyQObject", myClass);    QCOMPARE(static_cast<MyQObject::Policy>(evalJS("MyQObject.FooPolicy").toInt()),             MyQObject::FooPolicy);    QCOMPARE(static_cast<MyQObject::Policy>(evalJS("MyQObject.BarPolicy").toInt()),             MyQObject::BarPolicy);    QCOMPARE(static_cast<MyQObject::Policy>(evalJS("MyQObject.BazPolicy").toInt()),             MyQObject::BazPolicy);    QCOMPARE(static_cast<MyQObject::Strategy>(evalJS("MyQObject.FooStrategy").toInt()),             MyQObject::FooStrategy);    QCOMPARE(static_cast<MyQObject::Strategy>(evalJS("MyQObject.BarStrategy").toInt()),             MyQObject::BarStrategy);    QCOMPARE(static_cast<MyQObject::Strategy>(evalJS("MyQObject.BazStrategy").toInt()),             MyQObject::BazStrategy);    QCOMPARE(MyQObject::Ability(evalJS("MyQObject.NoAbility").toInt()),             MyQObject::NoAbility);    QCOMPARE(MyQObject::Ability(evalJS("MyQObject.FooAbility").toInt()),             MyQObject::FooAbility);    QCOMPARE(MyQObject::Ability(evalJS("MyQObject.BarAbility").toInt()),             MyQObject::BarAbility);    QCOMPARE(MyQObject::Ability(evalJS("MyQObject.BazAbility").toInt()),             MyQObject::BazAbility);    QCOMPARE(MyQObject::Ability(evalJS("MyQObject.AllAbility").toInt()),             MyQObject::AllAbility);    // enums from Qt are inherited through prototype    QCOMPARE(static_cast<Qt::FocusPolicy>(evalJS("MyQObject.StrongFocus").toInt()),             Qt::StrongFocus);    QCOMPARE(static_cast<Qt::Key>(evalJS("MyQObject.Key_Left").toInt()),             Qt::Key_Left);    QCOMPARE(evalJS("MyQObject.className()"), QLatin1String("MyQObject"));    qRegisterMetaType<MyQObject::Policy>("Policy");    m_myObject->resetQtFunctionInvoked();    QCOMPARE(evalJS("myObject.myInvokableWithEnumArg(MyQObject.BazPolicy)"), sUndefined);    QCOMPARE(m_myObject->qtFunctionInvoked(), 10);    QCOMPARE(m_myObject->qtFunctionActuals().size(), 1);    QCOMPARE(m_myObject->qtFunctionActuals().at(0).toInt(), int(MyQObject::BazPolicy));    m_myObject->resetQtFunctionInvoked();    QCOMPARE(evalJS("myObject.myInvokableWithQualifiedEnumArg(MyQObject.BazPolicy)"), sUndefined);    QCOMPARE(m_myObject->qtFunctionInvoked(), 36);    QCOMPARE(m_myObject->qtFunctionActuals().size(), 1);    QCOMPARE(m_myObject->qtFunctionActuals().at(0).toInt(), int(MyQObject::BazPolicy));    m_myObject->resetQtFunctionInvoked();    {        QVariant ret = evalJS("myObject.myInvokableReturningEnum()");        QCOMPARE(m_myObject->qtFunctionInvoked(), 37);        QCOMPARE(m_myObject->qtFunctionActuals().size(), 0);        QCOMPARE(ret.isVariant());    }    m_myObject->resetQtFunctionInvoked();    {        QVariant ret = evalJS("myObject.myInvokableReturningQualifiedEnum()");        QCOMPARE(m_myObject->qtFunctionInvoked(), 38);        QCOMPARE(m_myObject->qtFunctionActuals().size(), 0);        QCOMPARE(ret.isNumber());    }    */}void tst_QWebFrame::classConstructor(){    /*    QString myClass = qScriptValueFromQMetaObject<MyQObject>(m_engine);    m_engine->globalObject().setProperty("MyQObject", myClass);    QString myObj = evalJS("myObj = MyQObject()");    QObject* qobj = myObj.toQObject();    QVERIFY(qobj != 0);    QCOMPARE(qobj->metaObject()->className(), "MyQObject");    QCOMPARE(qobj->parent(), (QObject*)0);    QString qobjectClass = qScriptValueFromQMetaObject<QObject>(m_engine);    m_engine->globalObject().setProperty("QObject", qobjectClass);    QString otherObj = evalJS("otherObj = QObject(myObj)");    QObject* qqobj = otherObj.toQObject();    QVERIFY(qqobj != 0);    QCOMPARE(qqobj->metaObject()->className(), "QObject");    QCOMPARE(qqobj->parent(), qobj);    delete qobj;    */}void tst_QWebFrame::overrideInvokable(){    m_myObject->resetQtFunctionInvoked();    QCOMPARE(evalJS("myObject.myInvokable()"), sUndefined);    QCOMPARE(m_myObject->qtFunctionInvoked(), 0);    /* XFAIL - can't write to functions with RuntimeObject    m_myObject->resetQtFunctionInvoked();    evalJS("myObject.myInvokable = function() { window.a = 123; }");    evalJS("myObject.myInvokable()");    QCOMPARE(m_myObject->qtFunctionInvoked(), -1);    QCOMPARE(evalJS("window.a").toDouble(), 123.0);    evalJS("myObject.myInvokable = function() { window.a = 456; }");    evalJS("myObject.myInvokable()");    QCOMPARE(m_myObject->qtFunctionInvoked(), -1);    QCOMPARE(evalJS("window.a").toDouble(), 456.0);    */    evalJS("delete myObject.myInvokable");    evalJS("myObject.myInvokable()");    QCOMPARE(m_myObject->qtFunctionInvoked(), 0);    /* XFAIL - ditto    m_myObject->resetQtFunctionInvoked();    evalJS("myObject.myInvokable = myObject.myInvokableWithIntArg");    evalJS("myObject.myInvokable(123)");    QCOMPARE(m_myObject->qtFunctionInvoked(), 1);    */    evalJS("delete myObject.myInvokable");    m_myObject->resetQtFunctionInvoked();    // this form (with the '()') is read-only    evalJS("myObje

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -