Changeset 63318 in webkit for trunk/JavaScriptCore/qt/tests


Ignore:
Timestamp:
Jul 14, 2010, 7:35:08 AM (15 years ago)
Author:
[email protected]
Message:

2010-07-14 Jedrzej Nowacki <[email protected]>

Reviewed by Kenneth Rohde Christiansen.

Introduce QScriptOriginalGlobalObject.

QtScript exposes more functionality than JSC C API. Sometimes it is
necessary to take a shortcut in implementation. Really often we have
to use a standard JS function. These function could be changed or
even deleted by a script, so a backup of a reference to an object is needed.

In them same time this is rather a workaround then real fix, so the code
should be separated and changed easily in future. It is why we need
the new internal class.

The patch fixes a few crashes.

[Qt] QScriptEngine should work correctly even after global object changes
https://bugs.webkit.org/show_bug.cgi?id=41839

  • api/QtScript.pro:
  • api/qscriptengine_p.cpp: (QScriptEnginePrivate::QScriptEnginePrivate): (QScriptEnginePrivate::~QScriptEnginePrivate):
  • api/qscriptengine_p.h: (QScriptEnginePrivate::isArray): (QScriptEnginePrivate::isError): (QScriptEnginePrivate::objectHasOwnProperty): (QScriptEnginePrivate::objectGetOwnPropertyNames):
  • api/qscriptoriginalglobalobject_p.h: Added. (QScriptOriginalGlobalObject::QScriptOriginalGlobalObject): (QScriptOriginalGlobalObject::initializeMember): (QScriptOriginalGlobalObject::~QScriptOriginalGlobalObject): (QScriptOriginalGlobalObject::objectHasOwnProperty): (QScriptOriginalGlobalObject::objectGetOwnPropertyNames): (QScriptOriginalGlobalObject::isArray): (QScriptOriginalGlobalObject::isError): (QScriptOriginalGlobalObject::isType):
  • api/qscriptvalue_p.h: (QScriptValuePrivate::isError): (QScriptValuePrivate::hasOwnProperty):
  • api/qscriptvalueiterator_p.h: (QScriptValueIteratorPrivate::QScriptValueIteratorPrivate):
  • tests/qscriptvalue/tst_qscriptvalue.cpp: (tst_QScriptValue::globalObjectChanges):
  • tests/qscriptvalue/tst_qscriptvalue.h:
Location:
trunk/JavaScriptCore/qt/tests/qscriptvalue
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/qt/tests/qscriptvalue/tst_qscriptvalue.cpp

    r62921 r63318  
    12621262}
    12631263
     1264void tst_QScriptValue::globalObjectChanges()
     1265{
     1266    // API functionality shouldn't depend on Global Object.
     1267    QScriptEngine engine;
     1268    QScriptValue array = engine.newArray();
     1269    QScriptValue error = engine.evaluate("new Error");
     1270    QScriptValue object = engine.newObject();
     1271
     1272    object.setProperty("foo", 512);
     1273
     1274    // Remove properties form global object.
     1275    engine.evaluate("delete Object; delete Error; delete Array;");
     1276
     1277    QVERIFY(array.isArray());
     1278    QVERIFY(error.isError());
     1279    QVERIFY(object.isObject());
     1280
     1281    QVERIFY(object.property("foo").isValid());
     1282    QVERIFY(object.property("foo", QScriptValue::ResolveLocal).isValid());
     1283    object.setProperty("foo", QScriptValue());
     1284    QVERIFY(!object.property("foo").isValid());
     1285    QVERIFY(!object.property("foo", QScriptValue::ResolveLocal).isValid());
     1286}
     1287
    12641288QTEST_MAIN(tst_QScriptValue)
  • trunk/JavaScriptCore/qt/tests/qscriptvalue/tst_qscriptvalue.h

    r62921 r63318  
    6161    void propertyFlag_data();
    6262    void propertyFlag();
     63    void globalObjectChanges();
    6364
    6465    // Generated test functions.
Note: See TracChangeset for help on using the changeset viewer.