diff options
Diffstat (limited to 'src/test/searchqueryparsertest.cpp')
-rw-r--r-- | src/test/searchqueryparsertest.cpp | 134 |
1 files changed, 98 insertions, 36 deletions
diff --git a/src/test/searchqueryparsertest.cpp b/src/test/searchqueryparsertest.cpp index 6ca23a9b0d..3bc9ce79a3 100644 --- a/src/test/searchqueryparsertest.cpp +++ b/src/test/searchqueryparsertest.cpp @@ -28,146 +28,208 @@ class SearchQueryParserTest : public testing::Test { }; TEST_F(SearchQueryParserTest, EmptySearch) { + QScopedPointer<QueryNode> pQuery( + m_parser.parseQuery("", QStringList(), "")); EXPECT_STREQ(qPrintable(QString("")), - qPrintable(m_parser.parseQuery("", QStringList(), ""))); + qPrintable(pQuery->toSql())); } TEST_F(SearchQueryParserTest, OneTermOneColumn) { QStringList searchColumns; searchColumns << "artist"; + QScopedPointer<QueryNode> pQuery( + m_parser.parseQuery("asdf", searchColumns, "")); + EXPECT_STREQ( - qPrintable(QString("WHERE ((artist LIKE '%asdf%'))")), - qPrintable(m_parser.parseQuery("asdf", searchColumns, ""))); + qPrintable(QString("(artist LIKE '%asdf%')")), + qPrintable(pQuery->toSql())); } TEST_F(SearchQueryParserTest, OneTermMultipleColumns) { QStringList searchColumns; searchColumns << "artist" << "album"; + + QScopedPointer<QueryNode> pQuery( + m_parser.parseQuery("asdf", searchColumns, "")); + EXPECT_STREQ( - qPrintable(QString("WHERE ((artist LIKE '%asdf%') OR (album LIKE '%asdf%'))")), - qPrintable(m_parser.parseQuery("asdf", searchColumns, ""))); + qPrintable(QString("((artist LIKE '%asdf%') OR (album LIKE '%asdf%'))")), + qPrintable(pQuery->toSql())); } TEST_F(SearchQueryParserTest, MultipleTermsOneColumn) { QStringList searchColumns; searchColumns << "artist"; + QScopedPointer<QueryNode> pQuery( + m_parser.parseQuery("asdf zxcv", searchColumns, "")); + EXPECT_STREQ( - qPrintable(QString("WHERE ((artist LIKE '%asdf%')) AND ((artist LIKE '%zxcv%'))")), - qPrintable(m_parser.parseQuery("asdf zxcv", searchColumns, ""))); + qPrintable(QString("(artist LIKE '%asdf%') AND (artist LIKE '%zxcv%')")), + qPrintable(pQuery->toSql())); } TEST_F(SearchQueryParserTest, MultipleTermsMultipleColumns) { QStringList searchColumns; searchColumns << "artist" << "album"; + + QScopedPointer<QueryNode> pQuery( + m_parser.parseQuery("asdf zxcv", searchColumns, "")); + EXPECT_STREQ( qPrintable(QString( - "WHERE ((artist LIKE '%asdf%') OR (album LIKE '%asdf%')) " + "((artist LIKE '%asdf%') OR (album LIKE '%asdf%')) " "AND ((artist LIKE '%zxcv%') OR (album LIKE '%zxcv%'))")), - qPrintable(m_parser.parseQuery("asdf zxcv", searchColumns, ""))); + qPrintable(pQuery->toSql())); } TEST_F(SearchQueryParserTest, TextFilter) { QStringList searchColumns; searchColumns << "artist" << "album"; + + QScopedPointer<QueryNode> pQuery( + m_parser.parseQuery("comment:asdf", searchColumns, "")); + EXPECT_STREQ( - qPrintable(QString("WHERE (comment LIKE '%asdf%')")), - qPrintable(m_parser.parseQuery("comment:asdf", searchColumns, ""))); + qPrintable(QString("(comment LIKE '%asdf%')")), + qPrintable(pQuery->toSql())); } TEST_F(SearchQueryParserTest, TextFilterQuote) { QStringList searchColumns; searchColumns << "artist" << "album"; + + QScopedPointer<QueryNode> pQuery( + m_parser.parseQuery("comment:\"asdf zxcv\"", searchColumns, "")); + EXPECT_STREQ( - qPrintable(QString("WHERE (comment LIKE '%asdf zxcv%')")), - qPrintable(m_parser.parseQuery("comment:\"asdf zxcv\"", searchColumns, ""))); + qPrintable(QString("(comment LIKE '%asdf zxcv%')")), + qPrintable(pQuery->toSql())); } TEST_F(SearchQueryParserTest, TextFilterQuote_NoEndQuoteTakesWholeQuery) { QStringList searchColumns; searchColumns << "artist" << "album"; + + QScopedPointer<QueryNode> pQuery( + m_parser.parseQuery("comment:\"asdf zxcv qwer", searchColumns, "")); + EXPECT_STREQ( - qPrintable(QString("WHERE (comment LIKE '%asdf zxcv qwer%')")), - qPrintable(m_parser.parseQuery("comment:\"asdf zxcv qwer", searchColumns, ""))); + qPrintable(QString("(comment LIKE '%asdf zxcv qwer%')")), + qPrintable(pQuery->toSql())); } TEST_F(SearchQueryParserTest, TextFilterAllowsSpace) { QStringList searchColumns; searchColumns << "artist" << "album"; + + QScopedPointer<QueryNode> pQuery( + m_parser.parseQuery("comment: asdf", searchColumns, "")); + EXPECT_STREQ( - qPrintable(QString("WHERE (comment LIKE '%asdf%')")), - qPrintable(m_parser.parseQuery("comment: asdf", searchColumns, ""))); + qPrintable(QString("(comment LIKE '%asdf%')")), + qPrintable(pQuery->toSql())); } TEST_F(SearchQueryParserTest, NumericFilter) { QStringList searchColumns; searchColumns << "artist" << "album"; + + QScopedPointer<QueryNode> pQuery( + m_parser.parseQuery("bpm:127.12", searchColumns, "")); + EXPECT_STREQ( - qPrintable(QString("WHERE (bpm = 127.12)")), - qPrintable(m_parser.parseQuery("bpm:127.12", searchColumns, ""))); + qPrintable(QString("(bpm = 127.12)")), + qPrintable(pQuery->toSql())); } TEST_F(SearchQueryParserTest, NumericFilterAllowsSpace) { QStringList searchColumns; searchColumns << "artist" << "album"; + + QScopedPointer<QueryNode> pQuery( + m_parser.parseQuery("bpm: 127.12", searchColumns, "")); + EXPECT_STREQ( - qPrintable(QString("WHERE (bpm = 127.12)")), - qPrintable(m_parser.parseQuery("bpm: 127.12", searchColumns, ""))); + qPrintable(QString("(bpm = 127.12)")), + qPrintable(pQuery->toSql())); } TEST_F(SearchQueryParserTest, NumericFilterOperators) { QStringList searchColumns; searchColumns << "artist" << "album"; + + QScopedPointer<QueryNode> pQuery( + m_parser.parseQuery("bpm:>127.12", searchColumns, "")); EXPECT_STREQ( - qPrintable(QString("WHERE (bpm > 127.12)")), - qPrintable(m_parser.parseQuery("bpm:>127.12", searchColumns, ""))); + qPrintable(QString("(bpm > 127.12)")), + qPrintable(pQuery->toSql())); + + + pQuery.reset(m_parser.parseQuery("bpm:>=127.12", searchColumns, "")); EXPECT_STREQ( - qPrintable(QString("WHERE (bpm >= 127.12)")), - qPrintable(m_parser.parseQuery("bpm:>=127.12", searchColumns, ""))); + qPrintable(QString("(bpm >= 127.12)")), + qPrintable(pQuery->toSql())); + + pQuery.reset(m_parser.parseQuery("bpm:<127.12", searchColumns, "")); EXPECT_STREQ( - qPrintable(QString("WHERE (bpm < 127.12)")), - qPrintable(m_parser.parseQuery("bpm:<127.12", searchColumns, ""))); + qPrintable(QString("(bpm < 127.12)")), + qPrintable(pQuery->toSql())); + + pQuery.reset(m_parser.parseQuery("bpm:<=127.12", searchColumns, "")); EXPECT_STREQ( - qPrintable(QString("WHERE (bpm <= 127.12)")), - qPrintable(m_parser.parseQuery("bpm:<=127.12", searchColumns, ""))); + qPrintable(QString("(bpm <= 127.12)")), + qPrintable(pQuery->toSql())); } TEST_F(SearchQueryParserTest, NumericRangeFilter) { QStringList searchColumns; searchColumns << "artist" << "album"; + + QScopedPointer<QueryNode> pQuery( + m_parser.parseQuery("bpm:127.12-129", searchColumns, "")); + EXPECT_STREQ( - qPrintable(QString("WHERE (bpm >= 127.12 AND bpm <= 129)")), - qPrintable(m_parser.parseQuery("bpm:127.12-129", searchColumns, ""))); + qPrintable(QString("(bpm >= 127.12 AND bpm <= 129)")), + qPrintable(pQuery->toSql())); } TEST_F(SearchQueryParserTest, MultipleFilters) { QStringList searchColumns; searchColumns << "artist" << "title"; + + QScopedPointer<QueryNode> pQuery( + m_parser.parseQuery("bpm:127.12-129 artist:\"com truise\" Colorvision", + searchColumns, "")); + EXPECT_STREQ( - qPrintable(QString("WHERE (bpm >= 127.12 AND bpm <= 129) AND " + qPrintable(QString("(bpm >= 127.12 AND bpm <= 129) AND " "((artist LIKE '%com truise%') OR (album_artist LIKE '%com truise%')) AND " "((artist LIKE '%Colorvision%') OR (title LIKE '%Colorvision%'))")), - qPrintable(m_parser.parseQuery("bpm:127.12-129 artist:\"com truise\" Colorvision", - searchColumns, ""))); + qPrintable(pQuery->toSql())); } TEST_F(SearchQueryParserTest, ExtraFilterAppended) { QStringList searchColumns; searchColumns << "artist"; + + QScopedPointer<QueryNode> pQuery( + m_parser.parseQuery("asdf", searchColumns, "1 > 2")); + EXPECT_STREQ( - qPrintable(QString("WHERE (1 > 2) AND ((artist LIKE '%asdf%'))")), - qPrintable(m_parser.parseQuery("asdf", searchColumns, "1 > 2"))); + qPrintable(QString("(1 > 2) AND (artist LIKE '%asdf%')")), + qPrintable(pQuery->toSql())); } |