diff options
author | Jedrzej Nowacki <jedrzej.nowacki@nokia.com> | 2010-10-29 15:03:48 (GMT) |
---|---|---|
committer | Jedrzej Nowacki <jedrzej.nowacki@nokia.com> | 2010-11-01 08:01:03 (GMT) |
commit | 583e7b9bbbd0a35a40dd1f1d8b415db40601722f (patch) | |
tree | 95d8f374b63b6046ba81cb1546ef9384f5871c4a /tests/auto/qscriptvalue | |
parent | 06bc5e5e94958aa0e597b19c5a1b2a0a7c523cea (diff) | |
download | Qt-583e7b9bbbd0a35a40dd1f1d8b415db40601722f.zip Qt-583e7b9bbbd0a35a40dd1f1d8b415db40601722f.tar.gz Qt-583e7b9bbbd0a35a40dd1f1d8b415db40601722f.tar.bz2 |
Refactor tst_QScriptValue::getSetPrototype
The test was divided into separate cases, it should reduce maintenance
costs.
Reviewed-by: Kent Hansen
Diffstat (limited to 'tests/auto/qscriptvalue')
-rw-r--r-- | tests/auto/qscriptvalue/tst_qscriptvalue.cpp | 88 | ||||
-rw-r--r-- | tests/auto/qscriptvalue/tst_qscriptvalue.h | 5 |
2 files changed, 63 insertions, 30 deletions
diff --git a/tests/auto/qscriptvalue/tst_qscriptvalue.cpp b/tests/auto/qscriptvalue/tst_qscriptvalue.cpp index 112d768..5de0116 100644 --- a/tests/auto/qscriptvalue/tst_qscriptvalue.cpp +++ b/tests/auto/qscriptvalue/tst_qscriptvalue.cpp @@ -2262,50 +2262,78 @@ void tst_QScriptValue::arrayElementGetterSetter() QVERIFY(obj.propertyFlags("1") == 0); } -void tst_QScriptValue::getSetPrototype() +void tst_QScriptValue::getSetPrototype_cyclicPrototype() { QScriptEngine eng; - + QScriptValue prototype = eng.newObject(); QScriptValue object = eng.newObject(); + object.setPrototype(prototype); - QScriptValue object2 = eng.newObject(); - object2.setPrototype(object); + QScriptValue previousPrototype = prototype.prototype(); + QTest::ignoreMessage(QtWarningMsg, "QScriptValue::setPrototype() failed: cyclic prototype value"); + prototype.setPrototype(prototype); + QCOMPARE(prototype.prototype().strictlyEquals(previousPrototype), true); + + object.setPrototype(prototype); + QTest::ignoreMessage(QtWarningMsg, "QScriptValue::setPrototype() failed: cyclic prototype value"); + prototype.setPrototype(object); + QCOMPARE(prototype.prototype().strictlyEquals(previousPrototype), true); + +} + +void tst_QScriptValue::getSetPrototype_evalCyclicPrototype() +{ + QScriptEngine eng; + QScriptValue ret = eng.evaluate("o = { }; p = { }; o.__proto__ = p; p.__proto__ = o"); + QCOMPARE(eng.hasUncaughtException(), true); + QVERIFY(ret.strictlyEquals(eng.uncaughtException())); + QCOMPARE(ret.isError(), true); + QCOMPARE(ret.toString(), QLatin1String("Error: cyclic __proto__ value")); +} - QCOMPARE(object2.prototype().strictlyEquals(object), true); +void tst_QScriptValue::getSetPrototype_eval() +{ + QScriptEngine eng; + QScriptValue ret = eng.evaluate("p = { }; p.__proto__ = { }"); + QCOMPARE(eng.hasUncaughtException(), false); + QCOMPARE(ret.isError(), false); +} +void tst_QScriptValue::getSetPrototype_invalidPrototype() +{ + QScriptEngine eng; QScriptValue inv; + QScriptValue object = eng.newObject(); + QScriptValue proto = object.prototype(); + QVERIFY(object.prototype().strictlyEquals(proto)); inv.setPrototype(object); QCOMPARE(inv.prototype().isValid(), false); + object.setPrototype(inv); + // FIXME should it be invalid or proto? + QVERIFY(object.prototype().strictlyEquals(inv)); +} +void tst_QScriptValue::getSetPrototype_twoEngines() +{ + QScriptEngine eng; + QScriptValue prototype = eng.newObject(); + QScriptValue object = eng.newObject(); + object.setPrototype(prototype); QScriptEngine otherEngine; - QScriptValue object3 = otherEngine.newObject(); + QScriptValue newPrototype = otherEngine.newObject(); QTest::ignoreMessage(QtWarningMsg, "QScriptValue::setPrototype() failed: cannot set a prototype created in a different engine"); - object2.setPrototype(object3); - QCOMPARE(object2.prototype().strictlyEquals(object), true); - - // cyclic prototypes - QScriptValue old = object.prototype(); - QTest::ignoreMessage(QtWarningMsg, "QScriptValue::setPrototype() failed: cyclic prototype value"); - object.setPrototype(object); - QCOMPARE(object.prototype().strictlyEquals(old), true); + object.setPrototype(newPrototype); + QCOMPARE(object.prototype().strictlyEquals(prototype), true); - object2.setPrototype(object); - QTest::ignoreMessage(QtWarningMsg, "QScriptValue::setPrototype() failed: cyclic prototype value"); - object.setPrototype(object2); - QCOMPARE(object.prototype().strictlyEquals(old), true); +} - { - QScriptValue ret = eng.evaluate("o = { }; p = { }; o.__proto__ = p; p.__proto__ = o"); - QCOMPARE(eng.hasUncaughtException(), true); - QVERIFY(ret.strictlyEquals(eng.uncaughtException())); - QCOMPARE(ret.isError(), true); - QCOMPARE(ret.toString(), QLatin1String("Error: cyclic __proto__ value")); - } - { - QScriptValue ret = eng.evaluate("p.__proto__ = { }"); - QCOMPARE(eng.hasUncaughtException(), false); - QCOMPARE(ret.isError(), false); - } +void tst_QScriptValue::getSetPrototype() +{ + QScriptEngine eng; + QScriptValue prototype = eng.newObject(); + QScriptValue object = eng.newObject(); + object.setPrototype(prototype); + QCOMPARE(object.prototype().strictlyEquals(prototype), true); } void tst_QScriptValue::getSetScope() diff --git a/tests/auto/qscriptvalue/tst_qscriptvalue.h b/tests/auto/qscriptvalue/tst_qscriptvalue.h index 1e4bb6b..782fb67 100644 --- a/tests/auto/qscriptvalue/tst_qscriptvalue.h +++ b/tests/auto/qscriptvalue/tst_qscriptvalue.h @@ -109,6 +109,11 @@ private slots: void equals(); void strictlyEquals(); + void getSetPrototype_cyclicPrototype(); + void getSetPrototype_evalCyclicPrototype(); + void getSetPrototype_eval(); + void getSetPrototype_invalidPrototype(); + void getSetPrototype_twoEngines(); void getSetPrototype(); void getSetScope(); void getSetProperty_HooliganTask162051(); |