1
#include <gtest/gtest.h>
4
#include <QTemporaryFile>
6
#include "library/searchqueryparser.h"
8
class SearchQueryParserTest : public testing::Test {
10
SearchQueryParserTest()
11
: m_database(QSqlDatabase::addDatabase("QSQLITE")),
12
m_parser(m_database) {
13
QTemporaryFile databaseFile("mixxxdb.sqlite");
14
Q_ASSERT(databaseFile.open());
15
m_database.setHostName("localhost");
16
m_database.setUserName("mixxx");
17
m_database.setPassword("mixxx");
18
qDebug() << "Temp file is" << databaseFile.fileName();
19
m_database.setDatabaseName(databaseFile.fileName());
20
Q_ASSERT(m_database.open());
23
virtual ~SearchQueryParserTest() {
26
QSqlDatabase m_database;
27
SearchQueryParser m_parser;
30
TEST_F(SearchQueryParserTest, EmptySearch) {
31
EXPECT_STREQ(qPrintable(QString("")),
32
qPrintable(m_parser.parseQuery("", QStringList(), "")));
35
TEST_F(SearchQueryParserTest, OneTermOneColumn) {
36
QStringList searchColumns;
37
searchColumns << "artist";
40
qPrintable(QString("WHERE ((artist LIKE '%asdf%'))")),
41
qPrintable(m_parser.parseQuery("asdf", searchColumns, "")));
44
TEST_F(SearchQueryParserTest, OneTermMultipleColumns) {
45
QStringList searchColumns;
46
searchColumns << "artist"
49
qPrintable(QString("WHERE ((artist LIKE '%asdf%') OR (album LIKE '%asdf%'))")),
50
qPrintable(m_parser.parseQuery("asdf", searchColumns, "")));
53
TEST_F(SearchQueryParserTest, MultipleTermsOneColumn) {
54
QStringList searchColumns;
55
searchColumns << "artist";
58
qPrintable(QString("WHERE ((artist LIKE '%asdf%')) AND ((artist LIKE '%zxcv%'))")),
59
qPrintable(m_parser.parseQuery("asdf zxcv", searchColumns, "")));
62
TEST_F(SearchQueryParserTest, MultipleTermsMultipleColumns) {
63
QStringList searchColumns;
64
searchColumns << "artist"
68
"WHERE ((artist LIKE '%asdf%') OR (album LIKE '%asdf%')) "
69
"AND ((artist LIKE '%zxcv%') OR (album LIKE '%zxcv%'))")),
70
qPrintable(m_parser.parseQuery("asdf zxcv", searchColumns, "")));
73
TEST_F(SearchQueryParserTest, TextFilter) {
74
QStringList searchColumns;
75
searchColumns << "artist"
78
qPrintable(QString("WHERE (comment LIKE '%asdf%')")),
79
qPrintable(m_parser.parseQuery("comment:asdf", searchColumns, "")));
82
TEST_F(SearchQueryParserTest, TextFilterQuote) {
83
QStringList searchColumns;
84
searchColumns << "artist"
87
qPrintable(QString("WHERE (comment LIKE '%asdf zxcv%')")),
88
qPrintable(m_parser.parseQuery("comment:\"asdf zxcv\"", searchColumns, "")));
91
TEST_F(SearchQueryParserTest, TextFilterQuote_NoEndQuoteTakesWholeQuery) {
92
QStringList searchColumns;
93
searchColumns << "artist"
96
qPrintable(QString("WHERE (comment LIKE '%asdf zxcv qwer%')")),
97
qPrintable(m_parser.parseQuery("comment:\"asdf zxcv qwer", searchColumns, "")));
100
TEST_F(SearchQueryParserTest, TextFilterAllowsSpace) {
101
QStringList searchColumns;
102
searchColumns << "artist"
105
qPrintable(QString("WHERE (comment LIKE '%asdf%')")),
106
qPrintable(m_parser.parseQuery("comment: asdf", searchColumns, "")));
109
TEST_F(SearchQueryParserTest, NumericFilter) {
110
QStringList searchColumns;
111
searchColumns << "artist"
114
qPrintable(QString("WHERE (bpm = 127.12)")),
115
qPrintable(m_parser.parseQuery("bpm:127.12", searchColumns, "")));
118
TEST_F(SearchQueryParserTest, NumericFilterAllowsSpace) {
119
QStringList searchColumns;
120
searchColumns << "artist"
123
qPrintable(QString("WHERE (bpm = 127.12)")),
124
qPrintable(m_parser.parseQuery("bpm: 127.12", searchColumns, "")));
127
TEST_F(SearchQueryParserTest, NumericFilterOperators) {
128
QStringList searchColumns;
129
searchColumns << "artist"
132
qPrintable(QString("WHERE (bpm > 127.12)")),
133
qPrintable(m_parser.parseQuery("bpm:>127.12", searchColumns, "")));
135
qPrintable(QString("WHERE (bpm >= 127.12)")),
136
qPrintable(m_parser.parseQuery("bpm:>=127.12", searchColumns, "")));
138
qPrintable(QString("WHERE (bpm < 127.12)")),
139
qPrintable(m_parser.parseQuery("bpm:<127.12", searchColumns, "")));
141
qPrintable(QString("WHERE (bpm <= 127.12)")),
142
qPrintable(m_parser.parseQuery("bpm:<=127.12", searchColumns, "")));
145
TEST_F(SearchQueryParserTest, NumericRangeFilter) {
146
QStringList searchColumns;
147
searchColumns << "artist"
150
qPrintable(QString("WHERE (bpm >= 127.12 AND bpm <= 129)")),
151
qPrintable(m_parser.parseQuery("bpm:127.12-129", searchColumns, "")));
154
TEST_F(SearchQueryParserTest, MultipleFilters) {
155
QStringList searchColumns;
156
searchColumns << "artist"
159
qPrintable(QString("WHERE (bpm >= 127.12 AND bpm <= 129) AND "
160
"(artist LIKE '%com truise%') AND "
161
"((artist LIKE '%Colorvision%') OR (title LIKE '%Colorvision%'))")),
162
qPrintable(m_parser.parseQuery("bpm:127.12-129 artist:\"com truise\" Colorvision",
163
searchColumns, "")));
167
TEST_F(SearchQueryParserTest, ExtraFilterAppended) {
168
QStringList searchColumns;
169
searchColumns << "artist";
171
qPrintable(QString("WHERE (1 > 2) AND ((artist LIKE '%asdf%'))")),
172
qPrintable(m_parser.parseQuery("asdf", searchColumns, "1 > 2")));