forked from qt-creator/qt-creator
Utils: Add simple unittest for karchive
Change-Id: Ib2048c1a8adf9887f936126b476e6fb95e36a72d Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -21,3 +21,4 @@ add_subdirectory(templateengine)
|
|||||||
add_subdirectory(treemodel)
|
add_subdirectory(treemodel)
|
||||||
add_subdirectory(text)
|
add_subdirectory(text)
|
||||||
add_subdirectory(unixdevicefileaccess)
|
add_subdirectory(unixdevicefileaccess)
|
||||||
|
add_subdirectory(archive)
|
||||||
|
4
tests/auto/utils/archive/CMakeLists.txt
Normal file
4
tests/auto/utils/archive/CMakeLists.txt
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
add_qtc_test(tst_utils_archive
|
||||||
|
DEPENDS Utils karchive
|
||||||
|
SOURCES tst_archive.cpp
|
||||||
|
)
|
12
tests/auto/utils/archive/archive.qbs
Normal file
12
tests/auto/utils/archive/archive.qbs
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
Project {
|
||||||
|
QtcAutotest {
|
||||||
|
name: "Archive autotest"
|
||||||
|
|
||||||
|
Depends { name: "Utils" }
|
||||||
|
Depends { name: "karchive" }
|
||||||
|
|
||||||
|
files: [
|
||||||
|
"tst_archive.cpp",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
106
tests/auto/utils/archive/tst_archive.cpp
Normal file
106
tests/auto/utils/archive/tst_archive.cpp
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
// Copyright (C) 2024 The Qt Company Ltd.
|
||||||
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
|
|
||||||
|
#include <utils/filepath.h>
|
||||||
|
|
||||||
|
#include <k7zip.h>
|
||||||
|
#include <karchive.h>
|
||||||
|
#include <ktar.h>
|
||||||
|
#include <kzip.h>
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include <QtTest>
|
||||||
|
|
||||||
|
using namespace Utils;
|
||||||
|
|
||||||
|
static const QByteArray testData = R"(Hello, World!
|
||||||
|
Compress me please!
|
||||||
|
Thank you!
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut
|
||||||
|
labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores
|
||||||
|
et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut
|
||||||
|
labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores
|
||||||
|
et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut
|
||||||
|
labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores
|
||||||
|
et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut
|
||||||
|
labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores
|
||||||
|
et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut
|
||||||
|
labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores
|
||||||
|
et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
|
||||||
|
)";
|
||||||
|
|
||||||
|
class tst_Archive : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
void testArchive(KArchive &&archive, const FilePath &testFile)
|
||||||
|
{
|
||||||
|
QVERIFY(testFile.writeFileContents(testData));
|
||||||
|
|
||||||
|
QVERIFY(archive.open(QIODevice::WriteOnly));
|
||||||
|
QVERIFY(archive.addLocalFile(testFile.toFSPathString(), "data/test.txt"));
|
||||||
|
QVERIFY(archive.close());
|
||||||
|
QVERIFY(testFile.removeFile());
|
||||||
|
QVERIFY(!testFile.exists());
|
||||||
|
}
|
||||||
|
|
||||||
|
void testUnarchive(KArchive &&archive, const FilePath &testFile)
|
||||||
|
{
|
||||||
|
QVERIFY(!testFile.exists());
|
||||||
|
|
||||||
|
QVERIFY(archive.open(QIODevice::ReadOnly));
|
||||||
|
QVERIFY(archive.directory()->entries().contains("data"));
|
||||||
|
QVERIFY(archive.directory()->entry("data"));
|
||||||
|
QVERIFY(archive.directory()->entry("data")->isDirectory());
|
||||||
|
auto dataDir = static_cast<const KArchiveDirectory *>(archive.directory()->entry("data"));
|
||||||
|
QVERIFY(dataDir->entries().contains("test.txt"));
|
||||||
|
QVERIFY(dataDir->entry("test.txt")->isFile());
|
||||||
|
QVERIFY(dataDir->file("test.txt")->copyTo("."));
|
||||||
|
|
||||||
|
QVERIFY(testFile.exists());
|
||||||
|
auto contents = testFile.fileContents();
|
||||||
|
QVERIFY(contents);
|
||||||
|
QCOMPARE(*contents, QByteArray(testData));
|
||||||
|
QVERIFY(testFile.removeFile());
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class ARCHIVE>
|
||||||
|
void unArchive(const FilePath &archivePath, bool testSize = true)
|
||||||
|
{
|
||||||
|
FilePath p = FilePath::fromString("test.txt");
|
||||||
|
|
||||||
|
testArchive(ARCHIVE(archivePath.toFSPathString()), p);
|
||||||
|
QVERIFY(archivePath.exists());
|
||||||
|
qDebug() << "Archive size:" << archivePath.fileSize() << "(expected roughly less than"
|
||||||
|
<< testData.size() << ")";
|
||||||
|
if (testSize)
|
||||||
|
QVERIFY(archivePath.fileSize() < testData.size());
|
||||||
|
testUnarchive(ARCHIVE(archivePath.toFSPathString()), p);
|
||||||
|
QVERIFY(archivePath.removeFile());
|
||||||
|
}
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void initTestCase() {}
|
||||||
|
|
||||||
|
void cleanupTestCase() {}
|
||||||
|
|
||||||
|
void test7zip() { unArchive<K7Zip>(FilePath::fromString("test.7z")); }
|
||||||
|
void testZip() { unArchive<KZip>(FilePath::fromString("test.zip")); }
|
||||||
|
void testTar() { unArchive<KTar>(FilePath::fromString("test.tar"), false); }
|
||||||
|
void testXZ() { unArchive<KTar>(FilePath::fromString("test.tar.xz")); }
|
||||||
|
void testGZ() { unArchive<KTar>(FilePath::fromString("test.tar.gz")); }
|
||||||
|
void testBZip2() { unArchive<KTar>(FilePath::fromString("test.tar.bz2")); }
|
||||||
|
};
|
||||||
|
|
||||||
|
QTEST_GUILESS_MAIN(tst_Archive)
|
||||||
|
|
||||||
|
#include "tst_archive.moc"
|
@@ -4,6 +4,7 @@ Project {
|
|||||||
name: "Utils autotests"
|
name: "Utils autotests"
|
||||||
references: [
|
references: [
|
||||||
"ansiescapecodehandler/ansiescapecodehandler.qbs",
|
"ansiescapecodehandler/ansiescapecodehandler.qbs",
|
||||||
|
"archive/archive.qbs",
|
||||||
"async/async.qbs",
|
"async/async.qbs",
|
||||||
"commandline/commandline.qbs",
|
"commandline/commandline.qbs",
|
||||||
"deviceshell/deviceshell.qbs",
|
"deviceshell/deviceshell.qbs",
|
||||||
|
Reference in New Issue
Block a user