// 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 #include #include #include #include #include #include QT_USE_NAMESPACE class tst_Place : public QObject { Q_OBJECT public: tst_Place(); private Q_SLOTS: void constructorTest(); void categoriesTest(); void detailsFetchedTest(); void locationTest(); void ratingTest(); void supplierTest(); void imageContentTest(); void reviewContentTest(); void editorialContentTest(); void totalContentCountTest(); void totalContentCountTest_data(); void nameTest(); void placeIdTest(); void attributionTest(); void contactDetailsTest(); void primaryPhoneTest(); void primaryFaxTest(); void primaryEmailTest(); void primaryWebsiteTest(); void operatorsTest(); void extendedAttributeTest(); void visibilityTest(); void isEmptyTest(); }; tst_Place::tst_Place() { } void tst_Place::constructorTest() { QPlace testObj; testObj.setPlaceId("testId"); QPlaceAttribute paymentMethods; paymentMethods.setLabel("Payment methods"); paymentMethods.setText("Visa"); testObj.setExtendedAttribute(QStringLiteral("paymentMethods"), paymentMethods); QGeoLocation loc; loc.setCoordinate(QGeoCoordinate(10,20)); testObj.setLocation(loc); QPlace *testObjPtr = new QPlace(testObj); QVERIFY2(testObjPtr != NULL, "Copy constructor - null"); QVERIFY2(*testObjPtr == testObj, "Copy constructor - compare"); delete testObjPtr; } void tst_Place::nameTest() { QPlace testObj; QVERIFY2(testObj.name() == QString(), "Wrong default value"); testObj.setName("testText"); QVERIFY2(testObj.name() == "testText", "Wrong value returned"); } void tst_Place::placeIdTest() { QPlace testObj; QVERIFY2(testObj.placeId() == QString(), "Wrong default value"); testObj.setPlaceId("testText"); QVERIFY2(testObj.placeId() == "testText", "Wrong value returned"); } void tst_Place::totalContentCountTest() { QFETCH(QPlaceContent::Type, contentType); QPlace testObj; QVERIFY2(testObj.totalContentCount(contentType) == 0, "Wrong default value"); testObj.setTotalContentCount(contentType, 50); QVERIFY2(testObj.totalContentCount(contentType) == 50, "Wrong value returned"); testObj.setTotalContentCount(contentType,0); QVERIFY2(testObj.totalContentCount(contentType) == 0, "Wrong value returned"); } void tst_Place::totalContentCountTest_data() { QTest::addColumn("contentType"); QTest::newRow("Image content") << QPlaceContent::ImageType; QTest::newRow("Editoral content") << QPlaceContent::EditorialType; QTest::newRow("Review content") << QPlaceContent::ReviewType; } void tst_Place::ratingTest() { QPlace testObj; QVERIFY2(testObj.ratings() == QPlaceRatings(), "Wrong default value"); QPlaceRatings obj; obj.setCount(10); testObj.setRatings(obj); QVERIFY2(testObj.ratings() == obj, "Wrong value returned"); } void tst_Place::locationTest() { QPlace testObj; QVERIFY2(testObj.location() == QGeoLocation(), "Wrong default value"); QGeoLocation obj; obj.setCoordinate(QGeoCoordinate(10,20)); testObj.setLocation(obj); QVERIFY2(testObj.location() == obj, "Wrong value returned"); } void tst_Place::detailsFetchedTest() { QPlace testPlace; QVERIFY2(testPlace.detailsFetched() == false, "Wrong default value"); testPlace.setDetailsFetched(true); QVERIFY2(testPlace.detailsFetched() == true, "Wrong value returned"); testPlace.setDetailsFetched(false); QVERIFY2(testPlace.detailsFetched() == false, "Wrong value returned"); } void tst_Place::imageContentTest() { QPlace place; QVERIFY2(place.content(QPlaceContent::ImageType).count() ==0,"Wrong default value"); QPlaceContent dummyImage(QPlaceContent::ImageType); dummyImage.setValue(QPlaceContent::ImageUrl, QUrl("www.dummy.one")); QPlaceContent dummyImage2(QPlaceContent::ImageType); dummyImage2.setValue(QPlaceContent::ImageUrl, QUrl("www.dummy.two")); QPlaceContent dummyImage3(QPlaceContent::ImageType); dummyImage3.setValue(QPlaceContent::ImageUrl, QUrl("www.dummy.three")); QPlaceContent::Collection imageCollection; imageCollection.insert(0,dummyImage); imageCollection.insert(1, dummyImage2); imageCollection.insert(2, dummyImage3); place.setContent(QPlaceContent::ImageType, imageCollection); QPlaceContent::Collection retrievedCollection = place.content(QPlaceContent::ImageType); QCOMPARE(retrievedCollection.count(), 3); QCOMPARE(retrievedCollection.value(0), dummyImage); QCOMPARE(retrievedCollection.value(1), dummyImage2); QCOMPARE(retrievedCollection.value(2), dummyImage3); //replace the second and insert a sixth image //indexes 4 and 5 are "missing" QPlaceContent dummyImage2New(QPlaceContent::ImageType); dummyImage2.setValue(QPlaceContent::ImageUrl, QUrl("www.dummy.two.new")); QPlaceContent dummyImage6(QPlaceContent::ImageType); dummyImage6.setValue(QPlaceContent::ImageUrl, QUrl("www.dummy.six")); imageCollection.clear(); imageCollection.insert(1, dummyImage2New); imageCollection.insert(5, dummyImage6); place.insertContent(QPlaceContent::ImageType, imageCollection); retrievedCollection = place.content(QPlaceContent::ImageType); QCOMPARE(retrievedCollection.count(), 4); QCOMPARE(retrievedCollection.value(0), dummyImage); QCOMPARE(retrievedCollection.value(1), dummyImage2New); QCOMPARE(retrievedCollection.value(2), dummyImage3); QCOMPARE(retrievedCollection.value(3), QPlaceContent()); QCOMPARE(retrievedCollection.value(4), QPlaceContent()); QCOMPARE(retrievedCollection.value(5), dummyImage6); } void tst_Place::reviewContentTest() { QPlace place; QVERIFY2(place.content(QPlaceContent::ReviewType).count() ==0,"Wrong default value"); QPlaceContent dummyReview(QPlaceContent::ReviewType); dummyReview.setValue(QPlaceContent::ReviewTitle, QStringLiteral("Review 1")); QPlaceContent dummyReview2(QPlaceContent::ReviewType); dummyReview2.setValue(QPlaceContent::ReviewTitle, QStringLiteral("Review 2")); QPlaceContent dummyReview3(QPlaceContent::ReviewType); dummyReview3.setValue(QPlaceContent::ReviewTitle, QStringLiteral("Review 3")); QPlaceContent::Collection reviewCollection; reviewCollection.insert(0,dummyReview); reviewCollection.insert(1, dummyReview2); reviewCollection.insert(2, dummyReview3); place.setContent(QPlaceContent::ReviewType, reviewCollection); QPlaceContent::Collection retrievedCollection = place.content(QPlaceContent::ReviewType); QCOMPARE(retrievedCollection.count(), 3); QCOMPARE(retrievedCollection.value(0), dummyReview); QCOMPARE(retrievedCollection.value(1), dummyReview2); QCOMPARE(retrievedCollection.value(2), dummyReview3); //replace the second and insert a sixth review //indexes 4 and 5 are "missing" QPlaceContent dummyReview2New(QPlaceContent::ReviewType); dummyReview2.setValue(QPlaceContent::ReviewTitle, QStringLiteral("Review 2 new")); QPlaceContent dummyReview6(QPlaceContent::ReviewType); dummyReview6.setValue(QPlaceContent::ReviewTitle, QStringLiteral("Review 6")); reviewCollection.clear(); reviewCollection.insert(1, dummyReview2New); reviewCollection.insert(5, dummyReview6); place.insertContent(QPlaceContent::ReviewType, reviewCollection); retrievedCollection = place.content(QPlaceContent::ReviewType); QCOMPARE(retrievedCollection.count(), 4); QCOMPARE(retrievedCollection.value(0), dummyReview); QCOMPARE(retrievedCollection.value(1), dummyReview2New); QCOMPARE(retrievedCollection.value(2), dummyReview3); QCOMPARE(retrievedCollection.value(3), QPlaceContent()); QCOMPARE(retrievedCollection.value(4), QPlaceContent()); QCOMPARE(retrievedCollection.value(5), dummyReview6); } void tst_Place::editorialContentTest() { QPlace place; QVERIFY2(place.content(QPlaceContent::EditorialType).count() == 0, "Wrong default value"); QPlaceContent dummyEditorial(QPlaceContent::EditorialType); dummyEditorial.setValue(QPlaceContent::EditorialTitle, QStringLiteral("Editorial 1")); QPlaceContent dummyEditorial2(QPlaceContent::EditorialType); dummyEditorial2.setValue(QPlaceContent::EditorialTitle, QStringLiteral("Editorial 2")); QPlaceContent dummyEditorial3(QPlaceContent::EditorialType); dummyEditorial3.setValue(QPlaceContent::EditorialTitle, QStringLiteral("Editorial 3")); QPlaceContent::Collection editorialCollection; editorialCollection.insert(0,dummyEditorial); editorialCollection.insert(1, dummyEditorial2); editorialCollection.insert(2, dummyEditorial3); place.setContent(QPlaceContent::EditorialType, editorialCollection); QPlaceContent::Collection retrievedCollection = place.content(QPlaceContent::EditorialType); QCOMPARE(retrievedCollection.count(), 3); QCOMPARE(retrievedCollection.value(0), dummyEditorial); QCOMPARE(retrievedCollection.value(1), dummyEditorial2); QCOMPARE(retrievedCollection.value(2), dummyEditorial3); //replace the second and insert a sixth editorial //indexes 4 and 5 are "missing" QPlaceContent dummyEditorial2New(QPlaceContent::EditorialType); dummyEditorial2.setValue(QPlaceContent::EditorialTitle, QStringLiteral("Editorial 2 new")); QPlaceContent dummyEditorial6(QPlaceContent::EditorialType); dummyEditorial6.setValue(QPlaceContent::EditorialTitle, QStringLiteral("Editorial 6")); editorialCollection.clear(); editorialCollection.insert(1, dummyEditorial2New); editorialCollection.insert(5, dummyEditorial6); place.insertContent(QPlaceContent::EditorialType, editorialCollection); retrievedCollection = place.content(QPlaceContent::EditorialType); QCOMPARE(retrievedCollection.count(), 4); QCOMPARE(retrievedCollection.value(0), dummyEditorial); QCOMPARE(retrievedCollection.value(1), dummyEditorial2New); QCOMPARE(retrievedCollection.value(2), dummyEditorial3); QCOMPARE(retrievedCollection.value(3), QPlaceContent()); QCOMPARE(retrievedCollection.value(4), QPlaceContent()); QCOMPARE(retrievedCollection.value(5), dummyEditorial6); } void tst_Place::categoriesTest() { QPlace place; QVERIFY(place.categories().isEmpty()); //set a single category QPlaceCategory cat1; cat1.setName("cat1"); place.setCategory(cat1); QCOMPARE(place.categories().count(), 1); QCOMPARE(place.categories().at(0), cat1); //set multiple categories QPlaceCategory cat2; cat2.setName("cat2"); QPlaceCategory cat3; cat3.setName("cat3"); QList categories; categories << cat2 << cat3; place.setCategories(categories); QCOMPARE(place.categories().count(), 2); QVERIFY(place.categories().contains(cat2)); QVERIFY(place.categories().contains(cat3)); //set a single category again while there are multiple categories already assigned. place.setCategory(cat1); QCOMPARE(place.categories().count(), 1); QCOMPARE(place.categories().at(0), cat1); //set an empty list of categories place.setCategories(QList()); QVERIFY(place.categories().isEmpty()); } void tst_Place::supplierTest() { QPlace testObj; QCOMPARE(testObj.supplier(), QPlaceSupplier()); QPlaceSupplier sup; sup.setName("testName1"); sup.setSupplierId("testId"); testObj.setSupplier(sup); QCOMPARE(testObj.supplier(), sup); } void tst_Place::attributionTest() { QPlace testPlace; QVERIFY(testPlace.attribution().isEmpty()); testPlace.setAttribution(QStringLiteral("attribution")); QCOMPARE(testPlace.attribution(), QStringLiteral("attribution")); testPlace.setAttribution(QString()); QVERIFY(testPlace.attribution().isEmpty()); } void tst_Place::contactDetailsTest() { QPlaceContactDetail phone1; phone1.setLabel("Phone1"); phone1.setValue("555-5555"); QPlaceContactDetail phone2; phone2.setLabel("Phone2"); phone2.setValue("555-5556"); QList phones; phones << phone1 << phone2; QPlaceContactDetail email; email.setLabel("Email"); email.setValue("email@email.com"); QPlace place; place.setContactDetails(QPlaceContactDetail::Phone,phones); QCOMPARE(place.contactTypes().count(), 1); QVERIFY(place.contactTypes().contains(QPlaceContactDetail::Phone)); QCOMPARE(place.contactDetails(QPlaceContactDetail::Phone), phones); place.appendContactDetail(QPlaceContactDetail::Email, email); QCOMPARE(place.contactTypes().count(), 2); QVERIFY(place.contactTypes().contains(QPlaceContactDetail::Phone)); QVERIFY(place.contactTypes().contains(QPlaceContactDetail::Email)); QCOMPARE(place.contactDetails(QPlaceContactDetail::Phone), phones); QCOMPARE(place.contactDetails(QPlaceContactDetail::Email).count(), 1); QCOMPARE(place.contactDetails(QPlaceContactDetail::Email).at(0), email); place.removeContactDetails(QPlaceContactDetail::Phone); QCOMPARE(place.contactTypes().count(), 1); QVERIFY(!place.contactTypes().contains(QPlaceContactDetail::Phone)); QVERIFY(place.contactDetails(QPlaceContactDetail::Phone).isEmpty()); QVERIFY(place.contactTypes().contains(QPlaceContactDetail::Email)); QCOMPARE(place.contactDetails(QPlaceContactDetail::Email).count(), 1); QCOMPARE(place.contactDetails(QPlaceContactDetail::Email).at(0), email); place.removeContactDetails(QPlaceContactDetail::Email); QVERIFY(place.contactTypes().isEmpty()); QVERIFY(place.contactDetails(QPlaceContactDetail::Email).isEmpty()); } void tst_Place::primaryPhoneTest() { QPlace place; QVERIFY2(place.primaryPhone().isEmpty(), "Wrong default value"); QPlaceContactDetail contactDetail; contactDetail.setLabel(QStringLiteral("Phone")); contactDetail.setValue(QStringLiteral("555-5555")); place.appendContactDetail(QPlaceContactDetail::Phone, contactDetail); QCOMPARE(place.primaryPhone(), QString("555-5555")); //try clearing the primary phone number place.setContactDetails(QPlaceContactDetail::Phone, QList()); QCOMPARE(place.primaryPhone(), QString()); } void tst_Place::primaryEmailTest() { QPlace place; QVERIFY2(place.primaryEmail().isEmpty(), "Wrong default value"); QPlaceContactDetail contactDetail; contactDetail.setLabel(QStringLiteral("Email")); contactDetail.setValue(QStringLiteral("test@test.com")); place.appendContactDetail(QPlaceContactDetail::Email, contactDetail); QCOMPARE(place.primaryEmail(), QStringLiteral("test@test.com")); //try clearing the primary email address place.setContactDetails(QPlaceContactDetail::Email, QList()); QCOMPARE(place.primaryEmail(), QString()); } void tst_Place::primaryFaxTest() { QPlace place; QVERIFY2(place.primaryFax().isEmpty(), "Wrong default value"); QPlaceContactDetail contactDetail; contactDetail.setLabel(QStringLiteral("Fax")); contactDetail.setValue(QStringLiteral("555-5555")); place.appendContactDetail(QPlaceContactDetail::Fax, contactDetail); QCOMPARE(place.primaryFax(), QStringLiteral("555-5555")); //try clearing the primary fax number place.setContactDetails(QPlaceContactDetail::Fax, QList()); QCOMPARE(place.primaryFax(), QString()); } void tst_Place::primaryWebsiteTest() { QPlace place; QVERIFY2(place.primaryWebsite().isEmpty(), "Wrong default value"); QPlaceContactDetail contactDetail; contactDetail.setLabel(QStringLiteral("Website")); contactDetail.setValue(QStringLiteral("www.example.com")); place.appendContactDetail(QPlaceContactDetail::Website, contactDetail); QCOMPARE(place.primaryWebsite(), QUrl("www.example.com")); //try clearing the primary website number place.setContactDetails(QPlaceContactDetail::Website, QList()); QCOMPARE(place.primaryWebsite(), QUrl()); } void tst_Place::operatorsTest() { QPlace testObj; testObj.setPlaceId("testId"); QPlaceAttribute paymentMethods; paymentMethods.setLabel("Payment methods"); paymentMethods.setText("Visa"); testObj.setExtendedAttribute(QStringLiteral("paymentMethods"), paymentMethods); QGeoLocation loc; loc.setCoordinate(QGeoCoordinate(10,20)); testObj.setLocation(loc); QPlace testObj2; testObj2 = testObj; QVERIFY2(testObj == testObj2, "Not copied correctly"); testObj2.setPlaceId("342-456"); QVERIFY2(testObj != testObj2, "Object should be different"); } void tst_Place::extendedAttributeTest() { QPlace place; QVERIFY(place.extendedAttributeTypes().isEmpty()); QPlaceAttribute smoking; smoking.setLabel(QStringLiteral("Public Smoking")); smoking.setText(QStringLiteral("No")); //test setting of an attribue place.setExtendedAttribute(QStringLiteral("smoking"), smoking); QVERIFY(place.extendedAttributeTypes().contains(QStringLiteral("smoking"))); QCOMPARE(place.extendedAttributeTypes().count(), 1); QCOMPARE(place.extendedAttribute(QStringLiteral("smoking")).label(), QStringLiteral("Public Smoking")); QCOMPARE(place.extendedAttribute(QStringLiteral("smoking")).text(), QStringLiteral("No")); QPlaceAttribute shelter; shelter.setLabel(QStringLiteral("Outdoor shelter")); shelter.setText(QStringLiteral("Yes")); //test setting another new attribute place.setExtendedAttribute("shelter", shelter); QVERIFY(place.extendedAttributeTypes().contains(QStringLiteral("shelter"))); QVERIFY(place.extendedAttributeTypes().contains(QStringLiteral("smoking"))); QCOMPARE(place.extendedAttributeTypes().count(), 2); QCOMPARE(place.extendedAttribute(QStringLiteral("shelter")).label(), QStringLiteral("Outdoor shelter")); QCOMPARE(place.extendedAttribute(QStringLiteral("shelter")).text(), QStringLiteral("Yes")); //test overwriting an attribute shelter.setText(QStringLiteral("No")); place.setExtendedAttribute(QStringLiteral("shelter"), shelter); QVERIFY(place.extendedAttributeTypes().contains(QStringLiteral("shelter"))); QVERIFY(place.extendedAttributeTypes().contains(QStringLiteral("smoking"))); QCOMPARE(place.extendedAttributeTypes().count(), 2); QCOMPARE(place.extendedAttribute(QStringLiteral("shelter")).text(), QStringLiteral("No")); //test clearing of attributes by setting them to the default attribute for (const QString &attributeType : place.extendedAttributeTypes()) place.setExtendedAttribute(attributeType, QPlaceAttribute()); QCOMPARE(place.extendedAttributeTypes().count(), 0); //test removing of attributes place.setExtendedAttribute(QStringLiteral("smoking"), smoking); QVERIFY(!place.extendedAttributeTypes().isEmpty()); place.removeExtendedAttribute(QStringLiteral("smoking")); QVERIFY(place.extendedAttributeTypes().isEmpty()); } void tst_Place::visibilityTest() { QPlace place; QCOMPARE(place.visibility(), QLocation::UnspecifiedVisibility); place.setVisibility(QLocation::DeviceVisibility); QCOMPARE(place.visibility(), QLocation::DeviceVisibility); } void tst_Place::isEmptyTest() { QGeoLocation location; location.setCoordinate(QGeoCoordinate(6.788697, 51.224679)); QVERIFY(!location.isEmpty()); QPlaceCategory category; QPlaceRatings ratings; ratings.setCount(1); QVERIFY(!ratings.isEmpty()); QPlaceSupplier supplier; supplier.setName(QStringLiteral("Foo & Bar Imports")); QVERIFY(!supplier.isEmpty()); QPlaceIcon icon; QVariantMap iconParametersMap; iconParametersMap.insert(QStringLiteral("Para"), QStringLiteral("meter")); icon.setParameters(iconParametersMap); QVERIFY(!icon.isEmpty()); QPlaceContent content; QPlaceContent::Collection contentCollection; contentCollection.insert(42, content); QPlaceAttribute attribute; attribute.setLabel(QStringLiteral("noodle")); QPlaceContactDetail contactDetail; QPlace place; // default constructed QVERIFY(place.isEmpty()); // categories place.setCategory(category); QVERIFY(!place.isEmpty()); place.categories().clear(); place = QPlace(); // location place.setLocation(location); QVERIFY(!place.isEmpty()); place.setLocation(QGeoLocation()); QVERIFY(place.isEmpty()); // ratings place.setRatings(ratings); QVERIFY(!place.isEmpty()); place.setRatings(QPlaceRatings()); QVERIFY(place.isEmpty()); // supplier place.setSupplier(supplier); QVERIFY(!place.isEmpty()); place.setSupplier(QPlaceSupplier()); QVERIFY(place.isEmpty()); // attribution place.setAttribution(QStringLiteral("attr")); QVERIFY(!place.isEmpty()); place.setAttribution(QString()); QVERIFY(place.isEmpty()); // icon place.setIcon(icon); QVERIFY(!place.isEmpty()); place.setIcon(QPlaceIcon()); QVERIFY(place.isEmpty()); // content place.insertContent(QPlaceContent::EditorialType, contentCollection); QVERIFY(!place.isEmpty()); place = QPlace(); // name place.setName(QStringLiteral("Naniwa")); QVERIFY(!place.isEmpty()); place.setName(QString()); QVERIFY(place.isEmpty()); // placeId place.setPlaceId(QStringLiteral("naniwa")); QVERIFY(!place.isEmpty()); place.setPlaceId(QString()); QVERIFY(place.isEmpty()); // extendedAttributes place.setExtendedAttribute(QStringLiteral("part"), attribute); QVERIFY(!place.isEmpty()); place.removeExtendedAttribute(QStringLiteral("part")); QVERIFY(place.isEmpty()); // extendedAttributes place.setDetailsFetched(true); QVERIFY(place.isEmpty()); // contact detail place.appendContactDetail(QStringLiteral("phone"), contactDetail); QVERIFY(!place.isEmpty()); place.removeContactDetails(QStringLiteral("phone")); QVERIFY(place.isEmpty()); // visibility place.setVisibility(QLocation::DeviceVisibility); QVERIFY(!place.isEmpty()); place.setVisibility(QLocation::UnspecifiedVisibility); QVERIFY(place.isEmpty()); } QTEST_APPLESS_MAIN(tst_Place) #include "tst_qplace.moc"