+ query.setSearchThrough(Search::SearchThrough::FileNames);
+ QVERIFY(query.searchThrough() == Search::SearchThrough::FileNames);
+ QVERIFY(query == Search::DolphinQuery(query.toUrl(), searchPath1)); // Export then import
+
+ QVERIFY(query.searchPath() == searchPath1);
+ const QUrl searchPath2{"file:///someNonExistentUrl2"};
+ query.setSearchPath(searchPath2);
+ QVERIFY(query.searchPath() == searchPath2);
+ QVERIFY(query == Search::DolphinQuery(query.toUrl(), QUrl{})); // Export then import. The QUrl{} fallback does not matter because otherUrl is imported.
+
+ query.setSearchLocations(Search::SearchLocations::Everywhere);
+ QVERIFY(query.searchLocations() == Search::SearchLocations::Everywhere);
+ QVERIFY(query == Search::DolphinQuery(query.toUrl(), searchPath2)); // Export then import. searchPath2 is required to match as the fallback.
+
+ QVERIFY(query.searchTerm() == searchTerm1);
+ constexpr QLatin1String searchTerm2{"xyz"};
+ query.setSearchTerm(searchTerm2);
+ QVERIFY(query.searchTerm() == searchTerm2);
+ QVERIFY(query == Search::DolphinQuery(query.toUrl(), searchPath2)); // Export then import
+
+ QVERIFY(query.searchLocations() == Search::SearchLocations::Everywhere);
+ query.setSearchLocations(Search::SearchLocations::FromHere);
+ QVERIFY(query.searchLocations() == Search::SearchLocations::FromHere);
+ QVERIFY(query.searchPath() == searchPath2);
+ QVERIFY(query == Search::DolphinQuery(query.toUrl(), QUrl{})); // Export then import. The QUrl{} fallback does not matter because searchPath2 is imported.
+
+#if HAVE_BALOO
+ /// Test Baloo search queries
+ query.setSearchTool(Search::SearchTool::Baloo);
+ QVERIFY(query.searchTool() == Search::SearchTool::Baloo);
+ QVERIFY(query.searchTerm() == searchTerm2);
+ QVERIFY(query.searchLocations() == Search::SearchLocations::FromHere);
+ QVERIFY(query.searchPath() == searchPath2);
+ QVERIFY(query.searchThrough() == Search::SearchThrough::FileNames);
+ QVERIFY(query == Search::DolphinQuery(query.toUrl(), QUrl{})); // Export then import. The QUrl{} fallback does not matter because searchPath2 is imported.
+
+ /// Test that exporting and importing works as expected no matter which aspect we change.
+ query.setSearchThrough(Search::SearchThrough::FileContents);
+ QVERIFY(query.searchThrough() == Search::SearchThrough::FileContents);
+ QVERIFY(query == Search::DolphinQuery(query.toUrl(), QUrl{})); // Export then import. The QUrl{} fallback does not matter because searchPath2 is imported.
+
+ query.setSearchTerm(searchTerm1);
+ QVERIFY(query.searchTerm() == searchTerm1);
+ QVERIFY(query == Search::DolphinQuery(query.toUrl(), QUrl{})); // Export then import. The QUrl{} fallback does not matter because searchPath2 is imported.
+
+ query.setSearchThrough(Search::SearchThrough::FileNames);
+ QVERIFY(query.searchThrough() == Search::SearchThrough::FileNames);
+ QVERIFY(query == Search::DolphinQuery(query.toUrl(), QUrl{})); // Export then import. The QUrl{} fallback does not matter because searchPath2 is imported.
+
+ QVERIFY(query.searchPath() == searchPath2);
+ query.setSearchPath(searchPath1);
+ QVERIFY(query.searchPath() == searchPath1);
+ QVERIFY(query == Search::DolphinQuery(query.toUrl(), QUrl{})); // Export then import. The QUrl{} fallback does not matter because searchPath2 is imported.
+
+ query.setSearchLocations(Search::SearchLocations::Everywhere);
+ QVERIFY(query.searchLocations() == Search::SearchLocations::Everywhere);
+ QVERIFY(query == Search::DolphinQuery(query.toUrl(), searchPath1)); // Export then import. searchPath1 is required to match as the fallback.
+
+ QVERIFY(query.searchTerm() == searchTerm1);
+ query.setSearchTerm(searchTerm2);
+ QVERIFY(query.searchTerm() == searchTerm2);
+ QVERIFY(query == Search::DolphinQuery(query.toUrl(), searchPath1)); // Export then import
+
+ QVERIFY(query.searchLocations() == Search::SearchLocations::Everywhere);
+ query.setSearchLocations(Search::SearchLocations::FromHere);
+ QVERIFY(query.searchLocations() == Search::SearchLocations::FromHere);
+ QVERIFY(query.searchPath() == searchPath1);
+ QVERIFY(query == Search::DolphinQuery(query.toUrl(), QUrl{})); // Export then import. The QUrl{} fallback does not matter because searchPath1 is imported.
+
+ QVERIFY(query.fileType() == KFileMetaData::Type::Empty);
+ query.setFileType(KFileMetaData::Type::Archive);
+ QVERIFY(query.fileType() == KFileMetaData::Type::Archive);
+ QVERIFY(query == Search::DolphinQuery(query.toUrl(), QUrl{})); // Export then import. The QUrl{} fallback does not matter because searchPath1 is imported.
+
+ QVERIFY(!query.modifiedSinceDate().isValid());
+ QDate modifiedDate;
+ modifiedDate.setDate(2018, 6, 3); // World Bicycle Day
+ query.setModifiedSinceDate(modifiedDate);
+ QVERIFY(query.modifiedSinceDate() == modifiedDate);
+ QVERIFY(query == Search::DolphinQuery(query.toUrl(), QUrl{})); // Export then import. The QUrl{} fallback does not matter because searchPath1 is imported.
+
+ QVERIFY(query.minimumRating() == 0);
+ query.setMinimumRating(4);
+ QVERIFY(query.minimumRating() == 4);
+ QVERIFY(query == Search::DolphinQuery(query.toUrl(), QUrl{})); // Export then import. The QUrl{} fallback does not matter because searchPath1 is imported.
+
+ QVERIFY(query.requiredTags().isEmpty());
+ query.setRequiredTags({searchTerm1, searchTerm2});
+ QVERIFY(query.requiredTags().contains(searchTerm1));
+ QVERIFY(query.requiredTags().contains(searchTerm2));
+ QVERIFY(query == Search::DolphinQuery(query.toUrl(), QUrl{})); // Export then import. The QUrl{} fallback does not matter because searchPath1 is imported.
+
+ QVERIFY(query.searchTool() == Search::SearchTool::Baloo);
+ QVERIFY(query.searchThrough() == Search::SearchThrough::FileNames);
+ QVERIFY(query.searchPath() == searchPath1);
+ QVERIFY(query.searchTerm() == searchTerm2);
+ QVERIFY(query.searchLocations() == Search::SearchLocations::FromHere);
+ QVERIFY(query.fileType() == KFileMetaData::Type::Archive);
+ QVERIFY(query.modifiedSinceDate() == modifiedDate);
+ QVERIFY(query.minimumRating() == 4);