diff options
author | Kent Hansen <kent.hansen@nokia.com> | 2011-08-25 12:51:03 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-08-26 07:54:35 +0200 |
commit | 46af4afe0cfd3afddfe204913b5012be7369870f (patch) | |
tree | 7bdc8422d33621127517109bbb66ff0f9536ee84 /tests | |
parent | 6dd1ab81e1c7943053feea321b6f7774b688ee5d (diff) |
Don't enumerate Function.prototype.{connect,disconnect}
QML/JS adds connect and disconnect methods to the standard
Function.prototype object.
Follow the convention of ECMA-262: Function properties should
be non-enumerable.
In particular, we don't want such built-in properties to show
up in user code "for-in" statements.
Task-number: QTBUG-21120
Change-Id: I416106badf35daddf32e16f757d37b2b09e58310
Reviewed-on: http://codereview.qt.nokia.com/3587
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/declarative/qjsengine/tst_qjsengine.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/tests/auto/declarative/qjsengine/tst_qjsengine.cpp b/tests/auto/declarative/qjsengine/tst_qjsengine.cpp index d2f4b3b6ac..a6b4251c36 100644 --- a/tests/auto/declarative/qjsengine/tst_qjsengine.cpp +++ b/tests/auto/declarative/qjsengine/tst_qjsengine.cpp @@ -325,6 +325,7 @@ private slots: void dateRoundtripQtJSQt(); void dateConversionJSQt(); void dateConversionQtJS(); + void functionPrototypeExtensions(); }; tst_QJSEngine::tst_QJSEngine() @@ -6478,6 +6479,24 @@ void tst_QJSEngine::scriptValueFromQMetaObject() } #endif +void tst_QJSEngine::functionPrototypeExtensions() +{ + // QJS adds connect and disconnect properties to Function.prototype. + QJSEngine eng; + QJSValue funProto = eng.globalObject().property("Function").property("prototype"); + QVERIFY(funProto.isFunction()); + QVERIFY(funProto.property("connect").isFunction()); + QCOMPARE(funProto.propertyFlags("connect"), QJSValue::SkipInEnumeration); + QVERIFY(funProto.property("disconnect").isFunction()); + QCOMPARE(funProto.propertyFlags("disconnect"), QJSValue::SkipInEnumeration); + + // No properties should appear in for-in statements. + QJSValue props = eng.evaluate("props = []; for (var p in Function.prototype) props.push(p); props"); + QVERIFY(!eng.hasUncaughtException()); + QVERIFY(props.isArray()); + QCOMPARE(props.property("length").toInt32(), 0); +} + QTEST_MAIN(tst_QJSEngine) #include "tst_qjsengine.moc" |