diff options
Diffstat (limited to 'tests/auto/qml/qjsengine/tst_qjsengine.cpp')
-rw-r--r-- | tests/auto/qml/qjsengine/tst_qjsengine.cpp | 37 |
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" |