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"