summaryrefslogtreecommitdiffstats
path: root/tests/auto/qscriptengine/tst_qscriptengine.cpp
diff options
context:
space:
mode:
authorKent Hansen <khansen@trolltech.com>2009-07-16 11:06:45 +0200
committerKent Hansen <khansen@trolltech.com>2009-07-16 11:06:45 +0200
commitfa7b011149589cd5dbcd4bd080a72bfaa3297d66 (patch)
tree8666b3b6f738f36be5787fb02bfa00ee782cc044 /tests/auto/qscriptengine/tst_qscriptengine.cpp
parent611fb06def195d2f660be25bbe0fc312b0259787 (diff)
add autotest for Global Object properties
Diffstat (limited to 'tests/auto/qscriptengine/tst_qscriptengine.cpp')
-rw-r--r--tests/auto/qscriptengine/tst_qscriptengine.cpp145
1 files changed, 145 insertions, 0 deletions
diff --git a/tests/auto/qscriptengine/tst_qscriptengine.cpp b/tests/auto/qscriptengine/tst_qscriptengine.cpp
index 6e1c7f53a3..bc068cbc9c 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");