┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/tests/kfileitemmodeltest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tests/kfileitemmodeltest.cpp')
-rw-r--r--src/tests/kfileitemmodeltest.cpp150
1 files changed, 150 insertions, 0 deletions
diff --git a/src/tests/kfileitemmodeltest.cpp b/src/tests/kfileitemmodeltest.cpp
index b8e0e9893..f61bc246f 100644
--- a/src/tests/kfileitemmodeltest.cpp
+++ b/src/tests/kfileitemmodeltest.cpp
@@ -70,6 +70,8 @@ private Q_SLOTS:
void testRemoveFilteredExpandedItems();
void testSorting();
void testNaturalSorting();
+ void testStringCompare_data();
+ void testStringCompare();
void testIndexForKeyboardSearch();
void testNameFilter();
void testEmptyPath();
@@ -94,6 +96,7 @@ private Q_SLOTS:
void testInsertAfterExpand();
void testCurrentDirRemoved();
void testSizeSortingAfterRefresh();
+ void testFilterModesAndCaseSensitivity();
private:
QStringList itemsInModel() const;
@@ -1356,6 +1359,41 @@ void KFileItemModelTest::testNaturalSorting()
QCOMPARE(itemsMovedSpy.takeFirst().at(1).value<QList<int>>(), QList<int>() << 4 << 6 << 1 << 2 << 3 << 5);
}
+void KFileItemModelTest::testStringCompare_data()
+{
+ QTest::addColumn<QString>("left");
+ QTest::addColumn<QString>("right");
+ QTest::addColumn<bool>("naturalSorting");
+ QTest::addColumn<int>("expectedResult");
+
+ QTest::newRow("decimal") << QStringLiteral("0.09") << QStringLiteral("0.1") << true << -1;
+ QTest::newRow("version-patch") << QStringLiteral("v1.2.3") << QStringLiteral("v1.2.10") << true << -1;
+ QTest::newRow("version-patch-reversed") << QStringLiteral("v1.2.10") << QStringLiteral("v1.2.3") << true << 1;
+ QTest::newRow("version-minor") << QStringLiteral("v1.2.10") << QStringLiteral("v1.10.1") << true << -1;
+ QTest::newRow("numeric-basename-before-extension") << QStringLiteral("1.09.txt") << QStringLiteral("1.1.txt") << true << -1;
+ QTest::newRow("leading-dot-is-not-decimal") << QStringLiteral(".1") << QStringLiteral(".09") << true << -1;
+ QTest::newRow("natural-sorting-disabled") << QStringLiteral("v1.2.10") << QStringLiteral("v1.2.3") << false << -1;
+}
+
+void KFileItemModelTest::testStringCompare()
+{
+ QFETCH(QString, left);
+ QFETCH(QString, right);
+ QFETCH(bool, naturalSorting);
+ QFETCH(int, expectedResult);
+
+ QCollator collator;
+ collator.setNumericMode(true);
+
+ m_model->m_naturalSorting = naturalSorting;
+
+ const int result = m_model->stringCompare(left, right, collator);
+ QCOMPARE(result < 0 ? -1 : result > 0 ? 1 : 0, expectedResult);
+
+ const int reverseResult = m_model->stringCompare(right, left, collator);
+ QCOMPARE(reverseResult < 0 ? -1 : reverseResult > 0 ? 1 : 0, -expectedResult);
+}
+
void KFileItemModelTest::testIndexForKeyboardSearch()
{
QSignalSpy itemsInsertedSpy(m_model, &KFileItemModel::itemsInserted);
@@ -2712,6 +2750,118 @@ void KFileItemModelTest::testCurrentDirRemoved()
QCOMPARE(m_model->count(), 0);
}
+void KFileItemModelTest::testFilterModesAndCaseSensitivity()
+{
+ QSignalSpy itemsInsertedSpy(m_model, &KFileItemModel::itemsInserted);
+
+ m_testDir->createFiles({"1_abc.txt", "2_aBc.txt", "3_a[b]c.txt", "4_test.txt", "5_test.cpp"});
+
+ m_model->loadDirectory(m_testDir->url());
+ QVERIFY(itemsInsertedSpy.wait());
+
+ m_model->setSortRole("text");
+ QCOMPARE(itemsInModel(),
+ QStringList() << "1_abc.txt"
+ << "2_aBc.txt"
+ << "3_a[b]c.txt"
+ << "4_test.txt"
+ << "5_test.cpp");
+
+ // Glob + case insensitive
+ // no need to set the these options here as they are the default ones
+ m_model->setNameFilter("*a?c*");
+ QCOMPARE(itemsInModel(), QStringList() << "1_abc.txt" << "2_aBc.txt");
+
+ m_model->setNameFilter("*.txt");
+ QCOMPARE(itemsInModel(), QStringList() << "1_abc.txt" << "2_aBc.txt" << "3_a[b]c.txt" << "4_test.txt");
+
+ m_model->setNameFilter("*a*c*");
+ QCOMPARE(itemsInModel(), QStringList() << "1_abc.txt" << "2_aBc.txt" << "3_a[b]c.txt");
+
+ // Glob + case sensitive
+ m_model->setFilterCaseSensitive(true);
+
+ m_model->setNameFilter("*bc*");
+ QCOMPARE(itemsInModel(), QStringList() << "1_abc.txt");
+
+ m_model->setNameFilter("*Bc*");
+ QCOMPARE(itemsInModel(), QStringList() << "2_aBc.txt");
+
+ m_model->setNameFilter("*.TXT");
+ QCOMPARE(itemsInModel(), QStringList());
+
+ // PlainText + case insensitive
+ m_model->setFilterMode(KFileItemModelFilter::PlainText);
+ m_model->setFilterCaseSensitive(false);
+
+ m_model->setNameFilter("bc");
+ QCOMPARE(itemsInModel(), QStringList() << "1_abc.txt" << "2_aBc.txt");
+
+ m_model->setNameFilter("[b]");
+ QCOMPARE(itemsInModel(), QStringList() << "3_a[b]c.txt");
+
+ // PlainText + case sensitive
+ m_model->setFilterCaseSensitive(true);
+
+ m_model->setNameFilter("bc");
+ QCOMPARE(itemsInModel(), QStringList() << "1_abc.txt");
+
+ m_model->setNameFilter("Bc");
+ QCOMPARE(itemsInModel(), QStringList() << "2_aBc.txt");
+
+ m_model->setNameFilter("[b]");
+ QCOMPARE(itemsInModel(), QStringList() << "3_a[b]c.txt");
+
+ // Regex + case insensitive
+ m_model->setFilterMode(KFileItemModelFilter::Regex);
+ m_model->setFilterCaseSensitive(false);
+
+ m_model->setNameFilter("a.c");
+ QCOMPARE(itemsInModel(), QStringList() << "1_abc.txt" << "2_aBc.txt");
+
+ m_model->setNameFilter("a[a-z]c");
+ QCOMPARE(itemsInModel(), QStringList() << "1_abc.txt" << "2_aBc.txt");
+
+ m_model->setNameFilter("a.*c");
+ QCOMPARE(itemsInModel(), QStringList() << "1_abc.txt" << "2_aBc.txt" << "3_a[b]c.txt");
+
+ m_model->setNameFilter("\\.txt$");
+ QCOMPARE(itemsInModel(), QStringList() << "1_abc.txt" << "2_aBc.txt" << "3_a[b]c.txt" << "4_test.txt");
+
+ // Regex + case sensitive
+ m_model->setFilterCaseSensitive(true);
+
+ m_model->setNameFilter("a[a-z]c");
+ QCOMPARE(itemsInModel(), QStringList() << "1_abc.txt");
+
+ m_model->setNameFilter("a[A-Z]c");
+ QCOMPARE(itemsInModel(), QStringList() << "2_aBc.txt");
+
+ m_model->setNameFilter("a\\[b\\]c");
+ QCOMPARE(itemsInModel(), QStringList() << "3_a[b]c.txt");
+
+ // Invalid Glob
+ m_model->setFilterMode(KFileItemModelFilter::Glob);
+
+ m_model->setNameFilter("a[");
+ QCOMPARE(itemsInModel(), QStringList());
+
+ // Invalid Regex
+ m_model->setFilterMode(KFileItemModelFilter::Regex);
+
+ m_model->setNameFilter("(abc");
+ QCOMPARE(itemsInModel(), QStringList());
+
+ // Clear filter, very that all the items reappear
+ m_model->setNameFilter(QString());
+ QCOMPARE(itemsInModel(),
+ QStringList() << "1_abc.txt"
+ << "2_aBc.txt"
+ << "3_a[b]c.txt"
+ << "4_test.txt"
+ << "5_test.cpp");
+}
+
QStringList KFileItemModelTest::itemsInModel() const
{
QStringList items;