~rryan/mixxx/features_key

« back to all changes in this revision

Viewing changes to mixxx/src/test/searchqueryparsertest.cpp

  • Committer: Varun Jewalikar
  • Date: 2012-05-25 22:27:23 UTC
  • mfrom: (2684.18.232 trunk)
  • Revision ID: mr.unwell2006@gmail.com-20120525222723-0j4kc3av9cg59faf
MergingĀ fromĀ lp:mixxx

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include <gtest/gtest.h>
 
2
#include <QtDebug>
 
3
#include <QDir>
 
4
#include <QTemporaryFile>
 
5
 
 
6
#include "library/searchqueryparser.h"
 
7
 
 
8
class SearchQueryParserTest : public testing::Test {
 
9
  protected:
 
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());
 
21
    }
 
22
 
 
23
    virtual ~SearchQueryParserTest() {
 
24
    }
 
25
 
 
26
    QSqlDatabase m_database;
 
27
    SearchQueryParser m_parser;
 
28
};
 
29
 
 
30
TEST_F(SearchQueryParserTest, EmptySearch) {
 
31
    EXPECT_STREQ(qPrintable(QString("")),
 
32
                 qPrintable(m_parser.parseQuery("", QStringList(), "")));
 
33
}
 
34
 
 
35
TEST_F(SearchQueryParserTest, OneTermOneColumn) {
 
36
    QStringList searchColumns;
 
37
    searchColumns << "artist";
 
38
 
 
39
    EXPECT_STREQ(
 
40
        qPrintable(QString("WHERE ((artist LIKE '%asdf%'))")),
 
41
        qPrintable(m_parser.parseQuery("asdf", searchColumns, "")));
 
42
}
 
43
 
 
44
TEST_F(SearchQueryParserTest, OneTermMultipleColumns) {
 
45
    QStringList searchColumns;
 
46
    searchColumns << "artist"
 
47
                  << "album";
 
48
    EXPECT_STREQ(
 
49
        qPrintable(QString("WHERE ((artist LIKE '%asdf%') OR (album LIKE '%asdf%'))")),
 
50
        qPrintable(m_parser.parseQuery("asdf", searchColumns, "")));
 
51
}
 
52
 
 
53
TEST_F(SearchQueryParserTest, MultipleTermsOneColumn) {
 
54
    QStringList searchColumns;
 
55
    searchColumns << "artist";
 
56
 
 
57
    EXPECT_STREQ(
 
58
        qPrintable(QString("WHERE ((artist LIKE '%asdf%')) AND ((artist LIKE '%zxcv%'))")),
 
59
        qPrintable(m_parser.parseQuery("asdf zxcv", searchColumns, "")));
 
60
}
 
61
 
 
62
TEST_F(SearchQueryParserTest, MultipleTermsMultipleColumns) {
 
63
    QStringList searchColumns;
 
64
    searchColumns << "artist"
 
65
                  << "album";
 
66
    EXPECT_STREQ(
 
67
        qPrintable(QString(
 
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, "")));
 
71
}
 
72
 
 
73
TEST_F(SearchQueryParserTest, TextFilter) {
 
74
    QStringList searchColumns;
 
75
    searchColumns << "artist"
 
76
                  << "album";
 
77
    EXPECT_STREQ(
 
78
        qPrintable(QString("WHERE (comment LIKE '%asdf%')")),
 
79
        qPrintable(m_parser.parseQuery("comment:asdf", searchColumns, "")));
 
80
}
 
81
 
 
82
TEST_F(SearchQueryParserTest, TextFilterQuote) {
 
83
    QStringList searchColumns;
 
84
    searchColumns << "artist"
 
85
                  << "album";
 
86
    EXPECT_STREQ(
 
87
        qPrintable(QString("WHERE (comment LIKE '%asdf zxcv%')")),
 
88
        qPrintable(m_parser.parseQuery("comment:\"asdf zxcv\"", searchColumns, "")));
 
89
}
 
