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 "createdialog.h" 0008 #include "pluginmanager.h" 0009 0010 #include <KCollapsibleGroupBox> 0011 0012 #include <QCheckBox> 0013 #include <QComboBox> 0014 #include <QLineEdit> 0015 #include <QMimeDatabase> 0016 #include <QTest> 0017 0018 using namespace Kerfuffle; 0019 0020 class CreateDialogTest : public QObject 0021 { 0022 Q_OBJECT 0023 0024 private Q_SLOTS: 0025 void testBasicWidgets_data(); 0026 void testBasicWidgets(); 0027 void testEncryption_data(); 0028 void testEncryption(); 0029 void testHeaderEncryptionTooltip(); 0030 0031 private: 0032 PluginManager m_pluginManager; 0033 }; 0034 0035 void CreateDialogTest::testBasicWidgets_data() 0036 { 0037 QTest::addColumn<QString>("mimeType"); 0038 0039 QTest::newRow("tar") << QStringLiteral("application/x-tar"); 0040 QTest::newRow("targzip") << QStringLiteral("application/x-compressed-tar"); 0041 QTest::newRow("tarbzip") << QMimeDatabase().mimeTypeForFile(QStringLiteral("dummy.tar.bz2"), QMimeDatabase::MatchExtension).name(); 0042 QTest::newRow("tarZ") << QStringLiteral("application/x-tarz"); 0043 QTest::newRow("tarxz") << QStringLiteral("application/x-xz-compressed-tar"); 0044 QTest::newRow("tarlzma") << QStringLiteral("application/x-lzma-compressed-tar"); 0045 QTest::newRow("tarlzip") << QStringLiteral("application/x-lzip-compressed-tar"); 0046 0047 const auto writeMimeTypes = m_pluginManager.supportedWriteMimeTypes(); 0048 0049 if (writeMimeTypes.contains(QLatin1String("application/zip"))) { 0050 QTest::newRow("zip") << QStringLiteral("application/zip"); 0051 } else { 0052 qDebug() << "zip format not available in CreateDialog, skipping test."; 0053 } 0054 0055 if (writeMimeTypes.contains(QLatin1String("application/x-7z-compressed"))) { 0056 QTest::newRow("7z") << QStringLiteral("application/x-7z-compressed"); 0057 } else { 0058 qDebug() << "7z format not available in CreateDialog, skipping test."; 0059 } 0060 0061 if (writeMimeTypes.contains(QLatin1String("application/vnd.rar"))) { 0062 QTest::newRow("rar") << QStringLiteral("application/vnd.rar"); 0063 } else { 0064 qDebug() << "rar format not available in CreateDialog, skipping test."; 0065 } 0066 0067 if (writeMimeTypes.contains(QLatin1String("application/x-lrzip-compressed-tar"))) { 0068 QTest::newRow("tarlrzip") << QStringLiteral("application/x-lrzip-compressed-tar"); 0069 } else { 0070 qDebug() << "tar.lrzip format not available in CreateDialog, skipping test."; 0071 } 0072 0073 if (writeMimeTypes.contains(QLatin1String("application/x-tzo"))) { 0074 QTest::newRow("tarlzop") << QStringLiteral("application/x-tzo"); 0075 } else { 0076 qDebug() << "tar.lzo format not available in CreateDialog, skipping test."; 0077 } 0078 } 0079 0080 void CreateDialogTest::testBasicWidgets() 0081 { 0082 CreateDialog *dialog = new CreateDialog(nullptr, QString(), QUrl()); 0083 0084 auto fileNameLineEdit = dialog->findChild<QLineEdit *>(QStringLiteral("filenameLineEdit")); 0085 auto archiveTypeComboBox = dialog->findChild<QComboBox *>(QStringLiteral("mimeComboBox")); 0086 QVERIFY(fileNameLineEdit); 0087 QVERIFY(archiveTypeComboBox); 0088 0089 QFETCH(QString, mimeType); 0090 const QMimeType mime = QMimeDatabase().mimeTypeForName(mimeType); 0091 0092 // Test if combobox is updated when user enters a filename with suffix. 0093 fileNameLineEdit->setText(QStringLiteral("basename.%1").arg(mime.preferredSuffix())); 0094 QCOMPARE(archiveTypeComboBox->currentText(), mime.comment()); 0095 0096 // Test if suffix is added correctly when the user selects an archive type in combobox. 0097 fileNameLineEdit->setText(QStringLiteral("basename")); 0098 archiveTypeComboBox->setCurrentText(mime.comment()); 0099 QCOMPARE(QFileInfo(dialog->selectedUrl().toLocalFile()).fileName(), QStringLiteral("basename.%1").arg(mime.preferredSuffix())); 0100 } 0101 0102 void CreateDialogTest::testEncryption_data() 0103 { 0104 QTest::addColumn<QString>("filter"); 0105 QTest::addColumn<bool>("isEncryptionAvailable"); 0106 QTest::addColumn<bool>("isHeaderEncryptionAvailable"); 0107 0108 QTest::newRow("tar") << QStringLiteral("application/x-compressed-tar") << false << false; 0109 0110 if (m_pluginManager.supportedWriteMimeTypes().contains(QLatin1String("application/zip"))) { 0111 QTest::newRow("zip") << QStringLiteral("application/zip") << true << false; 0112 } else { 0113 qDebug() << "zip format not available in CreateDialog, skipping test."; 0114 } 0115 0116 if (m_pluginManager.supportedWriteMimeTypes().contains(QLatin1String("application/x-7z-compressed"))) { 0117 QTest::newRow("7z") << QStringLiteral("application/x-7z-compressed") << true << true; 0118 } else { 0119 qDebug() << "7z format not available in CreateDialog, skipping test."; 0120 } 0121 0122 if (m_pluginManager.supportedWriteMimeTypes().contains(QLatin1String("application/vnd.rar"))) { 0123 QTest::newRow("rar") << QStringLiteral("application/vnd.rar") << true << true; 0124 } else { 0125 qDebug() << "rar format not available in CreateDialog, skipping test."; 0126 } 0127 } 0128 0129 void CreateDialogTest::testEncryption() 0130 { 0131 CreateDialog *dialog = new CreateDialog(nullptr, QString(), QUrl()); 0132 0133 QFETCH(QString, filter); 0134 QFETCH(bool, isEncryptionAvailable); 0135 QFETCH(bool, isHeaderEncryptionAvailable); 0136 0137 auto collapsibleEncryption = dialog->findChild<KCollapsibleGroupBox *>(QStringLiteral("collapsibleEncryption")); 0138 auto encryptHeaderCheckBox = dialog->findChild<QCheckBox *>(QStringLiteral("encryptHeaderCheckBox")); 0139 QVERIFY(collapsibleEncryption); 0140 QVERIFY(encryptHeaderCheckBox); 0141 0142 QVERIFY(dialog->setMimeType(filter)); 0143 0144 // Encryption is initially not enabled. 0145 QVERIFY(!dialog->isEncryptionEnabled()); 0146 QVERIFY(!dialog->isHeaderEncryptionEnabled()); 0147 0148 if (isEncryptionAvailable) { 0149 QVERIFY(dialog->isEncryptionAvailable()); 0150 0151 collapsibleEncryption->setExpanded(true); 0152 QVERIFY(dialog->isEncryptionEnabled()); 0153 0154 if (isHeaderEncryptionAvailable) { 0155 QVERIFY(dialog->isHeaderEncryptionAvailable()); 0156 // Header encryption is enabled by default, if available. 0157 QVERIFY(dialog->isHeaderEncryptionEnabled()); 0158 0159 encryptHeaderCheckBox->setChecked(false); 0160 QVERIFY(!dialog->isHeaderEncryptionEnabled()); 0161 } else { 0162 QVERIFY(!dialog->isHeaderEncryptionAvailable()); 0163 } 0164 0165 collapsibleEncryption->setExpanded(false); 0166 QVERIFY(!dialog->isEncryptionEnabled()); 0167 QVERIFY(!dialog->isHeaderEncryptionEnabled()); 0168 } else { 0169 QVERIFY(!dialog->isEncryptionAvailable()); 0170 QVERIFY(!dialog->isEncryptionEnabled()); 0171 QVERIFY(!dialog->isHeaderEncryptionAvailable()); 0172 QVERIFY(!dialog->isHeaderEncryptionEnabled()); 0173 } 0174 } 0175 0176 void CreateDialogTest::testHeaderEncryptionTooltip() 0177 { 0178 if (!m_pluginManager.supportedWriteMimeTypes().contains(QLatin1String("application/zip"))) { 0179 QSKIP("zip format not available in CreateDialog, skipping test.", SkipSingle); 0180 } 0181 0182 CreateDialog *dialog = new CreateDialog(nullptr, QString(), QUrl()); 0183 0184 auto collapsibleEncryption = dialog->findChild<KCollapsibleGroupBox *>(QStringLiteral("collapsibleEncryption")); 0185 auto encryptHeaderCheckBox = dialog->findChild<QCheckBox *>(QStringLiteral("encryptHeaderCheckBox")); 0186 QVERIFY(collapsibleEncryption); 0187 QVERIFY(encryptHeaderCheckBox); 0188 0189 collapsibleEncryption->setExpanded(true); 0190 0191 QVERIFY(dialog->setMimeType(QStringLiteral("application/zip"))); 0192 QVERIFY(!encryptHeaderCheckBox->toolTip().isEmpty()); 0193 0194 // If we set a tar filter after the zip one, ensure that the old zip's tooltip is not shown anymore. 0195 QVERIFY(dialog->setMimeType(QStringLiteral("application/x-compressed-tar"))); 0196 QVERIFY(encryptHeaderCheckBox->toolTip().isEmpty()); 0197 } 0198 0199 QTEST_MAIN(CreateDialogTest) 0200 0201 #include "createdialogtest.moc"