#include <qtest_kde.h>
-#include "kitemviews/kitemlistkeyboardsearchmanager_p.h"
+#include "kitemviews/private/kitemlistkeyboardsearchmanager.h"
class KItemListKeyboardSearchManagerTest : public QObject
{
void testBasicKeyboardSearch();
void testAbortedKeyboardSearch();
void testRepeatedKeyPress();
+ void testPressShift();
private:
KItemListKeyboardSearchManager m_keyboardSearchManager;
void KItemListKeyboardSearchManagerTest::init()
{
// Make sure that the previous search string is cleared
- m_keyboardSearchManager.addKeys("");
+ m_keyboardSearchManager.cancelSearch();
}
void KItemListKeyboardSearchManagerTest::testBasicKeyboardSearch()
void KItemListKeyboardSearchManagerTest::testAbortedKeyboardSearch()
{
+ // Set the timeout to a small value (the default is 5000 milliseconds)
+ // to save time when running this test.
+ m_keyboardSearchManager.setTimeout(100);
+
QSignalSpy spy(&m_keyboardSearchManager, SIGNAL(changeCurrentItem(QString,bool)));
m_keyboardSearchManager.addKeys("f");
QCOMPARE(spy.count(), 1);
QCOMPARE(spy.takeFirst(), QList<QVariant>() << "fi" << false);
- // If the delay between two key presses is larger than 5000 milliseconds,
+ // If the delay between two key presses is larger than the chosen timeout,
// a new search is started. We add a small safety margin to avoid race conditions.
- QTest::qWait(5000 + 10);
+ QTest::qWait(m_keyboardSearchManager.timeout() + 10);
m_keyboardSearchManager.addKeys("l");
QCOMPARE(spy.count(), 1);
QCOMPARE(spy.takeFirst(), QList<QVariant>() << "pppq" << false);
}
+void KItemListKeyboardSearchManagerTest::testPressShift()
+{
+ // If the user presses Shift, i.e., to get a character like '_',
+ // KItemListController calls the addKeys(QString) method with an empty
+ // string. Make sure that this does not reset the current search. See
+ // https://bugs.kde.org/show_bug.cgi?id=321286
+
+ QSignalSpy spy(&m_keyboardSearchManager, SIGNAL(changeCurrentItem(QString,bool)));
+
+ // Simulate that the user enters "a_b".
+ m_keyboardSearchManager.addKeys("a");
+ QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.takeFirst(), QList<QVariant>() << "a" << true);
+
+ m_keyboardSearchManager.addKeys("");
+ QCOMPARE(spy.count(), 0);
+
+ m_keyboardSearchManager.addKeys("_");
+ QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.takeFirst(), QList<QVariant>() << "a_" << false);
+
+ m_keyboardSearchManager.addKeys("b");
+ QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.takeFirst(), QList<QVariant>() << "a_b" << false);
+}
+
QTEST_KDEMAIN(KItemListKeyboardSearchManagerTest, NoGUI)
#include "kitemlistkeyboardsearchmanagertest.moc"