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 module 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 <QtLocation/QPlaceResult>
31 #include <QtLocation/QPlaceIcon>
32 #include <QtTest/QtTest>
33
34 #include "../utils/qlocationtestutils_p.h"
35
36 QT_USE_NAMESPACE
37
38 class tst_QPlaceResult : public QObject
39 {
40 Q_OBJECT
41
42 public:
43 QPlaceResult initialSubObject();
44 bool checkType(const QPlaceSearchResult &);
45 void detach(QPlaceSearchResult *);
46 void setSubClassProperty(QPlaceResult *);
47
48 private Q_SLOTS:
49 void constructorTest();
50 void title();
51 void icon();
52 void distance();
53 void place();
54 void sponsored();
55 void conversion();
56 };
57
initialSubObject()58 QPlaceResult tst_QPlaceResult::initialSubObject()
59 {
60 QPlaceResult placeResult;
61 placeResult.setTitle(QStringLiteral("title"));
62
63 QPlaceIcon icon;
64 QVariantMap parameters;
65 parameters.insert(QPlaceIcon::SingleUrl,
66 QUrl(QStringLiteral("file:///opt/icons/icon.png")));
67 icon.setParameters(parameters);
68 placeResult.setIcon(icon);
69
70 QPlace place;
71 place.setName(QStringLiteral("place"));
72 placeResult.setPlace(place);
73
74 placeResult.setDistance(5);
75 placeResult.setSponsored(true);
76
77 return placeResult;
78 }
79
checkType(const QPlaceSearchResult & result)80 bool tst_QPlaceResult::checkType(const QPlaceSearchResult &result)
81 {
82 return result.type() == QPlaceSearchResult::PlaceResult;
83 }
84
detach(QPlaceSearchResult * result)85 void tst_QPlaceResult::detach(QPlaceSearchResult * result)
86 {
87 result->setTitle("title");
88 }
89
setSubClassProperty(QPlaceResult * result)90 void tst_QPlaceResult::setSubClassProperty(QPlaceResult *result)
91 {
92 result->setSponsored(false);
93 }
94
constructorTest()95 void tst_QPlaceResult::constructorTest()
96 {
97 QPlaceResult result;
98 QCOMPARE(result.type(), QPlaceSearchResult::PlaceResult);
99
100 result.setTitle(QStringLiteral("title"));
101
102 QPlaceIcon icon;
103 QVariantMap parameters;
104 parameters.insert(QStringLiteral("paramKey"), QStringLiteral("paramValue"));
105 icon.setParameters(parameters);
106 result.setIcon(icon);
107
108 QPlace place;
109 place.setName("place");
110 result.setPlace(place);
111
112 result.setDistance(500);
113 result.setSponsored(true);
114
115 //check copy constructor
116 QPlaceResult result2(result);
117 QCOMPARE(result2.title(), QStringLiteral("title"));
118 QCOMPARE(result2.icon(), icon);
119 QCOMPARE(result2.place(), place);
120 QVERIFY(qFuzzyCompare(result.distance(), 500));
121 QCOMPARE(result2.isSponsored(), true);
122
123 QVERIFY(QLocationTestUtils::compareEquality(result, result2));
124
125 //check results are the same after detachment of underlying shared data pointer
126 result2.setTitle("title");
127 QVERIFY(QLocationTestUtils::compareEquality(result, result2));
128
129 //check construction of SearchResult using a PlaceResult
130 QPlaceSearchResult searchResult(result);
131 QCOMPARE(searchResult.title(), QStringLiteral("title"));
132 QCOMPARE(searchResult.icon(), icon);
133 QVERIFY(QLocationTestUtils::compareEquality(searchResult, result));
134 QVERIFY(searchResult.type() == QPlaceSearchResult::PlaceResult);
135 result2 = searchResult;
136 QVERIFY(QLocationTestUtils::compareEquality(result, result2));
137
138 //check construction of a SearchResult using a SearchResult
139 //that is actually a PlaceResult underneath
140 QPlaceSearchResult searchResult2(searchResult);
141 QCOMPARE(searchResult2.title(), QStringLiteral("title"));
142 QCOMPARE(searchResult2.icon(), icon);
143 QVERIFY(QLocationTestUtils::compareEquality(searchResult2, result));
144 QVERIFY(QLocationTestUtils::compareEquality(searchResult, searchResult2));
145 QVERIFY(searchResult2.type() == QPlaceSearchResult::PlaceResult);
146 result2 = searchResult2;
147 QVERIFY(QLocationTestUtils::compareEquality(result, result2));
148 }
149
title()150 void tst_QPlaceResult::title()
151 {
152 QPlaceResult result;
153 QVERIFY(result.title().isEmpty());
154
155 result.setTitle(QStringLiteral("title"));
156 QCOMPARE(result.title(), QStringLiteral("title"));
157
158 result.setTitle(QString());
159 QVERIFY(result.title().isEmpty());
160
161 QPlaceResult result2;
162 QVERIFY(QLocationTestUtils::compareEquality(result, result2));
163
164 result2.setTitle("title");
165 QVERIFY(QLocationTestUtils::compareInequality(result, result2));
166
167 result.setTitle("title");
168 QVERIFY(QLocationTestUtils::compareEquality(result, result2));
169 }
170
icon()171 void tst_QPlaceResult::icon()
172 {
173 QPlaceResult result;
174 QVERIFY(result.icon().isEmpty());
175
176 QPlaceIcon icon;
177 QVariantMap iconParams;
178 iconParams.insert(QStringLiteral("paramKey"), QStringLiteral("paramValue"));
179 icon.setParameters(iconParams);
180 result.setIcon(icon);
181 QCOMPARE(result.icon(), icon);
182
183 result.setIcon(QPlaceIcon());
184 QVERIFY(result.icon().isEmpty());
185
186 QPlaceResult result2;
187 QVERIFY(QLocationTestUtils::compareEquality(result, result2));
188
189 result2.setIcon(icon);
190 QVERIFY(QLocationTestUtils::compareInequality(result, result2));
191
192 result.setIcon(icon);
193 QVERIFY(QLocationTestUtils::compareEquality(result, result2));
194 }
195
distance()196 void tst_QPlaceResult::distance()
197 {
198 QPlaceResult result;
199 QVERIFY(qIsNaN(result.distance()));
200
201 result.setDistance(3.14);
202 QVERIFY(qFuzzyCompare(result.distance(), 3.14));
203
204 result.setDistance(qQNaN());
205 QVERIFY(qIsNaN(result.distance()));
206
207 QPlaceResult result2;
208 QVERIFY(QLocationTestUtils::compareEquality(result, result2));
209
210 result2.setDistance(3.14);
211 QVERIFY(QLocationTestUtils::compareInequality(result, result2));
212
213 result.setDistance(3.14);
214 QVERIFY(QLocationTestUtils::compareEquality(result, result2));
215 }
216
place()217 void tst_QPlaceResult::place()
218 {
219 QPlaceResult result;
220 QCOMPARE(result.place(), QPlace());
221
222 QPlace place;
223 place.setName("place");
224 result.setPlace (place);
225 QCOMPARE(result.place(), place);
226
227 result.setPlace(QPlace());
228 QCOMPARE(result.place(), QPlace());
229
230 QPlaceResult result2;
231 QVERIFY(QLocationTestUtils::compareEquality(result, result2));
232
233 result2.setPlace(place);
234 QVERIFY(QLocationTestUtils::compareInequality(result, result2));
235
236 result.setPlace(place);
237 QVERIFY(QLocationTestUtils::compareEquality(result, result2));
238 }
239
sponsored()240 void tst_QPlaceResult::sponsored()
241 {
242 QPlaceResult result;
243 QCOMPARE(result.isSponsored(), false);
244
245 result.setSponsored(true);
246 QCOMPARE(result.isSponsored(), true);
247
248 result.setSponsored(false);
249 QCOMPARE(result.isSponsored(), false);
250
251 QPlaceResult result2;
252 QVERIFY(QLocationTestUtils::compareEquality(result, result2));
253
254 result2.setSponsored(true);
255 QVERIFY(QLocationTestUtils::compareInequality(result, result2));
256
257 result.setSponsored(true);
258 QVERIFY(QLocationTestUtils::compareEquality(result, result2));
259 }
260
conversion()261 void tst_QPlaceResult::conversion()
262 {
263 QLocationTestUtils::testConversion<tst_QPlaceResult,
264 QPlaceSearchResult,
265 QPlaceResult>(this);
266 }
267
268 QTEST_APPLESS_MAIN(tst_QPlaceResult)
269
270 #include "tst_qplaceresult.moc"
271