// Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #include #include #include #include #include #include QT_USE_NAMESPACE class tst_QPlaceSearchRequest : public QObject { Q_OBJECT public: tst_QPlaceSearchRequest(); private Q_SLOTS: void constructorTest(); void searchTermTest(); void categoriesTest(); void boundingCircleTest(); void boundingBoxTest(); void searchAreaTest(); void visibilityScopeTest(); void relevanceHintTest(); void searchContextTest(); void operatorsTest(); void clearTest(); }; tst_QPlaceSearchRequest::tst_QPlaceSearchRequest() { } void tst_QPlaceSearchRequest::constructorTest() { QPlaceSearchRequest testObj; Q_UNUSED(testObj); QPlaceSearchRequest *testObjPtr = new QPlaceSearchRequest(testObj); QVERIFY2(testObjPtr != NULL, "Copy constructor - null"); QVERIFY2(*testObjPtr == testObj, "Copy constructor - compare"); delete testObjPtr; } void tst_QPlaceSearchRequest::searchTermTest() { QPlaceSearchRequest testObj; QVERIFY2(testObj.searchTerm() == QString(), "Wrong default value"); testObj.setSearchTerm("testText"); QVERIFY2(testObj.searchTerm() == "testText", "Wrong value returned"); } void tst_QPlaceSearchRequest::categoriesTest() { QPlaceSearchRequest testObj; QVERIFY2(testObj.categories().count() == 0, "Wrong default value"); QPlaceCategory cat; cat.setCategoryId("45346"); testObj.setCategory(cat); QVERIFY2(testObj.categories().count() == 1, "Wrong categories count returned"); QVERIFY2(testObj.categories()[0] == cat, "Wrong category returned"); testObj.setCategory(QPlaceCategory()); QVERIFY(testObj.categories().isEmpty()); } void tst_QPlaceSearchRequest::boundingCircleTest() { QPlaceSearchRequest query; QVERIFY2(query.searchArea() == QGeoShape(), "Wrong default value"); QGeoCircle circle; circle.setCenter(QGeoCoordinate(30,20)); circle.setRadius(500.0); query.setSearchArea(circle); QVERIFY(query.searchArea() != QGeoShape()); QVERIFY(query.searchArea().type() == QGeoShape::CircleType); QVERIFY(query.searchArea() == circle); QGeoCircle retrievedCircle = query.searchArea(); QVERIFY2(retrievedCircle.center() == QGeoCoordinate(30,20), "Wrong value returned"); QVERIFY2(retrievedCircle.radius() == 500.0, "Wrong value returned"); query.clear(); QVERIFY2(query.searchArea() == QGeoShape(), "Search area not cleared"); } void tst_QPlaceSearchRequest::boundingBoxTest() { QPlaceSearchRequest query; QVERIFY2(query.searchArea() == QGeoShape(), "Wrong default value"); QGeoRectangle box; box.setTopLeft(QGeoCoordinate(30,20)); box.setBottomRight(QGeoCoordinate(10,50)); query.setSearchArea(box); QVERIFY(query.searchArea() != QGeoShape()); QVERIFY(query.searchArea().type() == QGeoShape::RectangleType); QVERIFY(query.searchArea() == box); QGeoRectangle retrievedBox = query.searchArea(); QVERIFY2(retrievedBox.topLeft() == QGeoCoordinate(30,20), "Wrong value returned"); QVERIFY2(retrievedBox.bottomRight() == QGeoCoordinate(10,50), "Wrong value returned"); query.clear(); QVERIFY2(query.searchArea() == QGeoShape(), "Wrong cleared value returned"); } void tst_QPlaceSearchRequest::searchAreaTest() { //test assignment of new search area over an old search area QPlaceSearchRequest query; QGeoCircle circle; circle.setCenter(QGeoCoordinate(30,20)); circle.setRadius(500.0); query.setSearchArea(circle); QVERIFY(query.searchArea() == circle); QGeoRectangle box; box.setTopLeft(QGeoCoordinate(30,20)); box.setBottomRight(QGeoCoordinate(10,50)); query.setSearchArea(box); QVERIFY2(query.searchArea() == box, "New search area not assigned"); } void tst_QPlaceSearchRequest::visibilityScopeTest() { QPlaceSearchRequest query; QVERIFY2(query.visibilityScope() == QLocation::UnspecifiedVisibility, "Wrong default value"); query.setVisibilityScope(QLocation::DeviceVisibility); QCOMPARE(query.visibilityScope(), QLocation::DeviceVisibility); query.setVisibilityScope(QLocation::DeviceVisibility | QLocation::PublicVisibility); QVERIFY(query.visibilityScope() & QLocation::DeviceVisibility); QVERIFY(!(query.visibilityScope() & QLocation::PrivateVisibility)); QVERIFY(query.visibilityScope() & QLocation::PublicVisibility); } void tst_QPlaceSearchRequest::relevanceHintTest() { QPlaceSearchRequest request; QCOMPARE(request.relevanceHint(), QPlaceSearchRequest::UnspecifiedHint); request.setRelevanceHint(QPlaceSearchRequest::DistanceHint); QCOMPARE(request.relevanceHint(), QPlaceSearchRequest::DistanceHint); request.setRelevanceHint(QPlaceSearchRequest::UnspecifiedHint); QCOMPARE(request.relevanceHint(), QPlaceSearchRequest::UnspecifiedHint); } void tst_QPlaceSearchRequest::searchContextTest() { QPlaceSearchRequest request; QVERIFY(!request.searchContext().value().isValid()); request.setSearchContext(QUrl(QStringLiteral("http://www.example.com/"))); QCOMPARE(request.searchContext().value(), QUrl(QStringLiteral("http://www.example.com/"))); } void tst_QPlaceSearchRequest::operatorsTest() { QPlaceSearchRequest testObj; testObj.setSearchTerm(QStringLiteral("testValue")); QPlaceSearchRequest testObj2; testObj2 = testObj; QVERIFY2(testObj == testObj2, "Not copied correctly"); testObj2.setSearchTerm(QStringLiteral("abc")); QVERIFY2(testObj != testObj2, "Object should be different"); testObj2.setSearchTerm(QStringLiteral("testValue")); QVERIFY(testObj == testObj2); QGeoRectangle b1(QGeoCoordinate(20,20), QGeoCoordinate(10,30)); QGeoRectangle b2(QGeoCoordinate(20,20), QGeoCoordinate(10,30)); QGeoRectangle b3(QGeoCoordinate(40,40), QGeoCoordinate(10,40)); //testing that identical boxes match testObj.setSearchArea(b1); testObj2.setSearchArea(b2); QVERIFY2(testObj == testObj2, "Identical box areas are not identified as matching"); //test that different boxes do not match testObj2.setSearchArea(b3); QVERIFY2(testObj != testObj2, "Different box areas identified as matching"); QGeoCircle c1(QGeoCoordinate(5,5),500); QGeoCircle c2(QGeoCoordinate(5,5),500); QGeoCircle c3(QGeoCoordinate(9,9),600); //test that identical cirlces match testObj.setSearchArea(c1); testObj2.setSearchArea(c2); QVERIFY2(testObj == testObj2, "Identical circle areas are not identified as matching"); //test that different circle don't match testObj2.setSearchArea(c3); QVERIFY2(testObj != testObj2, "Different circle areas identified as matching"); //test that circles and boxes do not match QGeoRectangle b4(QGeoCoordinate(20,20),QGeoCoordinate(10,30)); QGeoCircle c4(QGeoCoordinate(20,20),500); testObj.setSearchArea(b4); testObj2.setSearchArea(c4); QVERIFY2(testObj != testObj2, "Circle and box identified as matching"); //test that identical visibility scopes match testObj.clear(); testObj2.clear(); testObj.setVisibilityScope(QLocation::PublicVisibility); testObj2.setVisibilityScope(QLocation::PublicVisibility); QVERIFY2(testObj == testObj2, "Identical scopes not identified as matching"); //test that different scopes do not match testObj2.setVisibilityScope(QLocation::PrivateVisibility); QVERIFY2(testObj != testObj2, "Different scopes identified as matching"); //test that different search contexts do not match testObj.clear(); testObj2.clear(); testObj2.setSearchContext(QUrl(QStringLiteral("http://www.example.com/"))); QVERIFY(testObj != testObj2); } void tst_QPlaceSearchRequest::clearTest() { QPlaceSearchRequest req; req.setSearchTerm("pizza"); req.setSearchArea(QGeoCircle(QGeoCoordinate(1,1), 5000)); QPlaceCategory category; category.setName("Fast Food"); req.setCategory(category); req.setLimit(100); req.clear(); QVERIFY(req.searchTerm().isEmpty()); QVERIFY(req.searchArea() == QGeoShape()); QVERIFY(req.categories().isEmpty()); QVERIFY(req.limit() == -1); } QTEST_APPLESS_MAIN(tst_QPlaceSearchRequest) #include "tst_qplacesearchrequest.moc"