┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/search/dolphinquery.cpp6
-rw-r--r--src/tests/dolphinquerytest.cpp12
2 files changed, 17 insertions, 1 deletions
diff --git a/src/search/dolphinquery.cpp b/src/search/dolphinquery.cpp
index 0581a02ec..663ed9909 100644
--- a/src/search/dolphinquery.cpp
+++ b/src/search/dolphinquery.cpp
@@ -59,7 +59,11 @@ namespace {
QStringList splitOutsideQuotes(const QString& text)
{
- const QRegularExpression subTermsRegExp("(\\S*?\"[^\"]*?\"|(?<=\\s|^)\\S+(?=\\s|$))");
+ // Match groups on 3 possible conditions:
+ // - Groups with two leading quotes must close both on them (filename:""abc xyz" tuv")
+ // - Groups enclosed in quotes
+ // - Words separated by spaces
+ const QRegularExpression subTermsRegExp("(\\S*?\"\"[^\"]+\"[^\"]+\"+|\\S*?\"[^\"]+\"+|(?<=\\s|^)\\S+(?=\\s|$))");
auto subTermsMatchIterator = subTermsRegExp.globalMatch(text);
QStringList textParts;
diff --git a/src/tests/dolphinquerytest.cpp b/src/tests/dolphinquerytest.cpp
index a0774e88c..25bd26b81 100644
--- a/src/tests/dolphinquerytest.cpp
+++ b/src/tests/dolphinquerytest.cpp
@@ -72,8 +72,13 @@ void DolphinSearchBoxTest::testBalooSearchParsing_data()
const QString text = QStringLiteral("abc");
const QString textS = QStringLiteral("abc xyz");
+ const QString textQ = QStringLiteral("\"abc xyz\"");
+ const QString textM = QStringLiteral("\"abc xyz\" tuv");
+
const QString filename = QStringLiteral("filename:\"%1\"").arg(text);
const QString filenameS = QStringLiteral("filename:\"%1\"").arg(textS);
+ const QString filenameQ = QStringLiteral("filename:\"%1\"").arg(textQ);
+ const QString filenameM = QStringLiteral("filename:\"%1\"").arg(textM);
const QString rating = QStringLiteral("rating>=2");
const QString modified = QStringLiteral("modified>=2019-08-07");
@@ -85,6 +90,7 @@ void DolphinSearchBoxTest::testBalooSearchParsing_data()
// Test for "Content"
QTest::newRow("content") << balooQueryUrl(text) << text << QStringList() << true << false;
QTest::newRow("content/space") << balooQueryUrl(textS) << textS << QStringList() << true << false;
+ QTest::newRow("content/quoted") << balooQueryUrl(textQ) << textS << QStringList() << true << false;
QTest::newRow("content/empty") << balooQueryUrl("") << "" << QStringList() << false << false;
QTest::newRow("content/single_quote") << balooQueryUrl("\"") << "\"" << QStringList() << true << false;
QTest::newRow("content/double_quote") << balooQueryUrl("\"\"") << "" << QStringList() << false << false;
@@ -92,6 +98,8 @@ void DolphinSearchBoxTest::testBalooSearchParsing_data()
// Test for "FileName"
QTest::newRow("filename") << balooQueryUrl(filename) << text << QStringList() << false << true;
QTest::newRow("filename/space") << balooQueryUrl(filenameS) << textS << QStringList() << false << true;
+ QTest::newRow("filename/quoted") << balooQueryUrl(filenameQ) << textQ << QStringList() << false << true;
+ QTest::newRow("filename/mixed") << balooQueryUrl(filenameM) << textM << QStringList() << false << true;
QTest::newRow("filename/empty") << balooQueryUrl("filename:") << "" << QStringList() << false << false;
QTest::newRow("filename/single_quote") << balooQueryUrl("filename:\"") << "\"" << QStringList() << false << true;
QTest::newRow("filename/double_quote") << balooQueryUrl("filename:\"\"") << "" << QStringList() << false << false;
@@ -101,6 +109,10 @@ void DolphinSearchBoxTest::testBalooSearchParsing_data()
<< balooQueryUrl(text + " " + filename)
<< text + " " + filename << QStringList() << true << true;
+ QTest::newRow("content+filename/quoted")
+ << balooQueryUrl(textQ + " " + filenameQ)
+ << textS + " " + filenameQ << QStringList() << true << true;
+
// Test for rating
QTest::newRow("rating") << balooQueryUrl(rating) << "" << QStringList({rating}) << false << false;
QTest::newRow("rating+content") << balooQueryUrl(rating + " " + text) << text << QStringList({rating}) << true << false;