aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/qml/qmlcachegen
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2019-03-23 01:00:08 +0100
committerUlf Hermann <ulf.hermann@qt.io>2019-03-25 10:13:23 +0100
commita1e38651ce245edcd8628bc8e2aad7e83184066e (patch)
tree27d3a68ac4204975faa6d0d427970fb1013e0ed4 /tests/auto/qml/qmlcachegen
parent3980ccf785462dc7b2cb53f72790638eb9e7b8c0 (diff)
parent42ed40cf0abd0155d6e6d1ef01faf9bded065588 (diff)
Merge remote-tracking branch 'origin/5.12' into 5.13
Conflicts: .qmake.conf src/qmltest/quicktest.cpp tests/auto/qml/qmlcachegen/qmlcachegen.pro Change-Id: I70e96e8817d59647f876b8b77b30cdeede8f0662
Diffstat (limited to 'tests/auto/qml/qmlcachegen')
-rw-r--r--tests/auto/qml/qmlcachegen/data/Enums.qml (renamed from tests/auto/qml/qmlcachegen/Enums.qml)0
-rw-r--r--tests/auto/qml/qmlcachegen/data/Retain.qml (renamed from tests/auto/qml/qmlcachegen/Retain.qml)0
-rw-r--r--tests/auto/qml/qmlcachegen/data/componentInItem.qml15
-rw-r--r--tests/auto/qml/qmlcachegen/data/jsimport.qml (renamed from tests/auto/qml/qmlcachegen/jsimport.qml)0
-rw-r--r--tests/auto/qml/qmlcachegen/data/jsmoduleimport.qml (renamed from tests/auto/qml/qmlcachegen/jsmoduleimport.qml)0
-rw-r--r--tests/auto/qml/qmlcachegen/data/library.js (renamed from tests/auto/qml/qmlcachegen/library.js)0
-rw-r--r--tests/auto/qml/qmlcachegen/data/script.js (renamed from tests/auto/qml/qmlcachegen/script.js)0
-rw-r--r--tests/auto/qml/qmlcachegen/data/script.mjs (renamed from tests/auto/qml/qmlcachegen/script.mjs)0
-rw-r--r--tests/auto/qml/qmlcachegen/data/trickypaths.qml (renamed from tests/auto/qml/qmlcachegen/trickypaths.qml)0
-rw-r--r--tests/auto/qml/qmlcachegen/data/umlaut.qml (renamed from tests/auto/qml/qmlcachegen/umlaut.qml)0
-rw-r--r--tests/auto/qml/qmlcachegen/data/versionStyleSuffix-1.2-core-yc.qml (renamed from tests/auto/qml/qmlcachegen/versionStyleSuffix-1.2-core-yc.qml)0
-rw-r--r--tests/auto/qml/qmlcachegen/data/versionStyleSuffix-1.2-more.qml (renamed from tests/auto/qml/qmlcachegen/versionStyleSuffix-1.2-more.qml)0
-rw-r--r--tests/auto/qml/qmlcachegen/data/versionchecks.qml (renamed from tests/auto/qml/qmlcachegen/versionchecks.qml)0
-rw-r--r--tests/auto/qml/qmlcachegen/data/worker.js (renamed from tests/auto/qml/qmlcachegen/worker.js)0
-rw-r--r--tests/auto/qml/qmlcachegen/data/worker.qml (renamed from tests/auto/qml/qmlcachegen/worker.qml)0
-rw-r--r--tests/auto/qml/qmlcachegen/qmlcachegen.pro32
-rw-r--r--tests/auto/qml/qmlcachegen/retain.qrc2
-rw-r--r--tests/auto/qml/qmlcachegen/trickypaths.qrc6
-rw-r--r--tests/auto/qml/qmlcachegen/trickypaths_umlaut.qrc2
-rw-r--r--tests/auto/qml/qmlcachegen/tst_qmlcachegen.cpp86
20 files changed, 105 insertions, 38 deletions
diff --git a/tests/auto/qml/qmlcachegen/Enums.qml b/tests/auto/qml/qmlcachegen/data/Enums.qml
index 830babb73e..830babb73e 100644
--- a/tests/auto/qml/qmlcachegen/Enums.qml
+++ b/tests/auto/qml/qmlcachegen/data/Enums.qml
diff --git a/tests/auto/qml/qmlcachegen/Retain.qml b/tests/auto/qml/qmlcachegen/data/Retain.qml
index 0e69012662..0e69012662 100644
--- a/tests/auto/qml/qmlcachegen/Retain.qml
+++ b/tests/auto/qml/qmlcachegen/data/Retain.qml
diff --git a/tests/auto/qml/qmlcachegen/data/componentInItem.qml b/tests/auto/qml/qmlcachegen/data/componentInItem.qml
new file mode 100644
index 0000000000..820b9fddcd
--- /dev/null
+++ b/tests/auto/qml/qmlcachegen/data/componentInItem.qml
@@ -0,0 +1,15 @@
+import QtQuick 2.12
+
+Item {
+ Component {
+ Rectangle {
+ id: xxx
+ Text {
+ text: qsTr("&Undo")
+ }
+ Text {
+ text: qsTr("&Redo")
+ }
+ }
+ }
+}
diff --git a/tests/auto/qml/qmlcachegen/jsimport.qml b/tests/auto/qml/qmlcachegen/data/jsimport.qml
index 9c40878e60..9c40878e60 100644
--- a/tests/auto/qml/qmlcachegen/jsimport.qml
+++ b/tests/auto/qml/qmlcachegen/data/jsimport.qml
diff --git a/tests/auto/qml/qmlcachegen/jsmoduleimport.qml b/tests/auto/qml/qmlcachegen/data/jsmoduleimport.qml
index c1fad7fee2..c1fad7fee2 100644
--- a/tests/auto/qml/qmlcachegen/jsmoduleimport.qml
+++ b/tests/auto/qml/qmlcachegen/data/jsmoduleimport.qml
diff --git a/tests/auto/qml/qmlcachegen/library.js b/tests/auto/qml/qmlcachegen/data/library.js
index 51fb41dc23..51fb41dc23 100644
--- a/tests/auto/qml/qmlcachegen/library.js
+++ b/tests/auto/qml/qmlcachegen/data/library.js
diff --git a/tests/auto/qml/qmlcachegen/script.js b/tests/auto/qml/qmlcachegen/data/script.js
index fa55f9069e..fa55f9069e 100644
--- a/tests/auto/qml/qmlcachegen/script.js
+++ b/tests/auto/qml/qmlcachegen/data/script.js
diff --git a/tests/auto/qml/qmlcachegen/script.mjs b/tests/auto/qml/qmlcachegen/data/script.mjs
index 459c336125..459c336125 100644
--- a/tests/auto/qml/qmlcachegen/script.mjs
+++ b/tests/auto/qml/qmlcachegen/data/script.mjs
diff --git a/tests/auto/qml/qmlcachegen/trickypaths.qml b/tests/auto/qml/qmlcachegen/data/trickypaths.qml
index 0836808dc2..0836808dc2 100644
--- a/tests/auto/qml/qmlcachegen/trickypaths.qml
+++ b/tests/auto/qml/qmlcachegen/data/trickypaths.qml
diff --git a/tests/auto/qml/qmlcachegen/umlaut.qml b/tests/auto/qml/qmlcachegen/data/umlaut.qml
index 0836808dc2..0836808dc2 100644
--- a/tests/auto/qml/qmlcachegen/umlaut.qml
+++ b/tests/auto/qml/qmlcachegen/data/umlaut.qml
diff --git a/tests/auto/qml/qmlcachegen/versionStyleSuffix-1.2-core-yc.qml b/tests/auto/qml/qmlcachegen/data/versionStyleSuffix-1.2-core-yc.qml
index 0836808dc2..0836808dc2 100644
--- a/tests/auto/qml/qmlcachegen/versionStyleSuffix-1.2-core-yc.qml
+++ b/tests/auto/qml/qmlcachegen/data/versionStyleSuffix-1.2-core-yc.qml
diff --git a/tests/auto/qml/qmlcachegen/versionStyleSuffix-1.2-more.qml b/tests/auto/qml/qmlcachegen/data/versionStyleSuffix-1.2-more.qml
index 0836808dc2..0836808dc2 100644
--- a/tests/auto/qml/qmlcachegen/versionStyleSuffix-1.2-more.qml
+++ b/tests/auto/qml/qmlcachegen/data/versionStyleSuffix-1.2-more.qml
diff --git a/tests/auto/qml/qmlcachegen/versionchecks.qml b/tests/auto/qml/qmlcachegen/data/versionchecks.qml
index 77d67e7da4..77d67e7da4 100644
--- a/tests/auto/qml/qmlcachegen/versionchecks.qml
+++ b/tests/auto/qml/qmlcachegen/data/versionchecks.qml
diff --git a/tests/auto/qml/qmlcachegen/worker.js b/tests/auto/qml/qmlcachegen/data/worker.js
index dd2d0b843d..dd2d0b843d 100644
--- a/tests/auto/qml/qmlcachegen/worker.js
+++ b/tests/auto/qml/qmlcachegen/data/worker.js
diff --git a/tests/auto/qml/qmlcachegen/worker.qml b/tests/auto/qml/qmlcachegen/data/worker.qml
index 1f1c9d1ac7..1f1c9d1ac7 100644
--- a/tests/auto/qml/qmlcachegen/worker.qml
+++ b/tests/auto/qml/qmlcachegen/data/worker.qml
diff --git a/tests/auto/qml/qmlcachegen/qmlcachegen.pro b/tests/auto/qml/qmlcachegen/qmlcachegen.pro
index c7820ac1cd..7bd4414302 100644
--- a/tests/auto/qml/qmlcachegen/qmlcachegen.pro
+++ b/tests/auto/qml/qmlcachegen/qmlcachegen.pro
@@ -2,26 +2,34 @@ CONFIG += testcase qtquickcompiler
TARGET = tst_qmlcachegen
macos:CONFIG -= app_bundle
+include (../../shared/util.pri)
+TESTDATA = data/*
+
SOURCES += tst_qmlcachegen.cpp
-workerscripts_test.files = worker.js worker.qml
+RESOURCES += \
+ data/versionchecks.qml \
+ data/jsimport.qml \
+ data/script.js \
+ data/library.js \
+ data/Enums.qml \
+ data/componentInItem.qml \
+ data/jsmoduleimport.qml \
+ data/script.mjs
+
+workerscripts_test.files = \
+ data/worker.js \
+ data/worker.qml
workerscripts_test.prefix = /workerscripts
-RESOURCES += workerscripts_test
-
-RESOURCES += versionchecks.qml
-
-RESOURCES += trickypaths.qrc
-RESOURCES += jsimport.qml script.js library.js
-
-RESOURCES += Enums.qml
+RESOURCES += \
+ workerscripts_test \
+ trickypaths.qrc \
+ retain.qrc
# QTBUG-46375
!win32: RESOURCES += trickypaths_umlaut.qrc
-RESOURCES += jsmoduleimport.qml script.mjs
-
-RESOURCES += retain.qrc
QTQUICK_COMPILER_RETAINED_RESOURCES += retain.qrc
QT += core-private qml-private testlib
diff --git a/tests/auto/qml/qmlcachegen/retain.qrc b/tests/auto/qml/qmlcachegen/retain.qrc
index af042b25d8..e5eed9b12f 100644
--- a/tests/auto/qml/qmlcachegen/retain.qrc
+++ b/tests/auto/qml/qmlcachegen/retain.qrc
@@ -1,5 +1,5 @@
<RCC>
<qresource prefix="/">
- <file>Retain.qml</file>
+ <file alias="Retain.qml">data/Retain.qml</file>
</qresource>
</RCC>
diff --git a/tests/auto/qml/qmlcachegen/trickypaths.qrc b/tests/auto/qml/qmlcachegen/trickypaths.qrc
index 57977ccf6d..b0c3bcf209 100644
--- a/tests/auto/qml/qmlcachegen/trickypaths.qrc
+++ b/tests/auto/qml/qmlcachegen/trickypaths.qrc
@@ -1,7 +1,7 @@
<!DOCTYPE RCC><RCC version="1.0">
<qresource prefix="/directory with spaces">
-<file alias="file name with spaces.qml">trickypaths.qml</file>
-<file>versionStyleSuffix-1.2-core-yc.qml</file>
-<file>versionStyleSuffix-1.2-more.qml</file>
+<file alias="file name with spaces.qml">data/trickypaths.qml</file>
+<file alias="versionStyleSuffix-1.2-core-yc.qml">data/versionStyleSuffix-1.2-core-yc.qml</file>
+<file alias="versionStyleSuffix-1.2-more.qml">data/versionStyleSuffix-1.2-more.qml</file>
</qresource>
</RCC>
diff --git a/tests/auto/qml/qmlcachegen/trickypaths_umlaut.qrc b/tests/auto/qml/qmlcachegen/trickypaths_umlaut.qrc
index 9ca889d692..17aa30473f 100644
--- a/tests/auto/qml/qmlcachegen/trickypaths_umlaut.qrc
+++ b/tests/auto/qml/qmlcachegen/trickypaths_umlaut.qrc
@@ -1,5 +1,5 @@
<!DOCTYPE RCC><RCC version="1.0">
<qresource prefix="/">
-<file alias="Bäh.qml">umlaut.qml</file>
+<file alias="Bäh.qml">data/umlaut.qml</file>
</qresource>
</RCC>
diff --git a/tests/auto/qml/qmlcachegen/tst_qmlcachegen.cpp b/tests/auto/qml/qmlcachegen/tst_qmlcachegen.cpp
index 8cfa4cb6af..5462e6c8ae 100644
--- a/tests/auto/qml/qmlcachegen/tst_qmlcachegen.cpp
+++ b/tests/auto/qml/qmlcachegen/tst_qmlcachegen.cpp
@@ -38,7 +38,9 @@
#include <private/qqmlcomponent_p.h>
#include <qtranslator.h>
-class tst_qmlcachegen: public QObject
+#include "../../shared/util.h"
+
+class tst_qmlcachegen: public QQmlDataTest
{
Q_OBJECT
@@ -66,6 +68,9 @@ private slots:
void enums();
void sourceFileIndices();
+
+ void reproducibleCache_data();
+ void reproducibleCache();
};
// A wrapper around QQmlComponent to ensure the temporary reference counts
@@ -353,12 +358,13 @@ static QQmlPrivate::CachedQmlUnit *temporaryModifiedCachedUnit = nullptr;
void tst_qmlcachegen::versionChecksForAheadOfTimeUnits()
{
- QVERIFY(QFile::exists(":/versionchecks.qml"));
- QCOMPARE(QFileInfo(":/versionchecks.qml").size(), 0);
+ QVERIFY(QFile::exists(":/data/versionchecks.qml"));
+ QCOMPARE(QFileInfo(":/data/versionchecks.qml").size(), 0);
Q_ASSERT(!temporaryModifiedCachedUnit);
QQmlMetaType::CachedUnitLookupError error = QQmlMetaType::CachedUnitLookupError::NoError;
- const QV4::CompiledData::Unit *originalUnit = QQmlMetaType::findCachedCompilationUnit(QUrl("qrc:/versionchecks.qml"), &error);
+ const QV4::CompiledData::Unit *originalUnit = QQmlMetaType::findCachedCompilationUnit(
+ QUrl("qrc:/data/versionchecks.qml"), &error);
QVERIFY(originalUnit);
QV4::CompiledData::Unit *tweakedUnit = (QV4::CompiledData::Unit *)malloc(originalUnit->unitSize);
memcpy(reinterpret_cast<void *>(tweakedUnit), reinterpret_cast<const void *>(originalUnit), originalUnit->unitSize);
@@ -366,7 +372,7 @@ void tst_qmlcachegen::versionChecksForAheadOfTimeUnits()
temporaryModifiedCachedUnit = new QQmlPrivate::CachedQmlUnit{tweakedUnit, nullptr, nullptr};
auto testHandler = [](const QUrl &url) -> const QQmlPrivate::CachedQmlUnit * {
- if (url == QUrl("qrc:/versionchecks.qml"))
+ if (url == QUrl("qrc:/data/versionchecks.qml"))
return temporaryModifiedCachedUnit;
return nullptr;
};
@@ -374,15 +380,18 @@ void tst_qmlcachegen::versionChecksForAheadOfTimeUnits()
{
QQmlMetaType::CachedUnitLookupError error = QQmlMetaType::CachedUnitLookupError::NoError;
- QVERIFY(!QQmlMetaType::findCachedCompilationUnit(QUrl("qrc:/versionchecks.qml"), &error));
+ QVERIFY(!QQmlMetaType::findCachedCompilationUnit(QUrl("qrc:/data/versionchecks.qml"), &error));
QCOMPARE(error, QQmlMetaType::CachedUnitLookupError::VersionMismatch);
}
{
QQmlEngine engine;
- QQmlComponent component(&engine, QUrl("qrc:/versionchecks.qml"));
+ QQmlComponent component(&engine, QUrl("qrc:/data/versionchecks.qml"));
QCOMPARE(component.status(), QQmlComponent::Error);
- QCOMPARE(component.errorString(), QString("qrc:/versionchecks.qml:-1 File was compiled ahead of time with an incompatible version of Qt and the original file cannot be found. Please recompile\n"));
+ QCOMPARE(component.errorString(),
+ QString("qrc:/data/versionchecks.qml:-1 File was compiled ahead of time with an "
+ "incompatible version of Qt and the original file cannot be found. Please "
+ "recompile\n"));
}
Q_ASSERT(temporaryModifiedCachedUnit);
@@ -402,12 +411,12 @@ void tst_qmlcachegen::retainedResources()
void tst_qmlcachegen::workerScripts()
{
- QVERIFY(QFile::exists(":/workerscripts/worker.js"));
- QVERIFY(QFile::exists(":/workerscripts/worker.qml"));
- QCOMPARE(QFileInfo(":/workerscripts/worker.js").size(), 0);
+ QVERIFY(QFile::exists(":/workerscripts/data/worker.js"));
+ QVERIFY(QFile::exists(":/workerscripts/data/worker.qml"));
+ QCOMPARE(QFileInfo(":/workerscripts/data/worker.js").size(), 0);
QQmlEngine engine;
- CleanlyLoadingComponent component(&engine, QUrl("qrc:///workerscripts/worker.qml"));
+ CleanlyLoadingComponent component(&engine, QUrl("qrc:///workerscripts/data/worker.qml"));
QScopedPointer<QObject> obj(component.create());
QVERIFY(!obj.isNull());
QTRY_VERIFY(obj->property("success").toBool());
@@ -504,7 +513,7 @@ void tst_qmlcachegen::trickyPaths()
void tst_qmlcachegen::qrcScriptImport()
{
QQmlEngine engine;
- CleanlyLoadingComponent component(&engine, QUrl("qrc:///jsimport.qml"));
+ CleanlyLoadingComponent component(&engine, QUrl("qrc:///data/jsimport.qml"));
QScopedPointer<QObject> obj(component.create());
QVERIFY(!obj.isNull());
QTRY_COMPARE(obj->property("value").toInt(), 42);
@@ -567,14 +576,14 @@ void tst_qmlcachegen::fsScriptImport()
void tst_qmlcachegen::moduleScriptImport()
{
QQmlEngine engine;
- CleanlyLoadingComponent component(&engine, QUrl("qrc:///jsmoduleimport.qml"));
+ CleanlyLoadingComponent component(&engine, QUrl("qrc:///data/jsmoduleimport.qml"));
QVERIFY2(!component.isError(), qPrintable(component.errorString()));
QScopedPointer<QObject> obj(component.create());
QVERIFY(!obj.isNull());
QTRY_VERIFY(obj->property("ok").toBool());
- QVERIFY(QFile::exists(":/script.mjs"));
- QCOMPARE(QFileInfo(":/script.mjs").size(), 0);
+ QVERIFY(QFile::exists(":/data/script.mjs"));
+ QCOMPARE(QFileInfo(":/data/script.mjs").size(), 0);
{
auto componentPrivate = QQmlComponentPrivate::get(&component);
@@ -587,7 +596,8 @@ void tst_qmlcachegen::moduleScriptImport()
QVERIFY(unitData->flags & QV4::CompiledData::Unit::IsESModule);
QQmlMetaType::CachedUnitLookupError error = QQmlMetaType::CachedUnitLookupError::NoError;
- const QV4::CompiledData::Unit *unitFromResources = QQmlMetaType::findCachedCompilationUnit(QUrl("qrc:/script.mjs"), &error);
+ const QV4::CompiledData::Unit *unitFromResources = QQmlMetaType::findCachedCompilationUnit(
+ QUrl("qrc:/data/script.mjs"), &error);
QVERIFY(unitFromResources);
QCOMPARE(unitFromResources, compilationUnit->unitData());
@@ -597,7 +607,7 @@ void tst_qmlcachegen::moduleScriptImport()
void tst_qmlcachegen::enums()
{
QQmlEngine engine;
- CleanlyLoadingComponent component(&engine, QUrl("qrc:///Enums.qml"));
+ CleanlyLoadingComponent component(&engine, QUrl("qrc:///data/Enums.qml"));
QScopedPointer<QObject> obj(component.create());
QVERIFY(!obj.isNull());
QTRY_COMPARE(obj->property("value").toInt(), 200);
@@ -605,16 +615,50 @@ void tst_qmlcachegen::enums()
void tst_qmlcachegen::sourceFileIndices()
{
- QVERIFY(QFile::exists(":/versionchecks.qml"));
- QCOMPARE(QFileInfo(":/versionchecks.qml").size(), 0);
+ QVERIFY(QFile::exists(":/data/versionchecks.qml"));
+ QCOMPARE(QFileInfo(":/data/versionchecks.qml").size(), 0);
QQmlMetaType::CachedUnitLookupError error = QQmlMetaType::CachedUnitLookupError::NoError;
- const QV4::CompiledData::Unit *unitFromResources = QQmlMetaType::findCachedCompilationUnit(QUrl("qrc:/versionchecks.qml"), &error);
+ const QV4::CompiledData::Unit *unitFromResources = QQmlMetaType::findCachedCompilationUnit(
+ QUrl("qrc:/data/versionchecks.qml"), &error);
QVERIFY(unitFromResources);
QVERIFY(unitFromResources->flags & QV4::CompiledData::Unit::PendingTypeCompilation);
QCOMPARE(uint(unitFromResources->sourceFileIndex), uint(0));
}
+void tst_qmlcachegen::reproducibleCache_data()
+{
+ QTest::addColumn<QString>("filePath");
+
+ QDir dir(dataDirectory());
+ for (const QString &entry : dir.entryList(QDir::Files)) {
+ QVERIFY(entry.endsWith(".qml") || entry.endsWith(".js") || entry.endsWith(".mjs"));
+ QTest::newRow(entry.toUtf8().constData()) << dir.filePath(entry);
+ }
+}
+
+void tst_qmlcachegen::reproducibleCache()
+{
+ QFETCH(QString, filePath);
+
+ QFile file(filePath);
+ QVERIFY(file.exists());
+
+ auto generate = [](const QString &path) {
+ if (!generateCache(path))
+ return QByteArray();
+ QFile generated(path + 'c');
+ [&](){ QVERIFY(generated.open(QIODevice::ReadOnly)); }();
+ const QByteArray result = generated.readAll();
+ generated.remove();
+ return result;
+ };
+
+ const QByteArray contents1 = generate(file.fileName());
+ const QByteArray contents2 = generate(file.fileName());
+ QCOMPARE(contents1, contents2);
+}
+
QTEST_GUILESS_MAIN(tst_qmlcachegen)
#include "tst_qmlcachegen.moc"