summaryrefslogtreecommitdiffstats
path: root/tests/auto/installer/lib7zarchive/tst_lib7zarchive.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/installer/lib7zarchive/tst_lib7zarchive.cpp')
-rw-r--r--tests/auto/installer/lib7zarchive/tst_lib7zarchive.cpp149
1 files changed, 149 insertions, 0 deletions
diff --git a/tests/auto/installer/lib7zarchive/tst_lib7zarchive.cpp b/tests/auto/installer/lib7zarchive/tst_lib7zarchive.cpp
new file mode 100644
index 000000000..a94b0f818
--- /dev/null
+++ b/tests/auto/installer/lib7zarchive/tst_lib7zarchive.cpp
@@ -0,0 +1,149 @@
+/**************************************************************************
+**
+** Copyright (C) 2021 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Qt Installer Framework.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+**************************************************************************/
+
+#include <lib7z_facade.h>
+#include <lib7zarchive.h>
+#include <fileutils.h>
+
+#include <QDir>
+#include <QObject>
+#include <QTemporaryFile>
+#include <QTest>
+
+using namespace QInstaller;
+
+class tst_lib7zarchive : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void initTestCase()
+ {
+ Lib7z::initSevenZ();
+
+ m_file.path = "valid";
+ m_file.compressedSize = 836;
+ m_file.uncompressedSize = 5242880;
+ m_file.isDirectory = false;
+ m_file.archiveIndex = QPoint(0, 0);
+ m_file.utcTime = QDateTime(QDate::fromJulianDay(2456413), QTime(10, 50, 42), Qt::UTC);
+ }
+
+ void testIsSupportedArchive()
+ {
+ Lib7zArchive archive(":///data/valid.7z");
+ QVERIFY(archive.open(QIODevice::ReadOnly));
+ QCOMPARE(archive.isSupported(), true);
+ archive.close();
+
+ archive.setFilename(":///data/invalid.7z");
+ QVERIFY(archive.open(QIODevice::ReadOnly));
+ QCOMPARE(archive.isSupported(), false);
+ }
+
+ void testListArchive()
+ {
+
+ Lib7zArchive archive(":///data/valid.7z");
+ QVERIFY(archive.open(QIODevice::ReadOnly));
+
+ QVector<ArchiveEntry> files = archive.list();
+ QCOMPARE(files.count(), 1);
+ QCOMPARE(files.first(), m_file);
+ archive.close();
+
+ archive.setFilename(":///data/invalid.7z");
+ QVERIFY(archive.open(QIODevice::ReadOnly));
+ files = archive.list();
+
+ QVERIFY(files.isEmpty());
+ QCOMPARE(archive.errorString(), QString("Cannot open archive \":///data/invalid.7z\"."));
+ }
+
+ void testCreateArchive()
+ {
+ QString path1 = tempSourceFile("Source File 1.");
+ QString path2 = tempSourceFile("Source File 2.");
+
+ QString filename = generateTemporaryFileName();
+ Lib7zArchive target(filename);
+ QVERIFY(target.open(QIODevice::ReadWrite));
+ QVERIFY(target.create(QStringList() << path1 << path2));
+ QCOMPARE(target.list().count(), 2);
+ target.close();
+ QVERIFY(QFile::remove(filename));
+
+
+ path1 = tempSourceFile(
+ "Source File 1.",
+ QDir::tempPath() + "/temp file with spaces.XXXXXX"
+ );
+ path2 = tempSourceFile(
+ "Source File 2.",
+ QDir::tempPath() + "/temp file with spaces.XXXXXX"
+ );
+
+ filename = QDir::tempPath() + "/target file with spaces.XXXXXX";
+ target.setFilename(filename);
+ QVERIFY(target.open(QIODevice::ReadWrite));
+ QVERIFY(target.create(QStringList() << path1 << path2));
+ QCOMPARE(target.list().count(), 2);
+ target.close();
+ QVERIFY(QFile::remove(filename));
+ }
+
+ void testExtractArchive()
+ {
+ Lib7zArchive source(":///data/valid.7z");
+ QVERIFY(source.open(QIODevice::ReadOnly));
+
+ QVERIFY(source.extract(QDir::tempPath()));
+ QCOMPARE(QFile::exists(QDir::tempPath() + QString("/valid")), true);
+ QVERIFY(QFile::remove(QDir::tempPath() + QString("/valid")));
+ }
+
+private:
+ QString tempSourceFile(const QByteArray &data, const QString &templateName = QString())
+ {
+ QTemporaryFile source;
+ if (!templateName.isEmpty()) {
+ source.setFileTemplate(templateName);
+ }
+ source.open();
+ source.write(data);
+ source.setAutoRemove(false);
+ return source.fileName();
+ }
+
+private:
+ ArchiveEntry m_file;
+};
+
+QTEST_MAIN(tst_lib7zarchive)
+
+#include "tst_lib7zarchive.moc"