aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/qml/qjsengine/tst_qjsengine.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2014-06-24 12:05:35 +0200
committerSimon Hausmann <simon.hausmann@digia.com>2014-06-24 16:48:18 +0200
commitcf93acbee66db96a6f7fab8607432b70ec5c0437 (patch)
treec99629d115d1dd54022c6827ff666b77e621864d /tests/auto/qml/qjsengine/tst_qjsengine.cpp
parent745a71196c8893a35a80a679674bee396606f79b (diff)
Exclude private methods and QObject::deleteLater from enumerable properties
This is a regression from Qt 5.1/5.0 introduced with 5.2. Private slots/methods such as QObject::_q_reRegisterTimers() as well as QObject::deleteLater() are not suitable for calls from JavaScript. deleteLater() in particular is covered by the destroy() replacement slot. Task-number: QTBUG-39744 Change-Id: I9b25f3c0d4095ba8e2e8e5ee47e37903b5def1f9 Reviewed-by: Michael Brasser <michael.brasser@live.com>
Diffstat (limited to 'tests/auto/qml/qjsengine/tst_qjsengine.cpp')
-rw-r--r--tests/auto/qml/qjsengine/tst_qjsengine.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/tests/auto/qml/qjsengine/tst_qjsengine.cpp b/tests/auto/qml/qjsengine/tst_qjsengine.cpp
index feef9d27f8..8a1bedb600 100644
--- a/tests/auto/qml/qjsengine/tst_qjsengine.cpp
+++ b/tests/auto/qml/qjsengine/tst_qjsengine.cpp
@@ -178,6 +178,8 @@ private slots:
void translateScriptUnicodeIdBased();
void translateFromBuiltinCallback();
+ void privateMethods();
+
signals:
void testSignal();
};
@@ -3548,6 +3550,41 @@ void tst_QJSEngine::translateFromBuiltinCallback()
eng.evaluate("[10,20].forEach(foo)", "script.js");
}
+class ObjectWithPrivateMethods : public QObject
+{
+ Q_OBJECT
+private slots:
+ void myPrivateMethod() {}
+};
+
+void tst_QJSEngine::privateMethods()
+{
+ ObjectWithPrivateMethods object;
+ QJSEngine engine;
+ QJSValue jsWrapper = engine.newQObject(&object);
+ QQmlEngine::setObjectOwnership(&object, QQmlEngine::CppOwnership);
+
+ QSet<QString> privateMethods;
+ {
+ const QMetaObject *mo = object.metaObject();
+ for (int i = 0; i < mo->methodCount(); ++i) {
+ const QMetaMethod method = mo->method(i);
+ if (method.access() == QMetaMethod::Private)
+ privateMethods << QString::fromUtf8(method.name());
+ }
+ }
+
+ QVERIFY(privateMethods.contains("myPrivateMethod"));
+ QVERIFY(privateMethods.contains("_q_reregisterTimers"));
+ privateMethods << QStringLiteral("deleteLater") << QStringLiteral("destroyed");
+
+ QJSValueIterator it(jsWrapper);
+ while (it.hasNext()) {
+ it.next();
+ QVERIFY(!privateMethods.contains(it.name()));
+ }
+}
+
QTEST_MAIN(tst_QJSEngine)
#include "tst_qjsengine.moc"