diff options
author | Kent Hansen <khansen@trolltech.com> | 2009-07-16 09:06:45 (GMT) |
---|---|---|
committer | Kent Hansen <khansen@trolltech.com> | 2009-07-16 09:06:45 (GMT) |
commit | fa7b011149589cd5dbcd4bd080a72bfaa3297d66 (patch) | |
tree | 8666b3b6f738f36be5787fb02bfa00ee782cc044 /tests/auto | |
parent | 611fb06def195d2f660be25bbe0fc312b0259787 (diff) | |
download | Qt-fa7b011149589cd5dbcd4bd080a72bfaa3297d66.zip Qt-fa7b011149589cd5dbcd4bd080a72bfaa3297d66.tar.gz Qt-fa7b011149589cd5dbcd4bd080a72bfaa3297d66.tar.bz2 |
add autotest for Global Object properties
Diffstat (limited to 'tests/auto')
-rw-r--r-- | tests/auto/qscriptengine/tst_qscriptengine.cpp | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/tests/auto/qscriptengine/tst_qscriptengine.cpp b/tests/auto/qscriptengine/tst_qscriptengine.cpp index 6e1c7f5..bc068cb 100644 --- a/tests/auto/qscriptengine/tst_qscriptengine.cpp +++ b/tests/auto/qscriptengine/tst_qscriptengine.cpp @@ -78,6 +78,7 @@ private slots: void newQMetaObject(); void newActivationObject(); void getSetGlobalObject(); + void globalObjectProperties(); void checkSyntax_data(); void checkSyntax(); void canEvaluate_data(); @@ -913,6 +914,150 @@ void tst_QScriptEngine::getSetGlobalObject() QVERIFY(eng.currentContext()->activationObject().strictlyEquals(obj)); } +void tst_QScriptEngine::globalObjectProperties() +{ + QScriptEngine eng; + QScriptValue global = eng.globalObject(); + + QVERIFY(global.property("NaN").isNumber()); + QVERIFY(qIsNaN(global.property("NaN").toNumber())); + QCOMPARE(global.propertyFlags("NaN"), QScriptValue::SkipInEnumeration | QScriptValue::Undeletable); + + QVERIFY(global.property("Infinity").isNumber()); + QVERIFY(qIsInf(global.property("Infinity").toNumber())); + QCOMPARE(global.propertyFlags("NaN"), QScriptValue::SkipInEnumeration | QScriptValue::Undeletable); + + QVERIFY(global.property("undefined").isUndefined()); + QCOMPARE(global.propertyFlags("undefined"), QScriptValue::SkipInEnumeration | QScriptValue::Undeletable); + + QVERIFY(global.property("eval").isFunction()); + QCOMPARE(global.propertyFlags("eval"), QScriptValue::SkipInEnumeration); + + QVERIFY(global.property("parseInt").isFunction()); + QCOMPARE(global.propertyFlags("parseInt"), QScriptValue::SkipInEnumeration); + + QVERIFY(global.property("parseFloat").isFunction()); + QCOMPARE(global.propertyFlags("parseFloat"), QScriptValue::SkipInEnumeration); + + QVERIFY(global.property("isNaN").isFunction()); + QCOMPARE(global.propertyFlags("isNaN"), QScriptValue::SkipInEnumeration); + + QVERIFY(global.property("isFinite").isFunction()); + QCOMPARE(global.propertyFlags("isFinite"), QScriptValue::SkipInEnumeration); + + QVERIFY(global.property("decodeURI").isFunction()); + QCOMPARE(global.propertyFlags("decodeURI"), QScriptValue::SkipInEnumeration); + + QVERIFY(global.property("decodeURIComponent").isFunction()); + QCOMPARE(global.propertyFlags("decodeURIComponent"), QScriptValue::SkipInEnumeration); + + QVERIFY(global.property("encodeURI").isFunction()); + QCOMPARE(global.propertyFlags("encodeURI"), QScriptValue::SkipInEnumeration); + + QVERIFY(global.property("encodeURIComponent").isFunction()); + QCOMPARE(global.propertyFlags("encodeURIComponent"), QScriptValue::SkipInEnumeration); + + QVERIFY(global.property("Object").isFunction()); + QCOMPARE(global.propertyFlags("Object"), QScriptValue::SkipInEnumeration); + QVERIFY(global.property("Function").isFunction()); + QCOMPARE(global.propertyFlags("Function"), QScriptValue::SkipInEnumeration); + QVERIFY(global.property("Array").isFunction()); + QCOMPARE(global.propertyFlags("Array"), QScriptValue::SkipInEnumeration); + QVERIFY(global.property("String").isFunction()); + QCOMPARE(global.propertyFlags("String"), QScriptValue::SkipInEnumeration); + QVERIFY(global.property("Boolean").isFunction()); + QCOMPARE(global.propertyFlags("Boolean"), QScriptValue::SkipInEnumeration); + QVERIFY(global.property("Number").isFunction()); + QCOMPARE(global.propertyFlags("Number"), QScriptValue::SkipInEnumeration); + QVERIFY(global.property("Date").isFunction()); + QCOMPARE(global.propertyFlags("Date"), QScriptValue::SkipInEnumeration); + QVERIFY(global.property("RegExp").isFunction()); + QCOMPARE(global.propertyFlags("RegExp"), QScriptValue::SkipInEnumeration); + QVERIFY(global.property("Error").isFunction()); + QCOMPARE(global.propertyFlags("Error"), QScriptValue::SkipInEnumeration); + QVERIFY(global.property("EvalError").isFunction()); + QEXPECT_FAIL("", "JSC doesn't set DontEnum flag for Error constructors", Continue); + QCOMPARE(global.propertyFlags("EvalError"), QScriptValue::SkipInEnumeration); + QVERIFY(global.property("RangeError").isFunction()); + QEXPECT_FAIL("", "JSC doesn't set DontEnum flag for Error constructors", Continue); + QCOMPARE(global.propertyFlags("RangeError"), QScriptValue::SkipInEnumeration); + QVERIFY(global.property("ReferenceError").isFunction()); + QEXPECT_FAIL("", "JSC doesn't set DontEnum flag for Error constructors", Continue); + QCOMPARE(global.propertyFlags("ReferenceError"), QScriptValue::SkipInEnumeration); + QVERIFY(global.property("SyntaxError").isFunction()); + QEXPECT_FAIL("", "JSC doesn't set DontEnum flag for Error constructors", Continue); + QCOMPARE(global.propertyFlags("SyntaxError"), QScriptValue::SkipInEnumeration); + QVERIFY(global.property("TypeError").isFunction()); + QEXPECT_FAIL("", "JSC doesn't set DontEnum flag for Error constructors", Continue); + QCOMPARE(global.propertyFlags("TypeError"), QScriptValue::SkipInEnumeration); + QVERIFY(global.property("URIError").isFunction()); + QEXPECT_FAIL("", "JSC doesn't set DontEnum flag for Error constructors", Continue); + QCOMPARE(global.propertyFlags("URIError"), QScriptValue::SkipInEnumeration); + QVERIFY(global.property("Math").isObject()); + QVERIFY(!global.property("Math").isFunction()); + QEXPECT_FAIL("", "JSC sets DontDelete flag for Math object", Continue); + QCOMPARE(global.propertyFlags("Math"), QScriptValue::SkipInEnumeration); + + // enumeration + QSet<QString> expectedNames; + expectedNames + << "isNaN" + << "parseFloat" + << "String" + << "EvalError" + << "URIError" + << "Math" + << "encodeURIComponent" + << "RangeError" + << "eval" + << "isFinite" + << "ReferenceError" + << "Infinity" + << "Function" + << "RegExp" + << "Number" + << "parseInt" + << "Object" + << "decodeURI" + << "TypeError" + << "Boolean" + << "encodeURI" + << "NaN" + << "Error" + << "decodeURIComponent" + << "Date" + << "Array" + << "escape" + << "unescape" + << "SyntaxError" + << "undefined" + // non-standard + << "gc" + << "version" + << "print" + ; + QSet<QString> actualNames; + { + QScriptValueIterator it(global); + while (it.hasNext()) { + it.next(); + actualNames.insert(it.name()); + } + } + QSet<QString> remainingNames = actualNames; + { + QSet<QString>::const_iterator it; + for (it = expectedNames.constBegin(); it != expectedNames.constEnd(); ++it) { + QString name = *it; + if (!actualNames.contains(name)) + QEXPECT_FAIL("", "JSC getPropertyNames() doesn't include DontEnum properties", Abort); + QVERIFY(actualNames.contains(name)); + remainingNames.remove(name); + } + } + QVERIFY(remainingNames.isEmpty()); +} + void tst_QScriptEngine::checkSyntax_data() { QTest::addColumn<QString>("code"); |