Warning, file /frameworks/kio/autotests/kfilefiltercombotest.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002     This file is part of the KDE Frameworks
0003     SPDX-FileCopyrightText: 2022 Nicolas Fella <nicolas.fella@gmx.de>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0006 */
0007 
0008 #include <QTest>
0009 
0010 #include "kfilefiltercombo.h"
0011 
0012 class KFileFilterComboTest : public QObject
0013 {
0014     Q_OBJECT
0015 private Q_SLOTS:
0016     void initTestCase();
0017     void testSetFilter();
0018     void testSetFilter_data();
0019     void testDefaultFilter();
0020     void testSetMimeFilter();
0021     void testSetMimeFilter_data();
0022     void testIsMimeFilter();
0023     void testSetMimeFilterDefault();
0024     void testSetMimeFilterDefault_data();
0025     void testFilters();
0026     void testFilters_data();
0027     void testFiltersMime();
0028     void testFiltersMime_data();
0029     void testShowsAllFiles();
0030     void testShowsAllFiles_data();
0031 };
0032 
0033 void KFileFilterComboTest::initTestCase()
0034 {
0035     QLocale::setDefault(QLocale::c());
0036     qputenv("LC_ALL", "en_US.UTF-8");
0037     qputenv("LANG", "en_US.UTF-8");
0038     qputenv("LANGUAGE", "en");
0039 }
0040 
0041 void KFileFilterComboTest::testSetFilter()
0042 {
0043     QFETCH(QString, filterString);
0044     QFETCH(QStringList, expectedComboboxText);
0045 
0046     KFileFilterCombo combo;
0047     combo.setFilter(filterString);
0048 
0049     QCOMPARE(combo.count(), expectedComboboxText.count());
0050 
0051     for (int i = 0; i < combo.count(); ++i) {
0052         const QString text = combo.itemData(i, Qt::DisplayRole).toString();
0053         QCOMPARE(text, expectedComboboxText[i]);
0054     }
0055 }
0056 
0057 void KFileFilterComboTest::testSetFilter_data()
0058 {
0059     QTest::addColumn<QString>("filterString");
0060     QTest::addColumn<QStringList>("expectedComboboxText");
0061 
0062     QTest::addRow("extension_name") << "*.cpp|Sources (*.cpp)" << QStringList{"Sources (*.cpp)"};
0063     QTest::addRow("multiple_filter") << "*.cpp|Sources (*.cpp)\n*.h|Header files" << QStringList{"Sources (*.cpp)", "Header files"};
0064     QTest::addRow("mutiple_extension_multiple_filter")
0065         << "*.cpp *.cc *.C|C++ Source Files\n*.h *.H|Header files" << QStringList{"C++ Source Files", "Header files"};
0066     QTest::addRow("pattern_only") << "*.cpp" << QStringList{"*.cpp"};
0067 
0068     // must handle an unescaped slash https://bugs.kde.org/show_bug.cgi?id=463309
0069     QTest::addRow("slash") << "*.c *.cpp|C/C++ Files" << QStringList{"C/C++ Files"};
0070 
0071     QString k3bFilter =
0072         "*|All Files\naudio/x-mp3 audio/x-wav application/x-ogg |Sound Files\naudio/x-wav |Wave Sound Files\naudio/x-mp3 |MP3 Sound Files\napplication/x-ogg "
0073         "|Ogg Vorbis Sound Files\nvideo/mpeg |MPEG Video Files";
0074     QTest::addRow("k3b") << k3bFilter
0075                          << QStringList{"All Files", "Sound Files", "Wave Sound Files", "MP3 Sound Files", "Ogg Vorbis Sound Files", "MPEG Video Files"};
0076 }
0077 
0078 void KFileFilterComboTest::testDefaultFilter()
0079 {
0080     KFileFilterCombo combo;
0081     combo.setDefaultFilter("*.cpp|Sources (*.cpp)");
0082 
0083     combo.setFilter(QString());
0084     QCOMPARE(combo.itemData(0, Qt::DisplayRole).toString(), "Sources (*.cpp)");
0085 
0086     combo.setFilter("*.png|PNG Image (*.png)");
0087     QCOMPARE(combo.itemData(0, Qt::DisplayRole).toString(), "PNG Image (*.png)");
0088 
0089     combo.setFilter(QString());
0090     QCOMPARE(combo.itemData(0, Qt::DisplayRole).toString(), "Sources (*.cpp)");
0091 }
0092 
0093 void KFileFilterComboTest::testSetMimeFilter_data()
0094 {
0095     QTest::addColumn<QStringList>("mimeTypes");
0096     QTest::addColumn<QString>("defaultType");
0097     QTest::addColumn<QStringList>("expectedComboboxText");
0098 
0099     QTest::addRow("one_mime") << QStringList{"image/png"} << "" << QStringList{"PNG image"};
0100     QTest::addRow("two_mime") << QStringList{"image/png", "image/jpeg"} << "" << QStringList{"PNG image, JPEG image", "PNG image", "JPEG image"};
0101     QTest::addRow("two_mime_with_default") << QStringList{"image/png", "image/jpeg"} << "image/jpeg" << QStringList{"PNG image", "JPEG image"};
0102     QTest::addRow("three_mime") << QStringList{"image/png", "image/jpeg", "text/plain"} << ""
0103                                 << QStringList{"PNG image, JPEG image, plain text document", "PNG image", "JPEG image", "plain text document"};
0104     QTest::addRow("four_mime") << QStringList{"image/png", "image/jpeg", "text/plain", "application/mbox"} << ""
0105                                << QStringList{"All Supported Files", "PNG image", "JPEG image", "plain text document", "mailbox file"};
0106     QTest::addRow("duplicate_mime_comment") << QStringList{"application/metalink+xml", "application/metalink4+xml"} << ""
0107                                             << QStringList{"Metalink file (metalink), Metalink file (meta4)",
0108                                                            "Metalink file (metalink)",
0109                                                            "Metalink file (meta4)"};
0110     QTest::addRow("all") << QStringList{"application/octet-stream"} << "" << QStringList{"All Files"};
0111     QTest::addRow("all2") << QStringList{"application/octet-stream", "image/png"} << "" << QStringList{"PNG image", "All Files"};
0112     QTest::addRow("all_with_all_supported")
0113         << QStringList{"application/octet-stream", "image/png", "image/jpeg", "text/plain", "application/mbox"} << ""
0114         << QStringList{"All Supported Files", "PNG image", "JPEG image", "plain text document", "mailbox file", "All Files"};
0115     QTest::addRow("four_mime_with_default") << QStringList{"image/png", "image/jpeg", "text/plain", "application/mbox"} << "text/plain"
0116                                             << QStringList{"PNG image", "JPEG image", "plain text document", "mailbox file"};
0117 }
0118 
0119 void KFileFilterComboTest::testSetMimeFilter()
0120 {
0121     QFETCH(QStringList, mimeTypes);
0122     QFETCH(QString, defaultType);
0123     QFETCH(QStringList, expectedComboboxText);
0124 
0125     KFileFilterCombo combo;
0126 
0127     combo.setMimeFilter(mimeTypes, defaultType);
0128 
0129     QStringList actual;
0130 
0131     for (int i = 0; i < combo.count(); ++i) {
0132         const QString text = combo.itemData(i, Qt::DisplayRole).toString();
0133         actual << text;
0134     }
0135     QCOMPARE(actual, expectedComboboxText);
0136 }
0137 
0138 void KFileFilterComboTest::testSetMimeFilterDefault_data()
0139 {
0140     QTest::addColumn<QStringList>("mimeTypes");
0141     QTest::addColumn<QString>("defaultType");
0142     QTest::addColumn<QString>("expectedComboboxCurrentText");
0143 
0144     QTest::addRow("one") << QStringList{"image/png"} << ""
0145                          << "PNG image";
0146     QTest::addRow("two") << QStringList{"image/png", "image/jpeg"} << ""
0147                          << "PNG image, JPEG image";
0148     QTest::addRow("two_with_default") << QStringList{"image/png", "image/jpeg"} << "image/png"
0149                                       << "PNG image";
0150     QTest::addRow("four_with_default") << QStringList{"image/png", "image/jpeg", "text/plain", "application/mbox"} << "text/plain"
0151                                        << "plain text document";
0152 }
0153 
0154 void KFileFilterComboTest::testSetMimeFilterDefault()
0155 {
0156     QFETCH(QStringList, mimeTypes);
0157     QFETCH(QString, defaultType);
0158     QFETCH(QString, expectedComboboxCurrentText);
0159 
0160     KFileFilterCombo combo;
0161 
0162     combo.setMimeFilter(mimeTypes, defaultType);
0163 
0164     QCOMPARE(combo.currentText(), expectedComboboxCurrentText);
0165 }
0166 
0167 void KFileFilterComboTest::testIsMimeFilter()
0168 {
0169     KFileFilterCombo combo;
0170 
0171     combo.setFilter("*.png");
0172     QVERIFY(!combo.isMimeFilter());
0173 
0174     combo.setMimeFilter(QStringList{"image/jpeg"}, QString());
0175     QVERIFY(combo.isMimeFilter());
0176 }
0177 
0178 void KFileFilterComboTest::testFilters_data()
0179 {
0180     QTest::addColumn<QString>("filterString");
0181     QTest::addColumn<QStringList>("expectedFilters");
0182 
0183     QTest::addRow("extension_name") << "*.cpp|Sources (*.cpp)" << QStringList{"*.cpp|Sources (*.cpp)"};
0184     QTest::addRow("multiple_filter") << "*.cpp|Sources (*.cpp)\n*.h|Header files" << QStringList{"*.cpp|Sources (*.cpp)", "*.h|Header files"};
0185     QTest::addRow("mutiple_extension_multiple_filter")
0186         << "*.cpp *.cc *.C|C++ Source Files\n*.h *.H|Header files" << QStringList{"*.cpp *.cc *.C|C++ Source Files", "*.h *.H|Header files"};
0187     QTest::addRow("pattern_only") << "*.cpp" << QStringList{"*.cpp"};
0188 
0189     QString k3bFilter =
0190         "*|All Files\naudio/x-mp3 audio/x-wav application/x-ogg |Sound Files\naudio/x-wav |Wave Sound Files\naudio/x-mp3 |MP3 Sound Files\napplication/x-ogg "
0191         "|Ogg Vorbis Sound Files\nvideo/mpeg |MPEG Video Files";
0192     QTest::addRow("k3b") << k3bFilter
0193                          << QStringList{"*|All Files",
0194                                         "audio/x-mp3 audio/x-wav application/x-ogg |Sound Files",
0195                                         "audio/x-wav |Wave Sound Files",
0196                                         "audio/x-mp3 |MP3 Sound Files",
0197                                         "application/x-ogg |Ogg Vorbis Sound Files",
0198                                         "video/mpeg |MPEG Video Files"};
0199 }
0200 
0201 void KFileFilterComboTest::testFilters()
0202 {
0203     QFETCH(QString, filterString);
0204     QFETCH(QStringList, expectedFilters);
0205 
0206     KFileFilterCombo combo;
0207 
0208     combo.setFilter(filterString);
0209 
0210     QCOMPARE(combo.filters(), expectedFilters);
0211 }
0212 
0213 void KFileFilterComboTest::testFiltersMime_data()
0214 {
0215     QTest::addColumn<QStringList>("mimeTypes");
0216     QTest::addColumn<QStringList>("expectedFilters");
0217 
0218     QTest::addRow("one") << QStringList{"image/png"} << QStringList{"image/png"};
0219     QTest::addRow("two") << QStringList{"image/png", "image/jpeg"} << QStringList{"image/png image/jpeg", "image/png", "image/jpeg"};
0220     QTest::addRow("four") << QStringList{"image/png", "image/jpeg", "text/calendar", "application/gzip"}
0221                           << QStringList{"image/png image/jpeg text/calendar application/gzip", "image/png", "image/jpeg", "text/calendar", "application/gzip"};
0222 }
0223 
0224 void KFileFilterComboTest::testFiltersMime()
0225 {
0226     QFETCH(QStringList, mimeTypes);
0227     QFETCH(QStringList, expectedFilters);
0228 
0229     KFileFilterCombo combo;
0230 
0231     combo.setMimeFilter(mimeTypes, QString());
0232 
0233     QCOMPARE(combo.filters(), expectedFilters);
0234 }
0235 
0236 void KFileFilterComboTest::testShowsAllFiles_data()
0237 {
0238     QTest::addColumn<QStringList>("mimeTypes");
0239     QTest::addColumn<QString>("defaultType");
0240     QTest::addColumn<bool>("expectedShowsAllFiles");
0241 
0242     QTest::addRow("one") << QStringList{"image/png"} << "" << false;
0243     QTest::addRow("two") << QStringList{"image/png", "text/plain"} << "" << true;
0244     QTest::addRow("two_with_default") << QStringList{"image/png", "text/plain"} << "text/plain" << false;
0245     QTest::addRow("three") << QStringList{"image/png", "text/plain", "text/calendar"} << "" << true;
0246     QTest::addRow("four") << QStringList{"image/png", "text/plain", "text/calendar", "image/jpeg"} << "" << true;
0247     QTest::addRow("four") << QStringList{"image/png", "text/plain", "text/calendar", "image/jpeg"} << "text/calendar" << false;
0248 }
0249 
0250 void KFileFilterComboTest::testShowsAllFiles()
0251 {
0252     QFETCH(QStringList, mimeTypes);
0253     QFETCH(QString, defaultType);
0254     QFETCH(bool, expectedShowsAllFiles);
0255 
0256     KFileFilterCombo combo;
0257 
0258     combo.setMimeFilter(mimeTypes, defaultType);
0259 
0260     QCOMPARE(combo.showsAllTypes(), expectedShowsAllFiles);
0261 }
0262 
0263 QTEST_MAIN(KFileFilterComboTest)
0264 #include "kfilefiltercombotest.moc"