Use qrc for test data in QFileInfo test on all platforms

To make the test compatible with cross-compilation, we need
to bundle test data in qrc, and then extract files to the file
system during initialization. We did this for Android before,
but the change is required on many platforms and since it will
also work on desktop platforms, we consistently just do it this
way everywhere.

Change-Id: I7f65bd9e1dd6f217e6adffda44a40da7599cfe72
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
This commit is contained in:
Eskil Abrahamsen Blomfeldt 2015-02-12 13:35:03 +01:00
parent 72d5c84407
commit fd18d13612
3 changed files with 13 additions and 35 deletions

View File

@ -2,13 +2,8 @@ CONFIG += testcase
TARGET = tst_qfileinfo
QT = core-private testlib
SOURCES = tst_qfileinfo.cpp
RESOURCES += qfileinfo.qrc
TESTDATA += qfileinfo.qrc qfileinfo.pro tst_qfileinfo.cpp resources/file1 resources/file1.ext1 resources/file1.ext1.ext2
RESOURCES += qfileinfo.qrc \
testdata.qrc
win32*:!wince*:!winrt:LIBS += -ladvapi32 -lnetapi32
DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
android:!android-no-sdk: {
RESOURCES += android_testdata.qrc
}

View File

@ -1,5 +1,5 @@
<RCC>
<qresource prefix="/android_testdata">
<qresource prefix="/testdata">
<file>resources/file1</file>
<file>resources/file1.ext1</file>
<file>resources/file1.ext1.ext2</file>

View File

@ -265,40 +265,22 @@ private slots:
private:
const QString m_currentDir;
QString m_dataPath;
QString m_sourceFile;
QString m_proFile;
QString m_resourcesDir;
QTemporaryDir m_dir;
};
void tst_QFileInfo::initTestCase()
{
#if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_NO_SDK)
QString dataPath = QStandardPaths::writableLocation(QStandardPaths::CacheLocation);
QString resourceSourcePath = QStringLiteral(":/android_testdata");
QDirIterator it(resourceSourcePath, QDirIterator::Subdirectories);
while (it.hasNext()) {
it.next();
m_dataPath = QEXTRACTTESTDATA("/testdata");
QVERIFY(!m_dataPath.isEmpty());
QFileInfo fileInfo = it.fileInfo();
if (!fileInfo.isDir()) {
QString destination = dataPath + QLatin1Char('/') + fileInfo.filePath().mid(resourceSourcePath.length());
QFileInfo destinationFileInfo(destination);
if (!destinationFileInfo.exists()) {
QDir().mkpath(destinationFileInfo.path());
if (!QFile::copy(fileInfo.filePath(), destination))
qWarning("Failed to copy %s", qPrintable(fileInfo.filePath()));
}
}
}
m_sourceFile = dataPath + QStringLiteral("/tst_qfileinfo.cpp");
m_resourcesDir = dataPath + QStringLiteral("/resources");
#else
m_sourceFile = QFINDTESTDATA("tst_qfileinfo.cpp");
m_resourcesDir = QFINDTESTDATA("resources");
#endif
m_sourceFile = m_dataPath + QStringLiteral("/tst_qfileinfo.cpp");
m_resourcesDir = m_dataPath + QStringLiteral("/resources");
m_proFile = m_dataPath + QStringLiteral("/tst_qfileinfo.pro");
QVERIFY(!m_sourceFile.isEmpty());
QVERIFY(!m_resourcesDir.isEmpty());
QVERIFY(m_dir.isValid());
QVERIFY(QDir::setCurrent(m_dir.path()));
}
@ -306,6 +288,7 @@ void tst_QFileInfo::initTestCase()
void tst_QFileInfo::cleanupTestCase()
{
QDir::setCurrent(m_currentDir); // Release temporary directory so that it can be deleted on Windows
QDir(m_dataPath).removeRecursively();
}
// Testing get/set functions
@ -1622,7 +1605,7 @@ void tst_QFileInfo::isExecutable()
QFileInfo fi(appPath);
QCOMPARE(fi.isExecutable(), true);
QCOMPARE(QFileInfo(QFINDTESTDATA("qfileinfo.pro")).isExecutable(), false);
QCOMPARE(QFileInfo(m_proFile).isExecutable(), false);
#ifdef Q_OS_UNIX
QFile::remove("link.lnk");
@ -1634,7 +1617,7 @@ void tst_QFileInfo::isExecutable()
QFile::remove("link.lnk");
// Symlink to .pro file
QFile proFile(QFINDTESTDATA("qfileinfo.pro"));
QFile proFile(m_proFile);
QVERIFY(proFile.link("link.lnk"));
QCOMPARE(QFileInfo("link.lnk").isExecutable(), false);
QFile::remove("link.lnk");