summaryrefslogtreecommitdiffstats
path: root/tests/auto/qscriptvalue
diff options
context:
space:
mode:
authorJedrzej Nowacki <jedrzej.nowacki@nokia.com>2010-10-29 15:03:48 (GMT)
committerJedrzej Nowacki <jedrzej.nowacki@nokia.com>2010-11-01 08:01:03 (GMT)
commit583e7b9bbbd0a35a40dd1f1d8b415db40601722f (patch)
tree95d8f374b63b6046ba81cb1546ef9384f5871c4a /tests/auto/qscriptvalue
parent06bc5e5e94958aa0e597b19c5a1b2a0a7c523cea (diff)
downloadQt-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.cpp88
-rw-r--r--tests/auto/qscriptvalue/tst_qscriptvalue.h5
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();