90
 
 
91
TEST_F(SearchQueryParserTest, TextFilterQuote_NoEndQuoteTakesWholeQuery) {
 
92
    QStringList searchColumns;
 
93
    searchColumns << "artist"
 
94
                  << "album";
 
95
    EXPECT_STREQ(
 
96
        qPrintable(QString("WHERE (comment LIKE '%asdf zxcv qwer%')")),
 
97
        qPrintable(m_parser.parseQuery("comment:\"asdf zxcv qwer", searchColumns, "")));
 
98
}
 
99
 
 
100
TEST_F(SearchQueryParserTest, TextFilterAllowsSpace) {
 
101
    QStringList searchColumns;
 
102
    searchColumns << "artist"
 
103
                  << "album";
 
104
    EXPECT_STREQ(
 
105
        qPrintable(QString("WHERE (comment LIKE '%asdf%')")),
 
106
        qPrintable(m_parser.parseQuery("comment: asdf", searchColumns, "")));
 
107
}
 
108
 
 
109
TEST_F(SearchQueryParserTest, NumericFilter) {
 
110
    QStringList searchColumns;
 
111
    searchColumns << "artist"
 
112
                  << "album";
 
113
    EXPECT_STREQ(
 
114
        qPrintable(QString("WHERE (bpm = 127.12)")),
 
115
        qPrintable(m_parser.parseQuery("bpm:127.12", searchColumns, "")));
 
116
}
 
117
 
 
118
TEST_F(SearchQueryParserTest, NumericFilterAllowsSpace) {
 
119
    QStringList searchColumns;
 
120
    searchColumns << "artist"
 
121
                  << "album";
 
122
    EXPECT_STREQ(
 
123
        qPrintable(QString("WHERE (bpm = 127.12)")),
 
124
        qPrintable(m_parser.parseQuery("bpm: 127.12", searchColumns, "")));
 
125
}
 
126
 
 
127
TEST_F(SearchQueryParserTest, NumericFilterOperators) {
 
128
    QStringList searchColumns;
 
129
    searchColumns << "artist"
 
130
                  << "album";
 
131
    EXPECT_STREQ(
 
132
        qPrintable(QString("WHERE (bpm > 127.12)")),
 
133
        qPrintable(m_parser.parseQuery("bpm:>127.12", searchColumns, "")));
 
134
    EXPECT_STREQ(
 
135
        qPrintable(QString("WHERE (bpm >= 127.12)")),
 
136
        qPrintable(m_parser.parseQuery("bpm:>=127.12", searchColumns, "")));
 
137
    EXPECT_STREQ(
 
138
        qPrintable(QString("WHERE (bpm < 127.12)")),
 
139
        qPrintable(m_parser.parseQuery("bpm:<127.12", searchColumns, "")));
 
140
    EXPECT_STREQ(
 
141
        qPrintable(QString("WHERE (bpm <= 127.12)")),
 
142
        qPrintable(m_parser.parseQuery("bpm:<=127.12", searchColumns, "")));
 
143
}
 
144
 
 
145
TEST_F(SearchQueryParserTest, NumericRangeFilter) {
 
146
    QStringList searchColumns;
 
147
    searchColumns << "artist"
 
148
                  << "album";
 
149
    EXPECT_STREQ(
 
150
        qPrintable(QString("WHERE (bpm >= 127.12 AND bpm <= 129)")),
 
151
        qPrintable(m_parser.parseQuery("bpm:127.12-129", searchColumns, "")));
 
152
}
 
153
 
 
154
TEST_F(SearchQueryParserTest, MultipleFilters) {
 
155
    QStringList searchColumns;
 
156
    searchColumns << "artist"
 
157
                  << "title";
 
158
    EXPECT_STREQ(
 
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, "")));
 
164
}
 
165
 
 
166
 
 
167
TEST_F(SearchQueryParserTest, ExtraFilterAppended) {
 
168
    QStringList searchColumns;
 
169
    searchColumns << "artist";
 
170
    EXPECT_STREQ(
 
171
        qPrintable(QString("WHERE (1 > 2) AND ((artist LIKE '%asdf%'))")),
 
172
        qPrintable(m_parser.parseQuery("asdf", searchColumns, "1 > 2")));
 
173
}