void testUnionFilter() { QLandmarkCategoryId catId; catId.setLocalId("1"); catId.setManagerUri("qtlandmarks:mock:"); QLandmarkCategoryId catId2; catId2.setLocalId("2"); catId2.setManagerUri("qtlandmarks:mock:"); //test a match with the union filter QLandmarkUnionFilter unionFilter; QLandmarkNameFilter nameFilter("beach"); QLandmarkProximityFilter proximityFilter(QGeoCoordinate(30,30)); proximityFilter.setRadius(QGeoCoordinate(30,30).distanceTo(QGeoCoordinate(30,32))); QLandmarkCategoryFilter categoryFilter; categoryFilter.setCategoryId(catId); QLandmark lm; lm.setName("statue"); lm.setCoordinate(QGeoCoordinate(-30,-29)); lm.addCategoryId(catId); unionFilter << nameFilter << categoryFilter << proximityFilter; QVERIFY(MockEngine::testFilter(unionFilter,lm)); //test no match with union filter lm.removeCategoryId(catId); lm.addCategoryId(catId2); QVERIFY(!MockEngine::testFilter(unionFilter,lm)); //test empty union filter unionFilter.clear(); QVERIFY(!MockEngine::testFilter(unionFilter,lm)); }
bool LandmarkFilterDialog::setupFetchRequest() { if (filterAllCheckBox->checkState() == Qt::Checked) { fetchRequest->setFilter(QLandmarkFilter()); fetchRequest->setSorting(QLandmarkNameSort()); } else { QLandmarkIntersectionFilter filter; QLandmarkSortOrder sortOrder = QLandmarkNameSort(); if (filterNameCheckBox->checkState() == Qt::Checked) { QLandmarkNameFilter nameFilter; nameFilter.setName(nameLineEdit->text()); if (startsWithRadioButton->isChecked()) nameFilter.setMatchFlags(QLandmarkFilter::MatchStartsWith); else nameFilter.setMatchFlags(QLandmarkFilter::MatchContains); filter.append(nameFilter); } if (filterCategoryCheckBox->checkState() == Qt::Checked) { QLandmarkCategoryFilter categoryFilter; if (categoryComboBox->count() > 0) { oldCategoryId = categoryComboBox->itemData(categoryComboBox->currentIndex()) .value<QLandmarkCategoryId>(); categoryFilter.setCategoryId(oldCategoryId); } filter.append(categoryFilter); } if (filterBoxCheckBox->checkState() == Qt::Checked) { if (!isValidLatitude(boxTopLeftLatitudeLineEdit->text())) { QMessageBox::warning(this,"Warning", "Top left latitude is invalid. Must be between -90 and 90 (not inclusive)", QMessageBox::Ok, QMessageBox::NoButton); return false; } else if (!isValidLongitude(boxTopLeftLongitudeLineEdit->text())) { QMessageBox::warning(this,"Warning", "Top left longitude is invalid. Must be between -180 and 180 (inclusive) ", QMessageBox::Ok, QMessageBox::NoButton); return false; } else if (!isValidLatitude(boxBottomRightLatitudeLineEdit->text())) { QMessageBox::warning(this,"Warning", "Bottom right latitude is invalid. (Must be between -90 and 90 (not inclusive)", QMessageBox::Ok, QMessageBox::NoButton); return false; } else if (!isValidLongitude(boxBottomRightLongitudeLineEdit->text())) { QMessageBox::warning(this,"Warning", "Bottom right longitude is invalid. (Must be between -180 and 180 (inclusive)", QMessageBox::Ok, QMessageBox::NoButton); return false; } QGeoCoordinate topLeft; topLeft.setLatitude(boxTopLeftLatitudeLineEdit->text().toDouble()); topLeft.setLongitude(boxTopLeftLongitudeLineEdit->text().toDouble()); QGeoCoordinate bottomRight; bottomRight.setLatitude(boxBottomRightLatitudeLineEdit->text().toDouble()); bottomRight.setLongitude(boxBottomRightLongitudeLineEdit->text().toDouble()); QGeoBoundingBox box; box.setTopLeft(topLeft); box.setBottomRight(bottomRight); QLandmarkBoxFilter boxFilter; boxFilter.setBoundingBox(box); filter.append(boxFilter); } if (filterProximityCheckBox->checkState() == Qt::Checked) { if (!isValidLatitude(proximityLatitudeLineEdit->text())) { QMessageBox::warning(this,"Warning", "Proximity latitude is invalid. It must be between -90 and 90 (not inclusive)", QMessageBox::Ok, QMessageBox::NoButton); return false; } else if (!isValidLongitude(proximityLongitudeLineEdit->text())) { QMessageBox::warning(this,"Warning", "Proximity longitude is invalid. It must be between -180 and 180 (inclusive) ", QMessageBox::Ok, QMessageBox::NoButton); return false; } bool ok; qreal radius = radiusLineEdit->text().toDouble(&ok); if (!ok) { QMessageBox::warning(this,"Warning", "Proximity radius is invalid. It must be a number", QMessageBox::Ok, QMessageBox::NoButton); return false; } QLandmarkProximityFilter proximityFilter; QGeoCoordinate center; center.setLatitude(proximityLatitudeLineEdit->text().toDouble()); center.setLongitude(proximityLongitudeLineEdit->text().toDouble()); proximityFilter.setCenter(center); proximityFilter.setRadius(radiusLineEdit->text().toDouble()); filter.append(proximityFilter); sortOrder = QLandmarkSortOrder(); } fetchRequest->setFilter(filter); fetchRequest->setSorting(sortOrder); } return true; }
void testFilterCategory() { //test category matches QLandmarkCategoryFilter categoryFilter; QLandmarkCategoryId catFilterId; catFilterId.setLocalId("1"); catFilterId.setManagerUri("qtlandmarks:mock:"); categoryFilter.setCategoryId(catFilterId); QLandmark lm; QLandmarkCategoryId lmCatId; lmCatId.setLocalId("1"); lmCatId.setManagerUri("qtlandmarks:mock:"); lm.addCategoryId(lmCatId); QVERIFY(MockEngine::testFilter(categoryFilter,lm)); //test category id doesn't match lm.removeCategoryId(lmCatId); QVERIFY(lm.categoryIds().count() == 0); lmCatId.setLocalId("2"); lm.addCategoryId(lmCatId); QVERIFY(!MockEngine::testFilter(categoryFilter,lm)); //test category uri that doesn't match QList<QLandmarkCategoryId> catIdList; lm.setCategoryIds(catIdList); QVERIFY(lm.categoryIds().count() == 0); lmCatId.setLocalId("1"); lmCatId.setManagerUri("qtlandmarks:fake:"); catIdList.append(lmCatId); lm.setCategoryIds(catIdList); QVERIFY(lm.categoryIds().count() == 1); QVERIFY(!MockEngine::testFilter(categoryFilter,lm)); //try match a category when the //landmark has multiple categories QLandmarkCategoryId lmCatId2; QLandmarkCategoryId lmCatId3; lmCatId.setLocalId("1"); lmCatId.setManagerUri("qtlandmarks:mock:"); lmCatId2.setLocalId("2"); lmCatId2.setManagerUri("qtlandmarks:mock:"); lmCatId3.setLocalId("3"); lmCatId3.setManagerUri("qtlandmarks:mock:"); catIdList.clear(); catIdList << lmCatId << lmCatId2 << lmCatId3; lm.setCategoryIds(catIdList); catFilterId.setLocalId("2"); catFilterId.setManagerUri("qtlandmarks:mock:"); categoryFilter.setCategoryId(catFilterId); QVERIFY(MockEngine::testFilter(categoryFilter, lm)); //category id doesn't match when the landmark //has multipl catgories catFilterId.setLocalId("4"); categoryFilter.setCategoryId(catFilterId); }