Correct logic error in EntrySearcher and add more tests

This commit is contained in:
Jonathan White 2018-11-17 09:55:57 -05:00
parent 880c3aeb34
commit 340076974e
No known key found for this signature in database
GPG Key ID: 440FC65F2E0C6E01
3 changed files with 25 additions and 6 deletions

View File

@ -23,7 +23,7 @@
EntrySearcher::EntrySearcher(bool caseSensitive) EntrySearcher::EntrySearcher(bool caseSensitive)
: m_caseSensitive(caseSensitive) : m_caseSensitive(caseSensitive)
, m_termParser(R"re(([-*+]+)?(?:(\w*):)?(?:(?=")"((?:[^"\\]|\\.)*)"|([^ ]*))( |$))re") , m_termParser(R"re(([-!*+]+)?(?:(\w*):)?(?:(?=")"((?:[^"\\]|\\.)*)"|([^ ]*))( |$))re")
// Group 1 = modifiers, Group 2 = field, Group 3 = quoted string, Group 4 = unquoted string // Group 1 = modifiers, Group 2 = field, Group 3 = quoted string, Group 4 = unquoted string
{ {
} }
@ -104,7 +104,7 @@ bool EntrySearcher::searchEntryImpl(const QString& searchString, Entry* entry)
} }
// Short circuit if we failed to match or we matched and are excluding this term // Short circuit if we failed to match or we matched and are excluding this term
if (!found || term->exclude) { if ((!found && !term->exclude) || (found && term->exclude)) {
return false; return false;
} }
} }

View File

@ -20,12 +20,12 @@
QTEST_GUILESS_MAIN(TestEntrySearcher) QTEST_GUILESS_MAIN(TestEntrySearcher)
void TestEntrySearcher::initTestCase() void TestEntrySearcher::init()
{ {
m_rootGroup = new Group(); m_rootGroup = new Group();
} }
void TestEntrySearcher::cleanupTestCase() void TestEntrySearcher::cleanup()
{ {
delete m_rootGroup; delete m_rootGroup;
} }
@ -71,6 +71,7 @@ void TestEntrySearcher::testSearch()
eRoot2->setNotes("test term test"); eRoot2->setNotes("test term test");
eRoot2->setGroup(m_rootGroup); eRoot2->setGroup(m_rootGroup);
// Searching is disabled for these
Entry* e1 = new Entry(); Entry* e1 = new Entry();
e1->setUsername("test search term test"); e1->setUsername("test search term test");
e1->setGroup(group1); e1->setGroup(group1);
@ -78,6 +79,7 @@ void TestEntrySearcher::testSearch()
Entry* e11 = new Entry(); Entry* e11 = new Entry();
e11->setNotes("test search term test"); e11->setNotes("test search term test");
e11->setGroup(group11); e11->setGroup(group11);
// End searching disabled
Entry* e2111 = new Entry(); Entry* e2111 = new Entry();
e2111->setTitle("test search term test"); e2111->setTitle("test search term test");
@ -85,6 +87,7 @@ void TestEntrySearcher::testSearch()
Entry* e2111b = new Entry(); Entry* e2111b = new Entry();
e2111b->setNotes("test search test"); e2111b->setNotes("test search test");
e2111b->setUsername("user123");
e2111b->setPassword("testpass"); e2111b->setPassword("testpass");
e2111b->setGroup(group2111); e2111b->setGroup(group2111);
@ -94,9 +97,11 @@ void TestEntrySearcher::testSearch()
Entry* e3b = new Entry(); Entry* e3b = new Entry();
e3b->setTitle("test search test"); e3b->setTitle("test search test");
e3b->setUsername("test@email.com");
e3b->setPassword("realpass"); e3b->setPassword("realpass");
e3b->setGroup(group3); e3b->setGroup(group3);
// Simple search term testing
m_searchResult = m_entrySearcher.search("search", m_rootGroup); m_searchResult = m_entrySearcher.search("search", m_rootGroup);
QCOMPARE(m_searchResult.count(), 5); QCOMPARE(m_searchResult.count(), 5);
@ -106,9 +111,23 @@ void TestEntrySearcher::testSearch()
m_searchResult = m_entrySearcher.search("search term", group211); m_searchResult = m_entrySearcher.search("search term", group211);
QCOMPARE(m_searchResult.count(), 1); QCOMPARE(m_searchResult.count(), 1);
// Test advanced search terms
m_searchResult = m_entrySearcher.search("password:testpass", m_rootGroup); m_searchResult = m_entrySearcher.search("password:testpass", m_rootGroup);
QCOMPARE(m_searchResult.count(), 1); QCOMPARE(m_searchResult.count(), 1);
m_searchResult = m_entrySearcher.search("!user:email.com", m_rootGroup);
QCOMPARE(m_searchResult.count(), 5);
m_searchResult = m_entrySearcher.search("*user:\".*@.*\\.com\"", m_rootGroup);
QCOMPARE(m_searchResult.count(), 1);
m_searchResult = m_entrySearcher.search("+user:email", m_rootGroup);
QCOMPARE(m_searchResult.count(), 0);
// Terms are logical AND together
m_searchResult = m_entrySearcher.search("password:pass user:user", m_rootGroup);
QCOMPARE(m_searchResult.count(), 1);
// Parent group has search disabled // Parent group has search disabled
m_searchResult = m_entrySearcher.search("search term", group11); m_searchResult = m_entrySearcher.search("search term", group11);
QCOMPARE(m_searchResult.count(), 0); QCOMPARE(m_searchResult.count(), 0);

View File

@ -28,8 +28,8 @@ class TestEntrySearcher : public QObject
Q_OBJECT Q_OBJECT
private slots: private slots:
void initTestCase(); void init();
void cleanupTestCase(); void cleanup();
void testAndConcatenationInSearch(); void testAndConcatenationInSearch();
void testSearch(); void testSearch();