forked from qt-creator/qt-creator
Tests: Add test for async copying via FilePath
Change-Id: Idbc18d43ea81d395cc76f7bf9cfb32df1350b3ed Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -25,6 +25,7 @@
|
|||||||
|
|
||||||
#include <QtTest>
|
#include <QtTest>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
#include <QRandomGenerator>
|
||||||
|
|
||||||
#include <utils/fileutils.h>
|
#include <utils/fileutils.h>
|
||||||
#include <utils/link.h>
|
#include <utils/link.h>
|
||||||
@@ -36,7 +37,8 @@ class tst_fileutils : public QObject
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
signals:
|
||||||
|
void asyncTestDone(); // test internal helper signal
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void initTestCase();
|
void initTestCase();
|
||||||
@@ -60,15 +62,22 @@ private slots:
|
|||||||
void pathAppended_data();
|
void pathAppended_data();
|
||||||
void pathAppended();
|
void pathAppended();
|
||||||
|
|
||||||
|
void asyncLocalCopy();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QTemporaryDir tempDir;
|
QTemporaryDir tempDir;
|
||||||
QString rootPath;
|
QString rootPath;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void touch(const QDir &dir, const QString &filename)
|
static void touch(const QDir &dir, const QString &filename, bool fill)
|
||||||
{
|
{
|
||||||
QFile file(dir.absoluteFilePath(filename));
|
QFile file(dir.absoluteFilePath(filename));
|
||||||
file.open(QIODevice::WriteOnly);
|
file.open(QIODevice::WriteOnly);
|
||||||
|
if (fill) {
|
||||||
|
QRandomGenerator *random = QRandomGenerator::global();
|
||||||
|
for (int i = 0; i < 10; ++i)
|
||||||
|
file.write(QString::number(random->generate(), 16).toUtf8());
|
||||||
|
}
|
||||||
file.close();
|
file.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,10 +91,13 @@ void tst_fileutils::initTestCase()
|
|||||||
dir.mkpath("a/x/y/z");
|
dir.mkpath("a/x/y/z");
|
||||||
dir.mkpath("a/b/x/y/z");
|
dir.mkpath("a/b/x/y/z");
|
||||||
dir.mkpath("x/y/z");
|
dir.mkpath("x/y/z");
|
||||||
touch(dir, "a/b/c/d/file1.txt");
|
touch(dir, "a/b/c/d/file1.txt", false);
|
||||||
touch(dir, "a/x/y/z/file2.txt");
|
touch(dir, "a/x/y/z/file2.txt", false);
|
||||||
touch(dir, "a/file3.txt");
|
touch(dir, "a/file3.txt", false);
|
||||||
touch(dir, "x/y/file4.txt");
|
touch(dir, "x/y/file4.txt", false);
|
||||||
|
|
||||||
|
// initialize test for tst_fileutils::asyncLocalCopy()
|
||||||
|
touch(dir, "x/y/fileToCopy.txt", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_fileutils::parentDir_data()
|
void tst_fileutils::parentDir_data()
|
||||||
@@ -495,5 +507,24 @@ void tst_fileutils::pathAppended_data()
|
|||||||
QTest::newRow("u4") << "a/b" << "c/d" << "a/b/c/d";
|
QTest::newRow("u4") << "a/b" << "c/d" << "a/b/c/d";
|
||||||
}
|
}
|
||||||
|
|
||||||
QTEST_APPLESS_MAIN(tst_fileutils)
|
void tst_fileutils::asyncLocalCopy()
|
||||||
|
{
|
||||||
|
const FilePath orig = FilePath::fromString(rootPath).pathAppended("x/y/fileToCopy.txt");
|
||||||
|
QVERIFY(orig.exists());
|
||||||
|
const FilePath dest = FilePath::fromString(rootPath).pathAppended("x/fileToCopyDest.txt");
|
||||||
|
auto afterCopy = [&orig, &dest, this] (bool result) {
|
||||||
|
QVERIFY(result);
|
||||||
|
// check existence, size and content
|
||||||
|
QVERIFY(dest.exists());
|
||||||
|
QCOMPARE(dest.fileSize(), orig.fileSize());
|
||||||
|
QCOMPARE(dest.fileContents(), orig.fileContents());
|
||||||
|
emit asyncTestDone();
|
||||||
|
};
|
||||||
|
QSignalSpy spy(this, &tst_fileutils::asyncTestDone);
|
||||||
|
orig.asyncCopyFile(afterCopy, dest);
|
||||||
|
// we usually have already received the signal, but if it fails wait 3s
|
||||||
|
QVERIFY(spy.count() == 1 || spy.wait(3000));
|
||||||
|
}
|
||||||
|
|
||||||
|
QTEST_MAIN(tst_fileutils)
|
||||||
#include "tst_fileutils.moc"
|
#include "tst_fileutils.moc"
|
||||||
|
Reference in New Issue
Block a user