File indexing completed on 2024-05-12 05:50:10
0001 /* 0002 SPDX-FileCopyrightText: 2016 Elvis Angelaccio <elvis.angelaccio@kde.org> 0003 0004 SPDX-License-Identifier: BSD-2-Clause 0005 */ 0006 0007 #include "archiveentry.h" 0008 #include "jobs.h" 0009 #include "pluginmanager.h" 0010 #include "testhelper.h" 0011 0012 #include <QMimeDatabase> 0013 #include <QTest> 0014 0015 using namespace Kerfuffle; 0016 0017 class DeleteTest : public QObject 0018 { 0019 Q_OBJECT 0020 0021 private Q_SLOTS: 0022 void testDelete_data(); 0023 void testDelete(); 0024 0025 private: 0026 PluginManager m_pluginManager; 0027 }; 0028 0029 QTEST_GUILESS_MAIN(DeleteTest) 0030 0031 void DeleteTest::testDelete_data() 0032 { 0033 QTest::addColumn<QString>("archiveName"); 0034 QTest::addColumn<Plugin *>("plugin"); 0035 QTest::addColumn<QVector<Archive::Entry *>>("targetEntries"); 0036 QTest::addColumn<uint>("expectedEntriesCount"); 0037 QTest::addColumn<uint>("expectedRemainingEntriesCount"); 0038 0039 // Repeat the same test case for each format and for each plugin supporting the format. 0040 const QStringList formats = TestHelper::testFormats(); 0041 for (const QString &format : formats) { 0042 const QString filename = QStringLiteral("test.%1").arg(format); 0043 const auto mime = QMimeDatabase().mimeTypeForFile(filename, QMimeDatabase::MatchExtension); 0044 0045 const auto plugins = m_pluginManager.preferredWritePluginsFor(mime); 0046 for (const auto plugin : plugins) { 0047 QTest::newRow(qPrintable(QStringLiteral("delete a single file (%1, %2)").arg(format, plugin->metaData().pluginId()))) 0048 << filename << plugin << QVector<Archive::Entry *>{new Archive::Entry(this, QStringLiteral("dir1/a.txt"))} << 13u << 12u; 0049 0050 QTest::newRow(qPrintable(QStringLiteral("delete multiple files (%1, %2)").arg(format, plugin->metaData().pluginId()))) 0051 << filename << plugin 0052 << QVector<Archive::Entry *>{new Archive::Entry(this, QStringLiteral("a.txt")), new Archive::Entry(this, QStringLiteral("dir1/b.txt"))} << 13u 0053 << 11u; 0054 } 0055 } 0056 } 0057 0058 void DeleteTest::testDelete() 0059 { 0060 QTemporaryDir temporaryDir; 0061 0062 QFETCH(QString, archiveName); 0063 const QString archivePath = QStringLiteral("%1/%2").arg(temporaryDir.path(), archiveName); 0064 QVERIFY(QFile::copy(QFINDTESTDATA(QStringLiteral("data/%1").arg(archiveName)), archivePath)); 0065 0066 QFETCH(Plugin *, plugin); 0067 QVERIFY(plugin); 0068 0069 auto loadJob = Archive::load(archivePath, plugin); 0070 QVERIFY(loadJob); 0071 loadJob->setAutoDelete(false); 0072 0073 TestHelper::startAndWaitForResult(loadJob); 0074 auto archive = loadJob->archive(); 0075 QVERIFY(archive); 0076 0077 if (!archive->isValid()) { 0078 QSKIP("Could not find a plugin to handle the archive. Skipping test.", SkipSingle); 0079 } 0080 0081 QFETCH(uint, expectedEntriesCount); 0082 QCOMPARE(archive->numberOfEntries(), expectedEntriesCount); 0083 0084 QFETCH(QVector<Archive::Entry *>, targetEntries); 0085 auto deleteJob = archive->deleteFiles(targetEntries); 0086 QVERIFY(deleteJob); 0087 TestHelper::startAndWaitForResult(deleteJob); 0088 0089 QFETCH(uint, expectedRemainingEntriesCount); 0090 QCOMPARE(archive->numberOfEntries(), expectedRemainingEntriesCount); 0091 0092 loadJob->deleteLater(); 0093 archive->deleteLater(); 0094 } 0095 0096 #include "deletetest.moc"