aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/qml/qqmlecmascript
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@digia.com>2013-01-04 12:48:06 +0100
committerFrederik Gladhorn <frederik.gladhorn@digia.com>2013-01-04 12:48:06 +0100
commit5d150f63e1a188414e4951c4b6e4c7c474d9b4e6 (patch)
treed249fdfd8480b367ad238b62602f48254dceda11 /tests/auto/qml/qqmlecmascript
parent63064c7ed7a23c1749ed7f58d55b680190dc01c4 (diff)
parentef92d6f8ef649fdaf50c123c6ca978b6db6892f6 (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.h2
-rw-r--r--tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp112
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()