void testMakeExpandedItemHidden();
void testRemoveFilteredExpandedItems();
void testSorting();
+ void testNaturalSorting();
void testIndexForKeyboardSearch();
void testNameFilter();
void testEmptyPath();
QVERIFY(itemsInsertedSpy.wait());
QCOMPARE(m_model->count(), 3);
- QCOMPARE(m_model->data(0).value("text").toString(), QString("a.txt"));
- QCOMPARE(m_model->data(1).value("text").toString(), QString("b.txt"));
- QCOMPARE(m_model->data(2).value("text").toString(), QString("c.txt"));
+ QCOMPARE(m_model->data(0).value("text").toString(), QStringLiteral("a.txt"));
+ QCOMPARE(m_model->data(1).value("text").toString(), QStringLiteral("b.txt"));
+ QCOMPARE(m_model->data(2).value("text").toString(), QStringLiteral("c.txt"));
}
void KFileItemModelTest::testDefaultGroupedSorting()
QCOMPARE(itemsChangedSpy.count(), 1);
values = m_model->data(0);
- QCOMPARE(values.value("customRole1").toString(), QString("Test1"));
- QCOMPARE(values.value("customRole2").toString(), QString("Test2"));
+ QCOMPARE(values.value("customRole1").toString(), QStringLiteral("Test1"));
+ QCOMPARE(values.value("customRole2").toString(), QStringLiteral("Test2"));
QVERIFY(m_model->isConsistent());
}
QCOMPARE(itemsMovedSpy.takeFirst().at(1).value<QList<int>>(), QList<int>() << 2 << 4 << 5 << 3 << 0 << 1 << 6 << 7 << 9 << 8);
}
+void KFileItemModelTest::testNaturalSorting()
+{
+ QSignalSpy itemsInsertedSpy(m_model, &KFileItemModel::itemsInserted);
+ QSignalSpy itemsMovedSpy(m_model, &KFileItemModel::itemsMoved);
+ QVERIFY(itemsMovedSpy.isValid());
+
+ m_model->setSortRole("text");
+ m_model->setShowHiddenFiles(true);
+
+ m_testDir->createFiles({".a", "a.txt", "b.txt", "a 1.txt", "a 2.txt", "a 10.txt", "a.tar", "b.tar"});
+
+ m_model->loadDirectory(m_testDir->url());
+ QVERIFY(itemsInsertedSpy.wait());
+
+ // Sort by Name, ascending, natural sorting enabled
+ QCOMPARE(m_model->sortRole(), QByteArray("text"));
+ QCOMPARE(m_model->sortOrder(), Qt::AscendingOrder);
+ QCOMPARE(itemsInModel(),
+ QStringList() << ".a"
+ << "a.tar"
+ << "a.txt"
+ << "a 1.txt"
+ << "a 2.txt"
+ << "a 10.txt"
+ << "b.tar"
+ << "b.txt");
+
+ // Sort by Extension
+ m_model->setSortRole("extension");
+ QCOMPARE(m_model->sortRole(), QByteArray("extension"));
+ QCOMPARE(itemsInModel(),
+ QStringList() << ".a"
+ << "a.tar"
+ << "b.tar"
+ << "a.txt"
+ << "a 1.txt"
+ << "a 2.txt"
+ << "a 10.txt"
+ << "b.txt");
+ QCOMPARE(itemsMovedSpy.count(), 1);
+ QCOMPARE(itemsMovedSpy.first().at(0).value<KItemRange>(), KItemRange(2, 5));
+ QCOMPARE(itemsMovedSpy.takeFirst().at(1).value<QList<int>>(), QList<int>() << 3 << 4 << 5 << 6 << 2);
+
+ // Disable natural sorting, refresh directory for the change to take effect
+ m_model->m_naturalSorting = false;
+ m_model->refreshDirectory(m_model->directory());
+ QVERIFY(itemsInsertedSpy.wait());
+
+ // Sort by Extension, ascending, natural sorting disabled
+ QCOMPARE(m_model->sortRole(), QByteArray("extension"));
+ QCOMPARE(itemsInModel(),
+ QStringList() << ".a"
+ << "a.tar"
+ << "b.tar"
+ << "a 1.txt"
+ << "a 10.txt"
+ << "a 2.txt"
+ << "a.txt"
+ << "b.txt");
+
+ // Sort by Name
+ m_model->setSortRole("text");
+ QCOMPARE(m_model->sortRole(), QByteArray("text"));
+ QCOMPARE(itemsInModel(),
+ QStringList() << ".a"
+ << "a 1.txt"
+ << "a 10.txt"
+ << "a 2.txt"
+ << "a.tar"
+ << "a.txt"
+ << "b.tar"
+ << "b.txt");
+ QCOMPARE(itemsMovedSpy.count(), 1);
+ QCOMPARE(itemsMovedSpy.first().at(0).value<KItemRange>(), KItemRange(1, 6));
+ QCOMPARE(itemsMovedSpy.takeFirst().at(1).value<QList<int>>(), QList<int>() << 4 << 6 << 1 << 2 << 3 << 5);
+}
+
void KFileItemModelTest::testIndexForKeyboardSearch()
{
QSignalSpy itemsInsertedSpy(m_model, &KFileItemModel::itemsInserted);
- m_testDir->createFiles({"a", "aa", "Image.jpg", "Image.png", "Text", "Text1", "Text2", "Text11"});
+ m_testDir->createFiles({"a", "aa", "Image.jpg", "Image.png", "Text", "Text1", "Text2", "Text11", "U", "Ü", "Üu", "Ž"});
m_model->loadDirectory(m_testDir->url());
QVERIFY(itemsInsertedSpy.wait());
QCOMPARE(m_model->indexForKeyboardSearch("text1", 0), 5);
QCOMPARE(m_model->indexForKeyboardSearch("text2", 0), 6);
QCOMPARE(m_model->indexForKeyboardSearch("text11", 0), 7);
+ QCOMPARE(m_model->indexForKeyboardSearch("u", 0), 8);
+ QCOMPARE(m_model->indexForKeyboardSearch("üu", 0), 10);
+ QCOMPARE(m_model->indexForKeyboardSearch("ž", 0), 11);
// Start a search somewhere in the middle
QCOMPARE(m_model->indexForKeyboardSearch("a", 1), 1);
QCOMPARE(m_model->indexForKeyboardSearch("TexT", 5), 5);
QCOMPARE(m_model->indexForKeyboardSearch("IMAGE", 4), 2);
+ // Test searches that match items with marks
+ QCOMPARE(m_model->indexForKeyboardSearch("u", 9), 9);
+ QCOMPARE(m_model->indexForKeyboardSearch("u", 10), 10);
+ QCOMPARE(m_model->indexForKeyboardSearch("uu", 0), 10);
+ QCOMPARE(m_model->indexForKeyboardSearch("z", 0), 11);
+
// TODO: Maybe we should also test keyboard searches in directories which are not sorted by Name?
}