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 
32 #include <QtLocation/private/qgeocameracapabilities_p.h>
33 #include <QtLocation/private/qgeotiledmap_p.h>
34 
35 QT_USE_NAMESPACE
36 
37 class tst_QGeoCameraCapabilities : public QObject
38 {
39     Q_OBJECT
40 
41 public:
42     tst_QGeoCameraCapabilities();
43 
44 private:
45     void populateGeoCameraCapabilitiesData();
46 
47 private Q_SLOTS:
48     void constructorTest_data();
49     void constructorTest();
50     void minimumZoomLevelTest();
51     void maximumZoomLevelTest();
52     void supportsBearingTest();
53     void supportsRollingTest();
54     void supportsTiltingTest();
55     void minimumTiltTest();
56     void maximumTiltTest();
57     void minimumFieldOfViewTest();
58     void maximumFieldOfViewTest();
59     void operatorsTest_data();
60     void operatorsTest();
61     void isValidTest();
62 };
63 
tst_QGeoCameraCapabilities()64 tst_QGeoCameraCapabilities::tst_QGeoCameraCapabilities()
65 {
66 }
67 
populateGeoCameraCapabilitiesData()68 void tst_QGeoCameraCapabilities::populateGeoCameraCapabilitiesData(){
69     QTest::addColumn<double>("minimumZoomLevel");
70     QTest::addColumn<double>("maximumZoomLevel");
71     QTest::addColumn<double>("minimumTilt");
72     QTest::addColumn<double>("maximumTilt");
73     QTest::addColumn<double>("minimumFieldOfView");
74     QTest::addColumn<double>("maximumFieldOfView");
75     QTest::addColumn<bool>("bearingSupport");
76     QTest::addColumn<bool>("rollingSupport");
77     QTest::addColumn<bool>("tiltingSupport");
78     QTest::newRow("zeros") << 0.0 << 0.0 << 0.0 << 0.0 << 0.0 << 0.0 << false << false << false;
79     QTest::newRow("valid") << 1.0 << 2.0 << 0.5 << 1.5 << 1.0 << 179.0 << true << true << true;
80     QTest::newRow("negative values") << 0.0 << 0.5 << -0.5 << -0.1 << -20.0 << -30.0 << true << true << true;
81 }
82 
constructorTest_data()83 void tst_QGeoCameraCapabilities::constructorTest_data(){
84     populateGeoCameraCapabilitiesData();
85 }
86 
constructorTest()87 void tst_QGeoCameraCapabilities::constructorTest()
88 {
89     QFETCH(double, minimumZoomLevel);
90     QFETCH(double, maximumZoomLevel);
91     QFETCH(double, minimumTilt);
92     QFETCH(double, maximumTilt);
93     QFETCH(double, minimumFieldOfView);
94     QFETCH(double, maximumFieldOfView);
95     QFETCH(bool, bearingSupport);
96     QFETCH(bool, rollingSupport);
97     QFETCH(bool, tiltingSupport);
98 
99     minimumFieldOfView = qBound(1.0, minimumFieldOfView, 179.0);
100     maximumFieldOfView = qBound(1.0, maximumFieldOfView, 179.0);
101 
102     // contructor test with default values
103     QGeoCameraCapabilities cameraCapabilities;
104     QGeoCameraCapabilities cameraCapabilities2(cameraCapabilities);
105     QCOMPARE(cameraCapabilities.minimumZoomLevel(), cameraCapabilities2.minimumZoomLevel());
106     QCOMPARE(cameraCapabilities.maximumZoomLevel(), cameraCapabilities2.maximumZoomLevel());
107     QVERIFY2(cameraCapabilities.supportsBearing() == cameraCapabilities2.supportsBearing(), "Copy constructor failed for bearing support");
108     QVERIFY2(cameraCapabilities.supportsRolling() == cameraCapabilities2.supportsRolling(), "Copy constructor failed for rolling support ");
109     QVERIFY2(cameraCapabilities.supportsTilting() == cameraCapabilities2.supportsTilting(), "Copy constructor failed for tilting support");
110     QCOMPARE(cameraCapabilities.minimumTilt(), cameraCapabilities2.minimumTilt());
111     QCOMPARE(cameraCapabilities.maximumTilt(), cameraCapabilities2.maximumTilt());
112     QCOMPARE(cameraCapabilities.minimumFieldOfView(), cameraCapabilities2.minimumFieldOfView());
113     QCOMPARE(cameraCapabilities.maximumFieldOfView(), cameraCapabilities2.maximumFieldOfView());
114 
115     // constructor test after setting values
116     cameraCapabilities.setMinimumZoomLevel(minimumZoomLevel);
117     cameraCapabilities.setMaximumZoomLevel(maximumZoomLevel);
118     cameraCapabilities.setMinimumTilt(minimumTilt);
119     cameraCapabilities.setMaximumTilt(maximumTilt);
120     cameraCapabilities.setMinimumFieldOfView(minimumFieldOfView);
121     cameraCapabilities.setMaximumFieldOfView(maximumFieldOfView);
122     cameraCapabilities.setSupportsBearing(bearingSupport);
123     cameraCapabilities.setSupportsRolling(rollingSupport);
124     cameraCapabilities.setSupportsTilting(tiltingSupport);
125 
126     QGeoCameraCapabilities cameraCapabilities3(cameraCapabilities);
127     // test the correctness of the constructor copy
128     QCOMPARE(cameraCapabilities3.minimumZoomLevel(), minimumZoomLevel);
129     QCOMPARE(cameraCapabilities3.maximumZoomLevel(), maximumZoomLevel);
130     QCOMPARE(cameraCapabilities3.minimumTilt(), minimumTilt);
131     QCOMPARE(cameraCapabilities3.maximumTilt(), maximumTilt);
132     QCOMPARE(cameraCapabilities3.minimumFieldOfView(), minimumFieldOfView);
133     QCOMPARE(cameraCapabilities3.maximumFieldOfView(), maximumFieldOfView);
134     QVERIFY2(cameraCapabilities3.supportsBearing() == bearingSupport, "Copy constructor failed for bearing support");
135     QVERIFY2(cameraCapabilities3.supportsRolling() == rollingSupport, "Copy constructor failed for rolling support ");
136     QVERIFY2(cameraCapabilities3.supportsTilting() == tiltingSupport, "Copy constructor failed for tilting support");
137     // verify that values have not changed after a constructor copy
138     QCOMPARE(cameraCapabilities.minimumZoomLevel(), cameraCapabilities3.minimumZoomLevel());
139     QCOMPARE(cameraCapabilities.maximumZoomLevel(), cameraCapabilities3.maximumZoomLevel());
140     QVERIFY2(cameraCapabilities.supportsBearing() == cameraCapabilities3.supportsBearing(), "Copy constructor failed for bearing support");
141     QVERIFY2(cameraCapabilities.supportsRolling() == cameraCapabilities3.supportsRolling(), "Copy constructor failed for rolling support ");
142     QVERIFY2(cameraCapabilities.supportsTilting() == cameraCapabilities3.supportsTilting(), "Copy constructor failed for tilting support");
143     QCOMPARE(cameraCapabilities.minimumTilt(), cameraCapabilities3.minimumTilt());
144     QCOMPARE(cameraCapabilities.maximumTilt(), cameraCapabilities3.maximumTilt());
145     QCOMPARE(cameraCapabilities.minimumFieldOfView(), cameraCapabilities3.minimumFieldOfView());
146     QCOMPARE(cameraCapabilities.maximumFieldOfView(), cameraCapabilities3.maximumFieldOfView());
147 }
148 
minimumZoomLevelTest()149 void tst_QGeoCameraCapabilities::minimumZoomLevelTest()
150 {
151     QGeoCameraCapabilities cameraCapabilities;
152     cameraCapabilities.setMinimumZoomLevel(1.5);
153     QCOMPARE(cameraCapabilities.minimumZoomLevel(), 1.5);
154 
155     QGeoCameraCapabilities cameraCapabilities2 = cameraCapabilities;
156     QCOMPARE(cameraCapabilities2.minimumZoomLevel(), 1.5);
157     cameraCapabilities.setMinimumZoomLevel(2.5);
158     QCOMPARE(cameraCapabilities2.minimumZoomLevel(), 1.5);
159 }
160 
maximumZoomLevelTest()161 void tst_QGeoCameraCapabilities::maximumZoomLevelTest()
162 {
163     QGeoCameraCapabilities cameraCapabilities;
164     cameraCapabilities.setMaximumZoomLevel(3.5);
165     QCOMPARE(cameraCapabilities.maximumZoomLevel(), 3.5);
166 
167     QGeoCameraCapabilities cameraCapabilities2 = cameraCapabilities;
168     QCOMPARE(cameraCapabilities2.maximumZoomLevel(), 3.5);
169     cameraCapabilities.setMaximumZoomLevel(4.5);
170     QCOMPARE(cameraCapabilities2.maximumZoomLevel(), 3.5);
171 }
172 
supportsBearingTest()173 void tst_QGeoCameraCapabilities::supportsBearingTest(){
174     QGeoCameraCapabilities cameraCapabilities;
175     QVERIFY(!cameraCapabilities.supportsBearing());
176     cameraCapabilities.setSupportsBearing(true);
177     QVERIFY2(cameraCapabilities.supportsBearing(), "Camera capabilities should support bearing");
178 
179     QGeoCameraCapabilities cameraCapabilities2 = cameraCapabilities;
180     QVERIFY(cameraCapabilities2.supportsBearing());
181     cameraCapabilities.setSupportsBearing(false);
182     QVERIFY2(cameraCapabilities2.supportsBearing(), "Camera capabilities should support bearing");
183 }
184 
supportsRollingTest()185 void tst_QGeoCameraCapabilities::supportsRollingTest(){
186     QGeoCameraCapabilities cameraCapabilities;
187     QVERIFY(!cameraCapabilities.supportsRolling());
188     cameraCapabilities.setSupportsRolling(true);
189     QVERIFY2(cameraCapabilities.supportsRolling(), "Camera capabilities should support rolling");
190 
191     QGeoCameraCapabilities cameraCapabilities2 = cameraCapabilities;
192     QVERIFY(cameraCapabilities2.supportsRolling());
193     cameraCapabilities.setSupportsRolling(false);
194     QVERIFY2(cameraCapabilities2.supportsRolling(), "Camera capabilities should support rolling");
195 }
196 
supportsTiltingTest()197 void tst_QGeoCameraCapabilities::supportsTiltingTest(){
198     QGeoCameraCapabilities cameraCapabilities;
199     QVERIFY(!cameraCapabilities.supportsTilting());
200     cameraCapabilities.setSupportsTilting(true);
201     QVERIFY2(cameraCapabilities.supportsTilting(), "Camera capabilities should support tilting");
202 
203     QGeoCameraCapabilities cameraCapabilities2 = cameraCapabilities;
204     QVERIFY(cameraCapabilities2.supportsTilting());
205     cameraCapabilities.setSupportsTilting(false);
206     QVERIFY2(cameraCapabilities2.supportsTilting(), "Camera capabilities should support tilting");
207 }
208 
minimumTiltTest()209 void tst_QGeoCameraCapabilities::minimumTiltTest(){
210     QGeoCameraCapabilities cameraCapabilities;
211     QCOMPARE(cameraCapabilities.minimumTilt(),0.0);
212     cameraCapabilities.setMinimumTilt(0.5);
213     QCOMPARE(cameraCapabilities.minimumTilt(),0.5);
214 
215     QGeoCameraCapabilities cameraCapabilities2 = cameraCapabilities;
216     QCOMPARE(cameraCapabilities2.minimumTilt(), 0.5);
217     cameraCapabilities.setMinimumTilt(1.5);
218     QCOMPARE(cameraCapabilities2.minimumTilt(), 0.5);
219 }
220 
maximumTiltTest()221 void tst_QGeoCameraCapabilities::maximumTiltTest(){
222     QGeoCameraCapabilities cameraCapabilities;
223     QCOMPARE(cameraCapabilities.maximumTilt(),0.0);
224     cameraCapabilities.setMaximumTilt(1.5);
225     QCOMPARE(cameraCapabilities.maximumTilt(),1.5);
226 
227     QGeoCameraCapabilities cameraCapabilities2 = cameraCapabilities;
228     QCOMPARE(cameraCapabilities2.maximumTilt(), 1.5);
229     cameraCapabilities.setMaximumTilt(2.5);
230     QCOMPARE(cameraCapabilities2.maximumTilt(), 1.5);
231 }
232 
minimumFieldOfViewTest()233 void tst_QGeoCameraCapabilities::minimumFieldOfViewTest()
234 {
235     QGeoCameraCapabilities cameraCapabilities;
236     QCOMPARE(cameraCapabilities.minimumFieldOfView(), 45.0); // min/max default to 45
237     cameraCapabilities.setMinimumFieldOfView(1.5);
238     QCOMPARE(cameraCapabilities.minimumFieldOfView(), 1.5);
239     cameraCapabilities.setMinimumFieldOfView(-1.5);
240     QCOMPARE(cameraCapabilities.minimumFieldOfView(), 1.0);
241     cameraCapabilities.setMinimumFieldOfView(245.5);
242     QCOMPARE(cameraCapabilities.minimumFieldOfView(), 179.0);
243 
244     QGeoCameraCapabilities cameraCapabilities2 = cameraCapabilities;
245     QCOMPARE(cameraCapabilities2.minimumFieldOfView(), 179.0);
246     cameraCapabilities.setMinimumFieldOfView(2.5);
247     QCOMPARE(cameraCapabilities2.minimumFieldOfView(), 179.0);
248 }
249 
maximumFieldOfViewTest()250 void tst_QGeoCameraCapabilities::maximumFieldOfViewTest()
251 {
252     QGeoCameraCapabilities cameraCapabilities;
253     QCOMPARE(cameraCapabilities.maximumFieldOfView(), 45.0); // min/max default to 45
254     cameraCapabilities.setMaximumFieldOfView(1.5);
255     QCOMPARE(cameraCapabilities.maximumFieldOfView(), 1.5);
256     cameraCapabilities.setMaximumFieldOfView(-1.5);
257     QCOMPARE(cameraCapabilities.maximumFieldOfView(), 1.0);
258     cameraCapabilities.setMaximumFieldOfView(245.5);
259     QCOMPARE(cameraCapabilities.maximumFieldOfView(), 179.0);
260 
261     QGeoCameraCapabilities cameraCapabilities2 = cameraCapabilities;
262     QCOMPARE(cameraCapabilities2.maximumFieldOfView(), 179.0);
263     cameraCapabilities.setMaximumFieldOfView(2.5);
264     QCOMPARE(cameraCapabilities2.maximumFieldOfView(), 179.0);
265 }
266 
operatorsTest_data()267 void tst_QGeoCameraCapabilities::operatorsTest_data(){
268     populateGeoCameraCapabilitiesData();
269 }
270 
operatorsTest()271 void tst_QGeoCameraCapabilities::operatorsTest(){
272 
273     QFETCH(double, minimumZoomLevel);
274     QFETCH(double, maximumZoomLevel);
275     QFETCH(double, minimumTilt);
276     QFETCH(double, maximumTilt);
277     QFETCH(double, minimumFieldOfView);
278     QFETCH(double, maximumFieldOfView);
279     QFETCH(bool, bearingSupport);
280     QFETCH(bool, rollingSupport);
281     QFETCH(bool, tiltingSupport);
282 
283     minimumFieldOfView = qBound(1.0, minimumFieldOfView, 179.0);
284     maximumFieldOfView = qBound(1.0, maximumFieldOfView, 179.0);
285 
286     QGeoCameraCapabilities cameraCapabilities;
287     cameraCapabilities.setMinimumZoomLevel(minimumZoomLevel);
288     cameraCapabilities.setMaximumZoomLevel(maximumZoomLevel);
289     cameraCapabilities.setMinimumTilt(minimumTilt);
290     cameraCapabilities.setMaximumTilt(maximumTilt);
291     cameraCapabilities.setMinimumFieldOfView(minimumFieldOfView);
292     cameraCapabilities.setMaximumFieldOfView(maximumFieldOfView);
293     cameraCapabilities.setSupportsBearing(bearingSupport);
294     cameraCapabilities.setSupportsRolling(rollingSupport);
295     cameraCapabilities.setSupportsTilting(tiltingSupport);
296     QGeoCameraCapabilities cameraCapabilities2;
297     cameraCapabilities2 = cameraCapabilities;
298     // test the correctness of the assignment
299     QCOMPARE(cameraCapabilities2.minimumZoomLevel(), minimumZoomLevel);
300     QCOMPARE(cameraCapabilities2.maximumZoomLevel(), maximumZoomLevel);
301     QCOMPARE(cameraCapabilities2.minimumTilt(), minimumTilt);
302     QCOMPARE(cameraCapabilities2.maximumTilt(), maximumTilt);
303     QVERIFY2(cameraCapabilities2.supportsBearing() == bearingSupport, "Assignment operator failed for bearing support");
304     QVERIFY2(cameraCapabilities2.supportsRolling() == rollingSupport, "Assignment operator failed for rolling support ");
305     QVERIFY2(cameraCapabilities2.supportsTilting() == tiltingSupport, "Assignment operator failed for tilting support");
306     QCOMPARE(cameraCapabilities2.minimumFieldOfView(), minimumFieldOfView);
307     QCOMPARE(cameraCapabilities2.maximumFieldOfView(), maximumFieldOfView);
308     // verify that values have not changed after a constructor copy
309     QCOMPARE(cameraCapabilities.minimumZoomLevel(), cameraCapabilities2.minimumZoomLevel());
310     QCOMPARE(cameraCapabilities.maximumZoomLevel(), cameraCapabilities2.maximumZoomLevel());
311     QVERIFY2(cameraCapabilities.supportsBearing() == cameraCapabilities2.supportsBearing(), "Assignment operator failed for bearing support");
312     QVERIFY2(cameraCapabilities.supportsRolling() == cameraCapabilities2.supportsRolling(), "Assignment operator failed for rolling support ");
313     QVERIFY2(cameraCapabilities.supportsTilting() == cameraCapabilities2.supportsTilting(), "Assignment operator failed for tilting support");
314     QCOMPARE(cameraCapabilities.minimumTilt(), cameraCapabilities2.minimumTilt());
315     QCOMPARE(cameraCapabilities.maximumTilt(), cameraCapabilities2.maximumTilt());
316     QCOMPARE(cameraCapabilities.minimumFieldOfView(), cameraCapabilities2.minimumFieldOfView());
317     QCOMPARE(cameraCapabilities.maximumFieldOfView(), cameraCapabilities2.maximumFieldOfView());
318 }
319 
isValidTest()320 void tst_QGeoCameraCapabilities::isValidTest(){
321     QGeoCameraCapabilities cameraCapabilities;
322     QVERIFY2(!cameraCapabilities.isValid(), "Camera capabilities should default to invalid");
323     cameraCapabilities.setSupportsBearing(true);
324     QVERIFY2(cameraCapabilities.isValid(), "Camera capabilities should be valid");
325 
326     QGeoCameraCapabilities cameraCapabilities2;
327     QVERIFY2(!cameraCapabilities2.isValid(), "Camera capabilities should default to invalid");
328     cameraCapabilities2.setSupportsRolling(true);
329     QVERIFY2(cameraCapabilities2.isValid(), "Camera capabilities should be valid");
330 
331     QGeoCameraCapabilities cameraCapabilities3;
332     QVERIFY2(!cameraCapabilities3.isValid(), "Camera capabilities should default to invalid");
333     cameraCapabilities3.setSupportsTilting(true);
334     QVERIFY2(cameraCapabilities3.isValid(), "Camera capabilities should be valid");
335 
336     QGeoCameraCapabilities cameraCapabilities4;
337     QVERIFY2(!cameraCapabilities4.isValid(), "Camera capabilities should default to invalid");
338     cameraCapabilities4.setMinimumZoomLevel(1.0);
339     QVERIFY2(cameraCapabilities4.isValid(), "Camera capabilities should be valid");
340 
341     QGeoCameraCapabilities cameraCapabilities5;
342     QVERIFY2(!cameraCapabilities5.isValid(), "Camera capabilities should default to invalid");
343     cameraCapabilities5.setMaximumZoomLevel(1.5);
344     QVERIFY2(cameraCapabilities5.isValid(), "Camera capabilities should be valid");
345 
346     QGeoCameraCapabilities cameraCapabilities6;
347     QVERIFY2(!cameraCapabilities6.isValid(), "Camera capabilities should default to invalid");
348     cameraCapabilities6.setMinimumTilt(0.2);
349     QVERIFY2(cameraCapabilities6.isValid(), "Camera capabilities should be valid");
350 
351     QGeoCameraCapabilities cameraCapabilities7;
352     QVERIFY2(!cameraCapabilities7.isValid(), "Camera capabilities should default to invalid");
353     cameraCapabilities7.setMaximumTilt(0.8);
354     QVERIFY2(cameraCapabilities7.isValid(), "Camera capabilities should be valid");
355 }
356 
357 QTEST_APPLESS_MAIN(tst_QGeoCameraCapabilities)
358 
359 #include "tst_qgeocameracapabilities.moc"
360