1/****************************************************************************
2**
3** Copyright (C) 2016 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the test suite of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:GPL-EXCEPT$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU
19** General Public License version 3 as published by the Free Software
20** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
21** included in the packaging of this file. Please review the following
22** information to ensure the GNU General Public License requirements will
23** be met: https://www.gnu.org/licenses/gpl-3.0.html.
24**
25** $QT_END_LICENSE$
26**
27****************************************************************************/
28
29#include <QtCore/QString>
30#include <QtTest/QtTest>
31#include <QtLocation/QPlaceSearchRequest>
32#include <QtPositioning/QGeoCircle>
33#include <QtPositioning/QGeoRectangle>
34
35QT_USE_NAMESPACE
36
37class tst_QPlaceSearchRequest : public QObject
38{
39 Q_OBJECT
40
41public:
42 tst_QPlaceSearchRequest();
43
44private Q_SLOTS:
45 void constructorTest();
46 void searchTermTest();
47 void categoriesTest();
48 void boundingCircleTest();
49 void boundingBoxTest();
50 void searchAreaTest();
51 void visibilityScopeTest();
52 void relevanceHintTest();
53 void searchContextTest();
54 void operatorsTest();
55 void clearTest();
56};
57
58tst_QPlaceSearchRequest::tst_QPlaceSearchRequest()
59{
60}
61
62void tst_QPlaceSearchRequest::constructorTest()
63{
64 QPlaceSearchRequest testObj;
65 Q_UNUSED(testObj);
66
67 QPlaceSearchRequest *testObjPtr = new QPlaceSearchRequest(testObj);
68 QVERIFY2(testObjPtr != NULL, "Copy constructor - null");
69 QVERIFY2(*testObjPtr == testObj, "Copy constructor - compare");
70 delete testObjPtr;
71}
72
73void tst_QPlaceSearchRequest::searchTermTest()
74{
75 QPlaceSearchRequest testObj;
76 QVERIFY2(testObj.searchTerm() == QString(), "Wrong default value");
77 testObj.setSearchTerm("testText");
78 QVERIFY2(testObj.searchTerm() == "testText", "Wrong value returned");
79}
80
81void tst_QPlaceSearchRequest::categoriesTest()
82{
83 QPlaceSearchRequest testObj;
84 QVERIFY2(testObj.categories().count() == 0, "Wrong default value");
85 QPlaceCategory cat;
86 cat.setCategoryId("45346");
87 testObj.setCategory(cat);
88 QVERIFY2(testObj.categories().count() == 1, "Wrong categories count returned");
89 QVERIFY2(testObj.categories()[0] == cat, "Wrong category returned");
90
91 testObj.setCategory(QPlaceCategory());
92 QVERIFY(testObj.categories().isEmpty());
93}
94
95void tst_QPlaceSearchRequest::boundingCircleTest()
96{
97 QPlaceSearchRequest query;
98 QVERIFY2(query.searchArea() == QGeoShape(), "Wrong default value");
99 QGeoCircle circle;
100 circle.setCenter(QGeoCoordinate(30,20));
101 circle.setRadius(500.0);
102 query.setSearchArea(circle);
103
104 QVERIFY(query.searchArea() != QGeoShape());
105 QVERIFY(query.searchArea().type() == QGeoShape::CircleType);
106 QVERIFY(query.searchArea() == circle);
107
108 QGeoCircle retrievedCircle = query.searchArea();
109 QVERIFY2(retrievedCircle.center() == QGeoCoordinate(30,20), "Wrong value returned");
110 QVERIFY2(retrievedCircle.radius() == 500.0, "Wrong value returned");
111 query.clear();
112 QVERIFY2(query.searchArea() == QGeoShape(), "Search area not cleared");
113}
114
115void tst_QPlaceSearchRequest::boundingBoxTest()
116{
117 QPlaceSearchRequest query;
118 QVERIFY2(query.searchArea() == QGeoShape(), "Wrong default value");
119 QGeoRectangle box;
120
121 box.setTopLeft(QGeoCoordinate(30,20));
122 box.setBottomRight(QGeoCoordinate(10,50));
123 query.setSearchArea(box);
124
125 QVERIFY(query.searchArea() != QGeoShape());
126 QVERIFY(query.searchArea().type() == QGeoShape::RectangleType);
127 QVERIFY(query.searchArea() == box);
128
129 QGeoRectangle retrievedBox = query.searchArea();
130 QVERIFY2(retrievedBox.topLeft() == QGeoCoordinate(30,20), "Wrong value returned");
131 QVERIFY2(retrievedBox.bottomRight() == QGeoCoordinate(10,50), "Wrong value returned");
132
133 query.clear();
134 QVERIFY2(query.searchArea() == QGeoShape(), "Wrong cleared value returned");
135}
136
137void tst_QPlaceSearchRequest::searchAreaTest()
138{
139 //test assignment of new search area over an old search area
140 QPlaceSearchRequest *query = new QPlaceSearchRequest;
141 QGeoCircle circle;
142 circle.setCenter(QGeoCoordinate(30,20));
143 circle.setRadius(500.0);
144 query->setSearchArea(circle);
145
146 QVERIFY(query->searchArea() == circle);
147 QGeoRectangle box;
148 box.setTopLeft(QGeoCoordinate(30,20));
149 box.setBottomRight(QGeoCoordinate(10,50));
150 query->setSearchArea(box);
151 QVERIFY2(query->searchArea() == box, "New search area not assigned");
152}
153
154void tst_QPlaceSearchRequest::visibilityScopeTest()
155{
156 QPlaceSearchRequest query;
157 QVERIFY2(query.visibilityScope() == QLocation::UnspecifiedVisibility, "Wrong default value");
158
159 query.setVisibilityScope(QLocation::DeviceVisibility);
160 QCOMPARE(query.visibilityScope(), QLocation::DeviceVisibility);
161
162 query.setVisibilityScope(QLocation::DeviceVisibility | QLocation::PublicVisibility);
163 QVERIFY(query.visibilityScope() & QLocation::DeviceVisibility);
164 QVERIFY(!(query.visibilityScope() & QLocation::PrivateVisibility));
165 QVERIFY(query.visibilityScope() & QLocation::PublicVisibility);
166}
167
168void tst_QPlaceSearchRequest::relevanceHintTest()
169{
170 QPlaceSearchRequest request;
171 QCOMPARE(request.relevanceHint(), QPlaceSearchRequest::UnspecifiedHint);
172 request.setRelevanceHint(QPlaceSearchRequest::DistanceHint);
173 QCOMPARE(request.relevanceHint(), QPlaceSearchRequest::DistanceHint);
174 request.setRelevanceHint(QPlaceSearchRequest::UnspecifiedHint);
175 QCOMPARE(request.relevanceHint(), QPlaceSearchRequest::UnspecifiedHint);
176}
177
178void tst_QPlaceSearchRequest::searchContextTest()
179{
180 QPlaceSearchRequest request;
181 QVERIFY(!request.searchContext().value<QUrl>().isValid());
182 request.setSearchContext(QUrl(QStringLiteral("http://www.example.com/")));
183 QCOMPARE(request.searchContext().value<QUrl>(), QUrl(QStringLiteral("http://www.example.com/")));
184}
185
186void tst_QPlaceSearchRequest::operatorsTest()
187{
188 QPlaceSearchRequest testObj;
189 testObj.setSearchTerm(QStringLiteral("testValue"));
190 QPlaceSearchRequest testObj2;
191 testObj2 = testObj;
192 QVERIFY2(testObj == testObj2, "Not copied correctly");
193 testObj2.setSearchTerm(QStringLiteral("abc"));
194 QVERIFY2(testObj != testObj2, "Object should be different");
195 testObj2.setSearchTerm(QStringLiteral("testValue"));
196 QVERIFY(testObj == testObj2);
197
198 QGeoRectangle b1(QGeoCoordinate(20,20), QGeoCoordinate(10,30));
199 QGeoRectangle b2(QGeoCoordinate(20,20), QGeoCoordinate(10,30));
200 QGeoRectangle b3(QGeoCoordinate(40,40), QGeoCoordinate(10,40));
201
202 //testing that identical boxes match
203 testObj.setSearchArea(b1);
204 testObj2.setSearchArea(b2);
205 QVERIFY2(testObj == testObj2, "Identical box areas are not identified as matching");
206
207 //test that different boxes do not match
208 testObj2.setSearchArea(b3);
209 QVERIFY2(testObj != testObj2, "Different box areas identified as matching");
210
211 QGeoCircle c1(QGeoCoordinate(5,5),500);
212 QGeoCircle c2(QGeoCoordinate(5,5),500);
213 QGeoCircle c3(QGeoCoordinate(9,9),600);
214
215 //test that identical cirlces match
216 testObj.setSearchArea(c1);
217 testObj2.setSearchArea(c2);
218 QVERIFY2(testObj == testObj2, "Identical circle areas are not identified as matching");
219
220 //test that different circle don't match
221 testObj2.setSearchArea(c3);
222 QVERIFY2(testObj != testObj2, "Different circle areas identified as matching");
223
224 //test that circles and boxes do not match
225 QGeoRectangle b4(QGeoCoordinate(20,20),QGeoCoordinate(10,30));
226 QGeoCircle c4(QGeoCoordinate(20,20),500);
227 testObj.setSearchArea(b4);
228 testObj2.setSearchArea(c4);
229 QVERIFY2(testObj != testObj2, "Circle and box identified as matching");
230
231 //test that identical visibility scopes match
232 testObj.clear();
233 testObj2.clear();
234 testObj.setVisibilityScope(QLocation::PublicVisibility);
235 testObj2.setVisibilityScope(QLocation::PublicVisibility);
236 QVERIFY2(testObj == testObj2, "Identical scopes not identified as matching");
237
238 //test that different scopes do not match
239 testObj2.setVisibilityScope(QLocation::PrivateVisibility);
240 QVERIFY2(testObj != testObj2, "Different scopes identified as matching");
241
242 //test that different search contexts do not match
243 testObj.clear();
244 testObj2.clear();
245 testObj2.setSearchContext(QUrl(QStringLiteral("http://www.example.com/")));
246 QVERIFY(testObj != testObj2);
247}
248
249void tst_QPlaceSearchRequest::clearTest()
250{
251 QPlaceSearchRequest req;
252 req.setSearchTerm("pizza");
253 req.setSearchArea(QGeoCircle(QGeoCoordinate(1,1), 5000));
254 QPlaceCategory category;
255 category.setName("Fast Food");
256 req.setCategory(category);
257 req.setLimit(100);
258
259 req.clear();
260 QVERIFY(req.searchTerm().isEmpty());
261 QVERIFY(req.searchArea() == QGeoShape());
262 QVERIFY(req.categories().isEmpty());
263 QVERIFY(req.limit() == -1);
264}
265
266QTEST_APPLESS_MAIN(tst_QPlaceSearchRequest)
267
268#include "tst_qplacesearchrequest.moc"
269

source code of qtlocation/tests/auto/qplacesearchrequest/tst_qplacesearchrequest.cpp