diff options
author | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2013-01-04 12:48:06 +0100 |
---|---|---|
committer | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2013-01-04 12:48:06 +0100 |
commit | 5d150f63e1a188414e4951c4b6e4c7c474d9b4e6 (patch) | |
tree | d249fdfd8480b367ad238b62602f48254dceda11 /tests/auto/qml/qqmlecmascript | |
parent | 63064c7ed7a23c1749ed7f58d55b680190dc01c4 (diff) | |
parent | ef92d6f8ef649fdaf50c123c6ca978b6db6892f6 (diff) |
Merge branch 'stable' into dev
Conflicts:
src/qml/qml/parser/qqmljskeywords_p.h
sync.profile
tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
Change-Id: I9bc6659e1bab924009167bec567354d40a77a8cb
Diffstat (limited to 'tests/auto/qml/qqmlecmascript')
-rw-r--r-- | tests/auto/qml/qqmlecmascript/testtypes.h | 2 | ||||
-rw-r--r-- | tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp | 112 |
2 files changed, 61 insertions, 53 deletions
diff --git a/tests/auto/qml/qqmlecmascript/testtypes.h b/tests/auto/qml/qqmlecmascript/testtypes.h index aa00115f5e..e0f5317945 100644 --- a/tests/auto/qml/qqmlecmascript/testtypes.h +++ b/tests/auto/qml/qqmlecmascript/testtypes.h @@ -285,6 +285,7 @@ private: int m_intProperty; Qt::MouseButtons m_buttons; }; +Q_DECLARE_METATYPE(QQmlListProperty<MyQmlObject>) QML_DECLARE_TYPEINFO(MyQmlObject, QML_HAS_ATTACHED_PROPERTIES) @@ -696,7 +697,6 @@ public: } }; -Q_DECLARE_METATYPE(QJSValue); class MyInvokableBaseObject : public QObject { Q_OBJECT diff --git a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp index 852c0ef4b5..23454ecd6d 100644 --- a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp +++ b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp @@ -290,6 +290,7 @@ private slots: private: static void propertyVarWeakRefCallback(v8::Persistent<v8::Value> object, void* parameter); + static void verifyContextLifetime(QQmlContextData *ctxt); QQmlEngine engine; }; @@ -1924,27 +1925,18 @@ void tst_qqmlecmascript::compileInvalidBinding() delete object; } -static int transientErrorsMsgCount = 0; -static void transientErrorsMsgHandler(QtMsgType, const QMessageLogContext &, const QString &) -{ - ++transientErrorsMsgCount; -} - // Check that transient binding errors are not displayed void tst_qqmlecmascript::transientErrors() { { QQmlComponent component(&engine, testFileUrl("transientErrors.qml")); - transientErrorsMsgCount = 0; - QtMessageHandler old = qInstallMessageHandler(transientErrorsMsgHandler); + QQmlTestMessageHandler messageHandler; QObject *object = component.create(); QVERIFY(object != 0); - qInstallMessageHandler(old); - - QCOMPARE(transientErrorsMsgCount, 0); + QVERIFY2(messageHandler.messages().isEmpty(), qPrintable(messageHandler.messageString())); delete object; } @@ -1953,15 +1945,12 @@ void tst_qqmlecmascript::transientErrors() { QQmlComponent component(&engine, testFileUrl("transientErrors.2.qml")); - transientErrorsMsgCount = 0; - QtMessageHandler old = qInstallMessageHandler(transientErrorsMsgHandler); + QQmlTestMessageHandler messageHandler; QObject *object = component.create(); QVERIFY(object != 0); - qInstallMessageHandler(old); - - QCOMPARE(transientErrorsMsgCount, 0); + QVERIFY2(messageHandler.messages().isEmpty(), qPrintable(messageHandler.messageString())); delete object; } @@ -1974,13 +1963,11 @@ void tst_qqmlecmascript::shutdownErrors() QObject *object = component.create(); QVERIFY(object != 0); - transientErrorsMsgCount = 0; - QtMessageHandler old = qInstallMessageHandler(transientErrorsMsgHandler); + QQmlTestMessageHandler messageHandler; delete object; - qInstallMessageHandler(old); - QCOMPARE(transientErrorsMsgCount, 0); + QVERIFY2(messageHandler.messages().isEmpty(), qPrintable(messageHandler.messageString())); } void tst_qqmlecmascript::compositePropertyType() @@ -2855,7 +2842,6 @@ void tst_qqmlecmascript::listToVariant() } // QTBUG-16316 -Q_DECLARE_METATYPE(QQmlListProperty<MyQmlObject>) void tst_qqmlecmascript::listAssignment() { QQmlComponent component(&engine, testFileUrl("listAssignment.qml")); @@ -3785,6 +3771,42 @@ void tst_qqmlecmascript::singletonTypeResolution() delete object; } +void tst_qqmlecmascript::verifyContextLifetime(QQmlContextData *ctxt) { + QQmlContextData *childCtxt = ctxt->childContexts; + + if (!ctxt->importedScripts.isEmpty()) { + QV8Engine *engine = QV8Engine::get(ctxt->engine); + foreach (v8::Persistent<v8::Object> qmlglobal, ctxt->importedScripts) { + QQmlContextData *scriptContext, *newContext; + + if (qmlglobal.IsEmpty()) + continue; + + scriptContext = engine->contextWrapper()->context(qmlglobal); + + { + v8::HandleScope handle_scope; + v8::Persistent<v8::Context> context = v8::Context::New(); + v8::Context::Scope context_scope(context); + v8::Local<v8::Object> temporaryScope = engine->qmlScope(scriptContext, NULL); + Q_UNUSED(temporaryScope) + + context.Dispose(); + } + + QV8Engine::gc(); + newContext = engine->contextWrapper()->context(qmlglobal); + QVERIFY(scriptContext == newContext); + } + } + + while (childCtxt) { + verifyContextLifetime(childCtxt); + + childCtxt = childCtxt->nextChild; + } +} + void tst_qqmlecmascript::importScripts_data() { QTest::addColumn<QUrl>("testfile"); @@ -4016,6 +4038,10 @@ void tst_qqmlecmascript::importScripts() QVERIFY(object == 0); } else { QVERIFY(object != 0); + + QQmlContextData *ctxt = QQmlContextData::get(engine.rootContext()); + tst_qqmlecmascript::verifyContextLifetime(ctxt); + for (int i = 0; i < propertyNames.size(); ++i) QCOMPARE(object->property(propertyNames.at(i).toLatin1().constData()), propertyValues.at(i)); delete object; @@ -5756,14 +5782,11 @@ void tst_qqmlecmascript::qtbug_9792() delete context; - transientErrorsMsgCount = 0; - QtMessageHandler old = qInstallMessageHandler(transientErrorsMsgHandler); + QQmlTestMessageHandler messageHandler; object->basicSignal(); - - qInstallMessageHandler(old); - QCOMPARE(transientErrorsMsgCount, 0); + QVERIFY2(messageHandler.messages().isEmpty(), qPrintable(messageHandler.messageString())); delete object; } @@ -5797,14 +5820,11 @@ void tst_qqmlecmascript::noSpuriousWarningsAtShutdown() QObject *o = component.create(); - transientErrorsMsgCount = 0; - QtMessageHandler old = qInstallMessageHandler(transientErrorsMsgHandler); + QQmlTestMessageHandler messageHandler; delete o; - qInstallMessageHandler(old); - - QCOMPARE(transientErrorsMsgCount, 0); + QVERIFY2(messageHandler.messages().isEmpty(), qPrintable(messageHandler.messageString())); } @@ -5813,14 +5833,11 @@ void tst_qqmlecmascript::noSpuriousWarningsAtShutdown() QObject *o = component.create(); - transientErrorsMsgCount = 0; - QtMessageHandler old = qInstallMessageHandler(transientErrorsMsgHandler); + QQmlTestMessageHandler messageHandler; delete o; - qInstallMessageHandler(old); - - QCOMPARE(transientErrorsMsgCount, 0); + QVERIFY2(messageHandler.messages().isEmpty(), qPrintable(messageHandler.messageString())); } } @@ -6634,22 +6651,15 @@ void tst_qqmlecmascript::doubleEvaluate() delete object; } -static QStringList messages; -static void captureMsgHandler(QtMsgType, const QMessageLogContext &, const QString &msg) -{ - messages.append(msg); -} - void tst_qqmlecmascript::nonNotifyable() { QV4Compiler::enableV4(false); QQmlComponent component(&engine, testFileUrl("nonNotifyable.qml")); QV4Compiler::enableV4(true); - QtMessageHandler old = qInstallMessageHandler(captureMsgHandler); - messages.clear(); + QQmlTestMessageHandler messageHandler; + QObject *object = component.create(); - qInstallMessageHandler(old); QVERIFY(object != 0); @@ -6660,9 +6670,9 @@ void tst_qqmlecmascript::nonNotifyable() QLatin1String(object->metaObject()->className()) + QLatin1String("::value"); - QCOMPARE(messages.length(), 2); - QCOMPARE(messages.at(0), expected1); - QCOMPARE(messages.at(1), expected2); + QCOMPARE(messageHandler.messages().length(), 2); + QCOMPARE(messageHandler.messages().at(0), expected1); + QCOMPARE(messageHandler.messages().at(1), expected2); delete object; } @@ -7087,16 +7097,14 @@ void tst_qqmlecmascript::bindingSuppression() EventProcessor processor; engine.rootContext()->setContextProperty("pendingEvents", &processor); - transientErrorsMsgCount = 0; - QtMessageHandler old = qInstallMessageHandler(transientErrorsMsgHandler); + QQmlTestMessageHandler messageHandler; QQmlComponent c(&engine, testFileUrl("bindingSuppression.qml")); QObject *obj = c.create(); QVERIFY(obj != 0); delete obj; - qInstallMessageHandler(old); - QCOMPARE(transientErrorsMsgCount, 0); + QVERIFY2(messageHandler.messages().isEmpty(), qPrintable(messageHandler.messageString())); } void tst_qqmlecmascript::signalEmitted() |