aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2018-07-14 01:02:04 +0200
committerSimon Hausmann <simon.hausmann@qt.io>2018-07-16 09:38:30 +0200
commit43645fd59c6bcb0a3e37eef530ef970f51ed48af (patch)
treed377a19c36e9e853377db59b58d937db0ea67e0d /tests
parentad0f200df54e5afcb1fdcb977794259bdb9216b5 (diff)
parentf42207cbdb0cbe5e345bfd9e000b3e77b34a503c (diff)
Merge remote-tracking branch 'origin/5.11' into dev
Conflicts: src/quick/items/qquickloader.cpp tests/auto/quick/qquickanimations/tst_qquickanimations.cpp Change-Id: I0cb9f637d24ccd0ecfb50c455cc210119f744b02
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/qml/debugger/qqmldebugjs/tst_qqmldebugjs.cpp95
-rw-r--r--tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp26
-rw-r--r--tests/auto/quick/qquickanimations/data/replacingTransitions.qml51
-rw-r--r--tests/auto/quick/qquickanimations/tst_qquickanimations.cpp37
-rw-r--r--tests/auto/quick/qquickitem/BLACKLIST3
-rw-r--r--tests/auto/quick/qquickitem/tst_qquickitem.cpp14
-rw-r--r--tests/auto/quick/qquicklayouts/data/rowlayout/LayerEnabled.qml78
-rw-r--r--tests/auto/quick/qquicklayouts/data/tst_rowlayout.qml18
-rw-r--r--tests/auto/quick/qquickloader/tst_qquickloader.cpp53
9 files changed, 304 insertions, 71 deletions
diff --git a/tests/auto/qml/debugger/qqmldebugjs/tst_qqmldebugjs.cpp b/tests/auto/qml/debugger/qqmldebugjs/tst_qqmldebugjs.cpp
index 35df46d73c..e3996e0c18 100644
--- a/tests/auto/qml/debugger/qqmldebugjs/tst_qqmldebugjs.cpp
+++ b/tests/auto/qml/debugger/qqmldebugjs/tst_qqmldebugjs.cpp
@@ -227,6 +227,8 @@ private:
QPointer<QJSDebugClient> m_client;
void targetData();
+ bool waitForClientSignal(const char *signal, int timeout = 30000);
+
QTime t;
};
@@ -798,7 +800,7 @@ void tst_QQmlDebugJS::connect()
QFETCH(bool, qmlscene);
QCOMPARE(init(qmlscene, QString(TEST_QMLFILE), blockMode, restrictMode), ConnectSuccess);
m_client->connect();
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(connected())));
+ QVERIFY(waitForClientSignal(SIGNAL(connected())));
}
void tst_QQmlDebugJS::interrupt()
@@ -812,7 +814,7 @@ void tst_QQmlDebugJS::interrupt()
m_client->connect(redundantRefs, namesAsObjects);
m_client->interrupt();
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(interruptRequested())));
+ QVERIFY(waitForClientSignal(SIGNAL(interruptRequested())));
}
void tst_QQmlDebugJS::getVersion()
@@ -824,10 +826,10 @@ void tst_QQmlDebugJS::getVersion()
QFETCH(bool, namesAsObjects);
QCOMPARE(init(qmlscene), ConnectSuccess);
m_client->connect(redundantRefs, namesAsObjects);
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(connected())));
+ QVERIFY(waitForClientSignal(SIGNAL(connected())));
m_client->version();
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(result())));
+ QVERIFY(waitForClientSignal(SIGNAL(result())));
}
void tst_QQmlDebugJS::getVersionWhenAttaching()
@@ -841,7 +843,7 @@ void tst_QQmlDebugJS::getVersionWhenAttaching()
m_client->connect(redundantRefs, namesAsObjects);
m_client->version();
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(result())));
+ QVERIFY(waitForClientSignal(SIGNAL(result())));
}
void tst_QQmlDebugJS::disconnect()
@@ -855,7 +857,7 @@ void tst_QQmlDebugJS::disconnect()
m_client->connect(redundantRefs, namesAsObjects);
m_client->disconnect();
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(result())));
+ QVERIFY(waitForClientSignal(SIGNAL(result())));
}
void tst_QQmlDebugJS::setBreakpointInScriptOnCompleted()
@@ -870,7 +872,7 @@ void tst_QQmlDebugJS::setBreakpointInScriptOnCompleted()
m_client->setBreakpoint(QLatin1String(ONCOMPLETED_QMLFILE), sourceLine, -1, true);
m_client->connect(redundantRefs, namesAsObjects);
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(stopped())));
+ QVERIFY(waitForClientSignal(SIGNAL(stopped())));
QString jsonString(m_client->response);
QVariantMap value = m_client->parser.call(QJSValueList() << QJSValue(jsonString)).toVariant().toMap();
@@ -893,7 +895,7 @@ void tst_QQmlDebugJS::setBreakpointInScriptOnComponentCreated()
m_client->setBreakpoint(QLatin1String(ONCOMPLETED_QMLFILE), sourceLine, -1, true);
m_client->connect(redundantRefs, namesAsObjects);
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(stopped())));
+ QVERIFY(waitForClientSignal(SIGNAL(stopped())));
QString jsonString(m_client->response);
QVariantMap value = m_client->parser.call(QJSValueList() << QJSValue(jsonString)).toVariant().toMap();
@@ -916,7 +918,7 @@ void tst_QQmlDebugJS::setBreakpointInScriptOnTimerCallback()
//We can set the breakpoint after connect() here because the timer is repeating and if we miss
//its first iteration we can still catch the second one.
m_client->setBreakpoint(QLatin1String(TIMER_QMLFILE), sourceLine, -1, true);
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(stopped())));
+ QVERIFY(waitForClientSignal(SIGNAL(stopped())));
QString jsonString(m_client->response);
QVariantMap value = m_client->parser.call(QJSValueList() << QJSValue(jsonString)).toVariant().toMap();
@@ -939,7 +941,7 @@ void tst_QQmlDebugJS::setBreakpointInScriptInDifferentFile()
m_client->setBreakpoint(QLatin1String(TEST_JSFILE), sourceLine, -1, true);
m_client->connect(redundantRefs, namesAsObjects);
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(stopped())));
+ QVERIFY(waitForClientSignal(SIGNAL(stopped())));
QString jsonString(m_client->response);
QVariantMap value = m_client->parser.call(QJSValueList() << QJSValue(jsonString)).toVariant().toMap();
@@ -964,7 +966,7 @@ void tst_QQmlDebugJS::setBreakpointInScriptOnComment()
m_client->setBreakpoint(QLatin1String(BREAKPOINTRELOCATION_QMLFILE), sourceLine, -1, true);
m_client->connect(redundantRefs, namesAsObjects);
QEXPECT_FAIL("", "Relocation of breakpoints is disabled right now", Abort);
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(stopped()), 1));
+ QVERIFY(waitForClientSignal(SIGNAL(stopped()), 1));
QString jsonString(m_client->response);
QVariantMap value = m_client->parser.call(QJSValueList() << QJSValue(jsonString)).toVariant().toMap();
@@ -989,7 +991,7 @@ void tst_QQmlDebugJS::setBreakpointInScriptOnEmptyLine()
m_client->setBreakpoint(QLatin1String(BREAKPOINTRELOCATION_QMLFILE), sourceLine, -1, true);
m_client->connect(redundantRefs, namesAsObjects);
QEXPECT_FAIL("", "Relocation of breakpoints is disabled right now", Abort);
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(stopped()), 1));
+ QVERIFY(waitForClientSignal(SIGNAL(stopped()), 1));
QString jsonString(m_client->response);
QVariantMap value = m_client->parser.call(QJSValueList() << QJSValue(jsonString)).toVariant().toMap();
@@ -1012,7 +1014,7 @@ void tst_QQmlDebugJS::setBreakpointInScriptOnOptimizedBinding()
m_client->setBreakpoint(QLatin1String(BREAKPOINTRELOCATION_QMLFILE), sourceLine, -1, true);
m_client->connect(redundantRefs, namesAsObjects);
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(stopped())));
+ QVERIFY(waitForClientSignal(SIGNAL(stopped())));
QString jsonString(m_client->response);
QVariantMap value = m_client->parser.call(QJSValueList() << QJSValue(jsonString)).toVariant().toMap();
@@ -1035,7 +1037,7 @@ void tst_QQmlDebugJS::setBreakpointInScriptWithCondition()
m_client->connect(redundantRefs, namesAsObjects);
//The breakpoint is in a timer loop so we can set it after connect().
m_client->setBreakpoint(QLatin1String(CONDITION_QMLFILE), sourceLine, 1, true, QLatin1String("a > 10"));
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(stopped())));
+ QVERIFY(waitForClientSignal(SIGNAL(stopped())));
//Get the frame index
QString jsonString = m_client->response;
@@ -1047,7 +1049,7 @@ void tst_QQmlDebugJS::setBreakpointInScriptWithCondition()
//Verify the value of 'result'
m_client->evaluate(QLatin1String("a"),frameIndex);
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(result())));
+ QVERIFY(waitForClientSignal(SIGNAL(result())));
}
jsonString = m_client->response;
@@ -1073,7 +1075,7 @@ void tst_QQmlDebugJS::setBreakpointInScriptThatQuits()
m_client->setBreakpoint(QLatin1String(QUIT_QMLFILE), sourceLine, -1, true);
m_client->connect(redundantRefs, namesAsObjects);
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(stopped())));
+ QVERIFY(waitForClientSignal(SIGNAL(stopped())));
QString jsonString(m_client->response);
QVariantMap value = m_client->parser.call(QJSValueList() << QJSValue(jsonString)).toVariant().toMap();
@@ -1102,7 +1104,7 @@ void tst_QQmlDebugJS::setBreakpointWhenAttaching()
//The breakpoint is in a timer loop so we can set it after connect().
m_client->setBreakpoint(QLatin1String(TIMER_QMLFILE), sourceLine);
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(stopped())));
+ QVERIFY(waitForClientSignal(SIGNAL(stopped())));
}
void tst_QQmlDebugJS::clearBreakpoint()
@@ -1123,7 +1125,7 @@ void tst_QQmlDebugJS::clearBreakpoint()
m_client->setBreakpoint(QLatin1String(CHANGEBREAKPOINT_QMLFILE), sourceLine1, -1, true);
m_client->setBreakpoint(QLatin1String(CHANGEBREAKPOINT_QMLFILE), sourceLine2, -1, true);
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(stopped())));
+ QVERIFY(waitForClientSignal(SIGNAL(stopped())));
//Will hit 1st brakpoint, change this breakpoint enable = false
QString jsonString(m_client->response);
@@ -1135,17 +1137,17 @@ void tst_QQmlDebugJS::clearBreakpoint()
int breakpoint = breakpointsHit.at(0).toInt();
m_client->clearBreakpoint(breakpoint);
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(result())));
+ QVERIFY(waitForClientSignal(SIGNAL(result())));
//Continue with debugging
m_client->continueDebugging(QJSDebugClient::Continue);
//Hit 2nd breakpoint
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(stopped())));
+ QVERIFY(waitForClientSignal(SIGNAL(stopped())));
//Continue with debugging
m_client->continueDebugging(QJSDebugClient::Continue);
//Should stop at 2nd breakpoint
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(stopped())));
+ QVERIFY(waitForClientSignal(SIGNAL(stopped())));
jsonString = m_client->response;
value = m_client->parser.call(QJSValueList() << QJSValue(jsonString)).toVariant().toMap();
@@ -1165,7 +1167,7 @@ void tst_QQmlDebugJS::setExceptionBreak()
QCOMPARE(init(qmlscene, EXCEPTION_QMLFILE), ConnectSuccess);
m_client->setExceptionBreak(QJSDebugClient::All,true);
m_client->connect(redundantRefs, namesAsObjects);
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(stopped())));
+ QVERIFY(waitForClientSignal(SIGNAL(stopped())));
}
void tst_QQmlDebugJS::stepNext()
@@ -1180,10 +1182,10 @@ void tst_QQmlDebugJS::stepNext()
m_client->setBreakpoint(QLatin1String(STEPACTION_QMLFILE), sourceLine, -1, true);
m_client->connect(redundantRefs, namesAsObjects);
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(stopped())));
+ QVERIFY(waitForClientSignal(SIGNAL(stopped())));
m_client->continueDebugging(QJSDebugClient::Next);
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(stopped())));
+ QVERIFY(waitForClientSignal(SIGNAL(stopped())));
QString jsonString(m_client->response);
QVariantMap value = m_client->parser.call(QJSValueList() << QJSValue(jsonString)).toVariant().toMap();
@@ -1215,11 +1217,11 @@ void tst_QQmlDebugJS::stepIn()
m_client->setBreakpoint(QLatin1String(STEPACTION_QMLFILE), sourceLine, 1, true);
m_client->connect(redundantRefs, namesAsObjects);
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(stopped())));
+ QVERIFY(waitForClientSignal(SIGNAL(stopped())));
QCOMPARE(responseBody(m_client).value("sourceLine").toInt(), sourceLine);
m_client->continueDebugging(QJSDebugClient::In);
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(stopped())));
+ QVERIFY(waitForClientSignal(SIGNAL(stopped())));
const QVariantMap body = responseBody(m_client);
QCOMPARE(body.value("sourceLine").toInt(), actualLine);
@@ -1239,11 +1241,11 @@ void tst_QQmlDebugJS::stepOut()
m_client->setBreakpoint(QLatin1String(STEPACTION_QMLFILE), sourceLine, -1, true);
m_client->connect(redundantRefs, namesAsObjects);
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(stopped())));
+ QVERIFY(waitForClientSignal(SIGNAL(stopped())));
QCOMPARE(responseBody(m_client).value("sourceLine").toInt(), sourceLine);
m_client->continueDebugging(QJSDebugClient::Out);
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(stopped())));
+ QVERIFY(waitForClientSignal(SIGNAL(stopped())));
const QVariantMap body = responseBody(m_client);
QCOMPARE(body.value("sourceLine").toInt(), actualLine);
@@ -1264,10 +1266,10 @@ void tst_QQmlDebugJS::continueDebugging()
m_client->setBreakpoint(QLatin1String(STEPACTION_QMLFILE), sourceLine1, -1, true);
m_client->setBreakpoint(QLatin1String(STEPACTION_QMLFILE), sourceLine2, -1, true);
m_client->connect(redundantRefs, namesAsObjects);
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(stopped())));
+ QVERIFY(waitForClientSignal(SIGNAL(stopped())));
m_client->continueDebugging(QJSDebugClient::Continue);
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(stopped())));
+ QVERIFY(waitForClientSignal(SIGNAL(stopped())));
QString jsonString(m_client->response);
QVariantMap value = m_client->parser.call(QJSValueList() << QJSValue(jsonString)).toVariant().toMap();
@@ -1290,10 +1292,10 @@ void tst_QQmlDebugJS::backtrace()
m_client->setBreakpoint(QLatin1String(ONCOMPLETED_QMLFILE), sourceLine, -1, true);
m_client->connect(redundantRefs, namesAsObjects);
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(stopped())));
+ QVERIFY(waitForClientSignal(SIGNAL(stopped())));
m_client->backtrace();
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(result())));
+ QVERIFY(waitForClientSignal(SIGNAL(result())));
}
void tst_QQmlDebugJS::getFrameDetails()
@@ -1308,10 +1310,10 @@ void tst_QQmlDebugJS::getFrameDetails()
m_client->setBreakpoint(QLatin1String(ONCOMPLETED_QMLFILE), sourceLine, -1, true);
m_client->connect(redundantRefs, namesAsObjects);
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(stopped())));
+ QVERIFY(waitForClientSignal(SIGNAL(stopped())));
m_client->frame();
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(result())));
+ QVERIFY(waitForClientSignal(SIGNAL(result())));
}
void tst_QQmlDebugJS::getScopeDetails()
@@ -1326,10 +1328,10 @@ void tst_QQmlDebugJS::getScopeDetails()
m_client->setBreakpoint(QLatin1String(ONCOMPLETED_QMLFILE), sourceLine, -1, true);
m_client->connect(redundantRefs, namesAsObjects);
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(stopped())));
+ QVERIFY(waitForClientSignal(SIGNAL(stopped())));
m_client->scope();
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(result())));
+ QVERIFY(waitForClientSignal(SIGNAL(result())));
}
void tst_QQmlDebugJS::evaluateInGlobalScope()
@@ -1342,7 +1344,7 @@ void tst_QQmlDebugJS::evaluateInGlobalScope()
for (int i = 0; i < 10; ++i) {
// The engine might not be initialized, yet. We just try until it shows up.
m_client->evaluate(QLatin1String("console.log('Hello World')"));
- if (QQmlDebugTest::waitForSignal(m_client, SIGNAL(result()), 500))
+ if (waitForClientSignal(SIGNAL(result()), 500))
break;
}
@@ -1362,10 +1364,10 @@ void tst_QQmlDebugJS::evaluateInLocalScope()
m_client->setBreakpoint(QLatin1String(ONCOMPLETED_QMLFILE), sourceLine, -1, true);
m_client->connect(redundantRefs, namesAsObjects);
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(stopped())));
+ QVERIFY(waitForClientSignal(SIGNAL(stopped())));
m_client->frame();
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(result())));
+ QVERIFY(waitForClientSignal(SIGNAL(result())));
//Get the frame index
QString jsonString(m_client->response);
@@ -1376,7 +1378,7 @@ void tst_QQmlDebugJS::evaluateInLocalScope()
int frameIndex = body.value("index").toInt();
m_client->evaluate(QLatin1String("root.a"), frameIndex);
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(result())));
+ QVERIFY(waitForClientSignal(SIGNAL(result())));
//Verify the value of 'timer.interval'
jsonString = m_client->response;
@@ -1407,7 +1409,7 @@ void tst_QQmlDebugJS::evaluateInContext()
// "a" not accessible without extra context
m_client->evaluate(QLatin1String("a + 10"), -1, -1);
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(failure())));
+ QVERIFY(waitForClientSignal(SIGNAL(failure())));
bool success = false;
engineClient->queryAvailableEngines(&success);
@@ -1430,7 +1432,7 @@ void tst_QQmlDebugJS::evaluateInContext()
// "a" accessible in context of surrounding object
m_client->evaluate(QLatin1String("a + 10"), -1, object.debugId);
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(result())));
+ QVERIFY(waitForClientSignal(SIGNAL(result())));
QTRY_COMPARE(responseBody(m_client).value("value").toInt(), 20);
}
@@ -1446,10 +1448,10 @@ void tst_QQmlDebugJS::getScripts()
m_client->setBreakpoint(QString(TEST_QMLFILE), 35, -1, true);
m_client->connect(redundantRefs, namesAsObjects);
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(stopped())));
+ QVERIFY(waitForClientSignal(SIGNAL(stopped())));
m_client->scripts();
- QVERIFY(QQmlDebugTest::waitForSignal(m_client, SIGNAL(result())));
+ QVERIFY(waitForClientSignal(SIGNAL(result())));
QString jsonString(m_client->response);
QVariantMap value = m_client->parser.call(QJSValueList()
<< QJSValue(jsonString)).toVariant().toMap();
@@ -1545,6 +1547,11 @@ void tst_QQmlDebugJS::targetData()
QTest::newRow("qmlscene / sparse / strings") << true << false << false;
}
+bool tst_QQmlDebugJS::waitForClientSignal(const char *signal, int timeout)
+{
+ return QQmlDebugTest::waitForSignal(m_client.data(), signal, timeout);
+}
+
QTEST_MAIN(tst_QQmlDebugJS)
#include "tst_qqmldebugjs.moc"
diff --git a/tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp b/tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp
index ba7c85df15..27e06c6f67 100644
--- a/tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp
+++ b/tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp
@@ -2064,15 +2064,14 @@ void tst_qqmlproperty::floatToStringPrecision_data()
QTest::addColumn<QString>("propertyName");
QTest::addColumn<double>("number");
QTest::addColumn<QString>("qtString");
- QTest::addColumn<QString>("alternateQtString");
QTest::addColumn<QString>("jsString");
- QTest::newRow("3.4") << "a" << 3.4 << "3.4" << "3.4" << "3.4";
- QTest::newRow("0.035003945") << "b" << 0.035003945 << "0.035003945" << "0.0035003945" << "0.035003945";
- QTest::newRow("0.0000012345") << "c" << 0.0000012345 << "1.2345e-6" << "1.2345e-06" << "0.0000012345";
- QTest::newRow("0.00000012345") << "d" << 0.00000012345 << "1.2345e-7" << "1.2345e-07" << "1.2345e-7";
- QTest::newRow("1e20") << "e" << 1e20 << "1e+20" << "1e+20" << "100000000000000000000";
- QTest::newRow("1e21") << "f" << 1e21 << "1e+21" << "1e+21" << "1e+21";
+ QTest::newRow("3.4") << "a" << 3.4 << "3.4" << "3.4";
+ QTest::newRow("0.035003945") << "b" << 0.035003945 << "0.035003945" << "0.035003945";
+ QTest::newRow("0.0000012345") << "c" << 0.0000012345 << "1.2345e-06" << "0.0000012345";
+ QTest::newRow("0.00000012345") << "d" << 0.00000012345 << "1.2345e-07" << "1.2345e-7";
+ QTest::newRow("1e20") << "e" << 1e20 << "1e+20" << "100000000000000000000";
+ QTest::newRow("1e21") << "f" << 1e21 << "1e+21" << "1e+21";
}
void tst_qqmlproperty::floatToStringPrecision()
@@ -2084,24 +2083,15 @@ void tst_qqmlproperty::floatToStringPrecision()
QFETCH(QString, propertyName);
QFETCH(double, number);
QFETCH(QString, qtString);
- QFETCH(QString, alternateQtString);
QFETCH(QString, jsString);
QByteArray name = propertyName.toLatin1();
QCOMPARE(obj->property(name).toDouble(), number);
- if (obj->property(name).toString() != qtString) {
- QCOMPARE(obj->property(name).toString(), alternateQtString);
- } else {
- QCOMPARE(obj->property(name).toString(), qtString);
- }
+ QCOMPARE(obj->property(name).toString(), qtString);
QByteArray name1 = (propertyName + QLatin1Char('1')).toLatin1();
QCOMPARE(obj->property(name1).toDouble(), number);
- if (obj->property(name1).toString() != qtString) {
- QCOMPARE(obj->property(name1).toString(), alternateQtString);
- } else {
- QCOMPARE(obj->property(name1).toString(), qtString);
- }
+ QCOMPARE(obj->property(name1).toString(), qtString);
QByteArray name2 = (propertyName + QLatin1Char('2')).toLatin1();
QCOMPARE(obj->property(name2).toDouble(), number);
diff --git a/tests/auto/quick/qquickanimations/data/replacingTransitions.qml b/tests/auto/quick/qquickanimations/data/replacingTransitions.qml
new file mode 100644
index 0000000000..ff7c50cd67
--- /dev/null
+++ b/tests/auto/quick/qquickanimations/data/replacingTransitions.qml
@@ -0,0 +1,51 @@
+import QtQuick 2.9
+
+Rectangle {
+ id: theRoot
+ property alias model: theModel
+ property alias addTimer: addToModel
+ property alias addTransition: addTrans
+ property alias displaceTransition: displaceTrans
+
+ width: 400
+ height: 400
+
+ ListModel {
+ id: theModel
+ }
+ Timer {
+ id: addToModel
+ interval: 1000
+ running: false
+ repeat: true
+ onTriggered: {
+ theModel.insert(0, {"name": "item " + theModel.count})
+ if (theModel.count > 2)
+ stop()
+ }
+ }
+ Component {
+ id: listDelegate
+ Text {
+ text: name
+ }
+ }
+ ListView {
+ id: listView
+
+ property int animationDuration: 10000
+
+ anchors.fill: parent
+ model: theModel
+ delegate: listDelegate
+ add: Transition {
+ id: addTrans
+ NumberAnimation { properties: "x"; from: 400; duration: listView.animationDuration }
+ NumberAnimation { properties: "y"; from: 400; duration: listView.animationDuration }
+ }
+ addDisplaced: Transition {
+ id: displaceTrans
+ NumberAnimation { properties: "x,y"; duration: listView.animationDuration }
+ }
+ }
+}
diff --git a/tests/auto/quick/qquickanimations/tst_qquickanimations.cpp b/tests/auto/quick/qquickanimations/tst_qquickanimations.cpp
index 3cfe03a376..0f095774e8 100644
--- a/tests/auto/quick/qquickanimations/tst_qquickanimations.cpp
+++ b/tests/auto/quick/qquickanimations/tst_qquickanimations.cpp
@@ -29,6 +29,8 @@
#include <QtQml/qqmlengine.h>
#include <QtQml/qqmlcomponent.h>
#include <QtQuick/qquickview.h>
+#include <QtQml/private/qqmltimer_p.h>
+#include <QtQml/private/qqmllistmodel_p.h>
#include <QtQml/private/qanimationgroupjob_p.h>
#include <QtQuick/private/qquickrectangle_p.h>
#include <QtQuick/private/qquickitemanimation_p.h>
@@ -106,6 +108,7 @@ private slots:
void pathLineUnspecifiedXYBug();
void unsetAnimatorProxyJobWindow();
void finished();
+ void replacingTransitions();
};
#define QTIMED_COMPARE(lhs, rhs) do { \
@@ -1686,6 +1689,40 @@ void tst_qquickanimations::finished()
}
}
+void tst_qquickanimations::replacingTransitions()
+{
+ QQmlEngine engine;
+ QQmlComponent c(&engine, testFileUrl("replacingTransitions.qml"));
+ QScopedPointer<QQuickRectangle> rect(qobject_cast<QQuickRectangle*>(c.create()));
+ if (!c.errors().isEmpty())
+ qDebug() << c.errorString();
+ QVERIFY(rect);
+
+ QQmlTimer *addTimer = rect->property("addTimer").value<QQmlTimer*>();
+ QVERIFY(addTimer);
+ QCOMPARE(addTimer->isRunning(), false);
+
+ QQuickTransition *addTrans = rect->property("addTransition").value<QQuickTransition*>();
+ QVERIFY(addTrans);
+ QCOMPARE(addTrans->running(), false);
+
+ QQuickTransition *displaceTrans = rect->property("displaceTransition").value<QQuickTransition*>();
+ QVERIFY(displaceTrans);
+ QCOMPARE(displaceTrans->running(), false);
+
+ QQmlListModel *model = rect->property("model").value<QQmlListModel *>();
+ QVERIFY(model);
+ QCOMPARE(model->count(), 0);
+
+ addTimer->start();
+ QTest::qWait(1000 + 1000 + 10000);
+
+ QTRY_COMPARE(addTimer->isRunning(), false);
+ QTRY_COMPARE(addTrans->running(), false);
+ QTRY_COMPARE(displaceTrans->running(), false);
+ QCOMPARE(model->count(), 3);
+}
+
QTEST_MAIN(tst_qquickanimations)
#include "tst_qquickanimations.moc"
diff --git a/tests/auto/quick/qquickitem/BLACKLIST b/tests/auto/quick/qquickitem/BLACKLIST
index 85c4df4feb..d94a3ef102 100644
--- a/tests/auto/quick/qquickitem/BLACKLIST
+++ b/tests/auto/quick/qquickitem/BLACKLIST
@@ -1,5 +1,2 @@
[contains:hollow square: testing points inside]
xcb
-
-[qtBug60123]
-offscreen
diff --git a/tests/auto/quick/qquickitem/tst_qquickitem.cpp b/tests/auto/quick/qquickitem/tst_qquickitem.cpp
index ee9d36560d..7e132f97b6 100644
--- a/tests/auto/quick/qquickitem/tst_qquickitem.cpp
+++ b/tests/auto/quick/qquickitem/tst_qquickitem.cpp
@@ -2105,32 +2105,34 @@ void tst_qquickitem::shortcutOverride()
void tst_qquickitem::qtBug60123()
{
QMainWindow main;
+ main.resize(400, 200);
QQuickView window;
QQuickView window2;
window.setSource(testFileUrl("mainWindowQtBug60123.qml"));
window2.setSource(testFileUrl("mainWindowQtBug60123.qml"));
+ // Create central widget for the main window
QWidget *baseWidget = new QWidget(&main);
- main.resize(400, 200);
baseWidget->resize(400, 200);
baseWidget->setMaximumHeight(200);
baseWidget->setMaximumWidth(400);
+ main.setCentralWidget(baseWidget);
// Create container widgets for both windows
QWidget *containers = QWidget::createWindowContainer(&window, baseWidget);
- containers->setGeometry(0, 0, 400, 200);
- QWidget* containers2 = QWidget::createWindowContainer(&window2, baseWidget);
- containers2->setGeometry(50, 50, 300, 150);
+ QWidget *containers2 = QWidget::createWindowContainer(&window2, baseWidget);
+ containers->setGeometry(0, 0, 100, 100);
+ containers2->setGeometry(100, 100, 100, 100);
// Show and activate the main window
main.show();
- QTest::qWaitForWindowActive(&main);
+ QVERIFY(QTest::qWaitForWindowExposed(&main));
// Activate window, test press and release events
auto activateWindowAndTestPress = [] (QQuickView* testWindow) {
testWindow->requestActivate();
- QTest::qWaitForWindowActive(testWindow);
+ QVERIFY(QTest::qWaitForWindowActive(testWindow));
QTest::mousePress(testWindow, Qt::LeftButton, Qt::NoModifier, QPoint(10, 10));
QCOMPARE(testWindow->rootObject()->property("lastEvent").toString(), QString("pressed"));
QTest::mouseRelease(testWindow, Qt::LeftButton, Qt::NoModifier, QPoint(10, 10));
diff --git a/tests/auto/quick/qquicklayouts/data/rowlayout/LayerEnabled.qml b/tests/auto/quick/qquicklayouts/data/rowlayout/LayerEnabled.qml
new file mode 100644
index 0000000000..39500cc19d
--- /dev/null
+++ b/tests/auto/quick/qquicklayouts/data/rowlayout/LayerEnabled.qml
@@ -0,0 +1,78 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.7
+import QtQuick.Layouts 1.3
+
+Rectangle {
+ width: 100
+ height: 100
+ color: "black"
+
+ property alias layout: layout
+ property alias item1: r1
+
+ RowLayout {
+ id: layout
+ anchors.fill: parent
+ visible: false
+ spacing: 0
+
+ Rectangle {
+ id: r1
+ color: "red"
+
+ layer.enabled: true
+
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ }
+ }
+}
diff --git a/tests/auto/quick/qquicklayouts/data/tst_rowlayout.qml b/tests/auto/quick/qquicklayouts/data/tst_rowlayout.qml
index 763c4cf6e4..07af6a77ac 100644
--- a/tests/auto/quick/qquicklayouts/data/tst_rowlayout.qml
+++ b/tests/auto/quick/qquicklayouts/data/tst_rowlayout.qml
@@ -1082,5 +1082,23 @@ Item {
// Shouldn't crash upon destroying containerUser.
}
+
+ /*
+ Tests that a layout-managed item that sets layer.enabled to true
+ still renders something. This is a simpler test case that only
+ reproduces the issue when the layout that manages it is made visible
+ after component completion, but QTBUG-63269 has a more complex example
+ where this (setting visible to true afterwards) isn't necessary.
+ */
+ function test_layerEnabled() {
+ var component = Qt.createComponent("rowlayout/LayerEnabled.qml");
+ compare(component.status, Component.Ready);
+
+ var rootRect = createTemporaryObject(component, container);
+ verify(rootRect);
+ rootRect.layout.visible = true;
+ waitForRendering(rootRect.layout)
+ compare(rootRect.item1.width, 100)
+ }
}
}
diff --git a/tests/auto/quick/qquickloader/tst_qquickloader.cpp b/tests/auto/quick/qquickloader/tst_qquickloader.cpp
index fd9fed39b5..fbdd87905b 100644
--- a/tests/auto/quick/qquickloader/tst_qquickloader.cpp
+++ b/tests/auto/quick/qquickloader/tst_qquickloader.cpp
@@ -126,6 +126,8 @@ private slots:
void parentErrors();
void rootContext();
+ void sourceURLKeepComponent();
+
};
Q_DECLARE_METATYPE(QList<QQmlError>)
@@ -1388,6 +1390,57 @@ void tst_QQuickLoader::rootContext()
QCOMPARE(objectInRootContext.didIt, 2);
}
+void tst_QQuickLoader::sourceURLKeepComponent()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.setData(QByteArray(
+ "import QtQuick 2.0\n"
+ " Loader { id: loader\n }"),
+ dataDirectoryUrl());
+
+ QScopedPointer<QQuickLoader> loader(qobject_cast<QQuickLoader*>(component.create()));
+ loader->setSource(testFileUrl("/Rect120x60.qml"));
+
+ QVERIFY(loader);
+ QVERIFY(loader->item());
+ QVERIFY(loader->sourceComponent());
+ QCOMPARE(loader->progress(), 1.0);
+
+ const QPointer<QQmlComponent> sourceComponent = loader->sourceComponent();
+
+ //Ensure toggling active status does not recreate component
+ loader->setActive(false);
+ QVERIFY(!loader->item());
+ QVERIFY(loader->sourceComponent());
+ QCOMPARE(sourceComponent.data(), loader->sourceComponent());
+
+ loader->setActive(true);
+ QVERIFY(loader->item());
+ QVERIFY(loader->sourceComponent());
+ QCOMPARE(sourceComponent.data(), loader->sourceComponent());
+
+ loader->setActive(false);
+ QVERIFY(!loader->item());
+ QVERIFY(loader->sourceComponent());
+ QCOMPARE(sourceComponent.data(), loader->sourceComponent());
+
+ //Ensure changing source url causes component to be recreated when inactive
+ loader->setSource(testFileUrl("/BlueRect.qml"));
+
+ loader->setActive(true);
+ QVERIFY(loader->item());
+ QVERIFY(loader->sourceComponent());
+
+ const QPointer<QQmlComponent> newSourceComponent = loader->sourceComponent();
+ QVERIFY(sourceComponent.data() != newSourceComponent.data());
+
+ //Ensure changing source url causes component to be recreated when active
+ loader->setSource(testFileUrl("/Rect120x60.qml"));
+ QVERIFY(loader->sourceComponent() != newSourceComponent.data());
+
+}
+
QTEST_MAIN(tst_QQuickLoader)
#include "tst_qquickloader.moc"