Utils: Add simple unittest for karchive

Change-Id: Ib2048c1a8adf9887f936126b476e6fb95e36a72d
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
Marcus Tillmanns
2024-12-09 14:42:06 +01:00
parent 594edc49dc
commit 5bf709b628
5 changed files with 124 additions and 0 deletions

View File

@@ -21,3 +21,4 @@ add_subdirectory(templateengine)
add_subdirectory(treemodel)
add_subdirectory(text)
add_subdirectory(unixdevicefileaccess)
add_subdirectory(archive)

View File

@@ -0,0 +1,4 @@
add_qtc_test(tst_utils_archive
DEPENDS Utils karchive
SOURCES tst_archive.cpp
)

View File

@@ -0,0 +1,12 @@
Project {
QtcAutotest {
name: "Archive autotest"
Depends { name: "Utils" }
Depends { name: "karchive" }
files: [
"tst_archive.cpp",
]
}
}

View 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"

View File

@@ -4,6 +4,7 @@ Project {
name: "Utils autotests"
references: [
"ansiescapecodehandler/ansiescapecodehandler.qbs",
"archive/archive.qbs",
"async/async.qbs",
"commandline/commandline.qbs",
"deviceshell/deviceshell.qbs",