void tst_qmldiskcache::cacheResources() { const QString cacheDirectory = QStandardPaths::writableLocation(QStandardPaths::CacheLocation); QVERIFY(QDir::root().mkpath(cacheDirectory)); const QString qmlCacheDirectory = cacheDirectory + QLatin1String("/qmlcache/"); QVERIFY(QDir(qmlCacheDirectory).removeRecursively()); QVERIFY(QDir::root().mkpath(qmlCacheDirectory)); QVERIFY(QDir(qmlCacheDirectory).entryList(QDir::NoDotAndDotDot).isEmpty()); QQmlEngine engine; { CleanlyLoadingComponent component(&engine, QUrl("qrc:/test.qml")); QScopedPointer<QObject> obj(component.create()); QVERIFY(!obj.isNull()); QCOMPARE(obj->property("value").toInt(), 20); } const QStringList entries = QDir(qmlCacheDirectory).entryList(QDir::NoDotAndDotDot | QDir::Files); QCOMPARE(entries.count(), 1); QDateTime cacheFileTimeStamp; { QFile cacheFile(qmlCacheDirectory + QLatin1Char('/') + entries.constFirst()); QVERIFY2(cacheFile.open(QIODevice::ReadOnly), qPrintable(cacheFile.errorString())); QV4::CompiledData::Unit unit; QVERIFY(cacheFile.read(reinterpret_cast<char *>(&unit), sizeof(unit)) == sizeof(unit)); cacheFileTimeStamp = QFileInfo(cacheFile.fileName()).lastModified(); QDateTime referenceTimeStamp = QFileInfo(":/test.qml").lastModified(); if (!referenceTimeStamp.isValid()) referenceTimeStamp = QFileInfo(QCoreApplication::applicationFilePath()).lastModified(); QCOMPARE(qint64(unit.sourceTimeStamp), referenceTimeStamp.toMSecsSinceEpoch()); } waitForFileSystem(); { CleanlyLoadingComponent component(&engine, QUrl("qrc:///test.qml")); QScopedPointer<QObject> obj(component.create()); QVERIFY(!obj.isNull()); QCOMPARE(obj->property("value").toInt(), 20); } { const QStringList entries = QDir(qmlCacheDirectory).entryList(QDir::NoDotAndDotDot | QDir::Files); QCOMPARE(entries.count(), 1); QCOMPARE(QFileInfo(qmlCacheDirectory + QLatin1Char('/') + entries.constFirst()).lastModified().toMSecsSinceEpoch(), cacheFileTimeStamp.toMSecsSinceEpoch()); } }