void testFilterIntersection() { //test a negative match QLandmarkIntersectionFilter intersectionFilter; QLandmarkNameFilter nameFilter1("Sasuke"); QLandmarkNameFilter nameFilter2("Kakashi"); QLandmarkNameFilter nameFilter3("Itachi"); QLandmark lm; lm.setName("Kakashi"); intersectionFilter << nameFilter1 << nameFilter2 << nameFilter3; QVERIFY(!MockEngine::testFilter(intersectionFilter,lm)); //test a positive match QLandmarkCategoryId cat1; cat1.setLocalId("konoha"); cat1.setManagerUri("qtlandmarks:mock:"); QLandmarkCategoryFilter categoryFilter(cat1); QLandmarkAttributeFilter attributeFilter; attributeFilter.setAttribute("description","sharingan"); lm.setDescription("sharingan"); lm.addCategoryId(cat1); intersectionFilter.clear(); intersectionFilter << attributeFilter << categoryFilter << nameFilter2; QVERIFY(MockEngine::testFilter(intersectionFilter,lm)); //test empty intersection filter intersectionFilter.clear(); QVERIFY(!MockEngine::testFilter(intersectionFilter,lm)); }
bool QLandmarkFileHandlerGpx::readWaypoint(QLandmark &landmark, const QString &elementName) { /* <xsd:complexType name="wptType"> <xsd:sequence> <xsd:element name="ele" type="xsd:decimal" minOccurs="0" /> <xsd:element name="time" type="xsd:dateTime" minOccurs="0" /> <xsd:element name="magvar" type="degreesType" minOccurs="0" /> <xsd:element name="geoidheight" type="xsd:decimal" minOccurs="0" /> <xsd:element name="name" type="xsd:string" minOccurs="0" /> <xsd:element name="cmt" type="xsd:string" minOccurs="0" /> <xsd:element name="desc" type="xsd:string" minOccurs="0" /> <xsd:element name="src" type="xsd:string" minOccurs="0" /> <xsd:element name="link" type="linkType" minOccurs="0" maxOccurs="unbounded" /> <xsd:element name="sym" type="xsd:string" minOccurs="0" /> <xsd:element name="type" type="xsd:string" minOccurs="0" /> <xsd:element name="fix" type="fixType" minOccurs="0" /> <xsd:element name="sat" type="xsd:nonNegativeInteger" minOccurs="0" /> <xsd:element name="hdop" type="xsd:decimal" minOccurs="0" /> <xsd:element name="vdop" type="xsd:decimal" minOccurs="0" /> <xsd:element name="pdop" type="xsd:decimal" minOccurs="0" /> <xsd:element name="ageofdgpsdata" type="xsd:decimal" minOccurs="0" /> <xsd:element name="dgpsid" type="dgpsStationType" minOccurs="0" /> <xsd:element name="extensions" type="extensionsType" minOccurs="0" /> </xsd:sequence> <xsd:attribute name="lat" type="latitudeType" use="required" /> <xsd:attribute name="lon" type="longitudeType" use="required" /> </xsd:complexType> <xsd:simpleType name="latitudeType"> <xsd:restriction base="xsd:decimal"> <xsd:minInclusive value="-90.0"/> <xsd:maxInclusive value="90.0"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="longitudeType"> <xsd:restriction base="xsd:decimal"> <xsd:minInclusive value="-180.0"/> <xsd:maxExclusive value="180.0"/> </xsd:restriction> </xsd:simpleType> */ Q_ASSERT(m_reader->isStartElement() && (m_reader->name() == elementName)); QGeoCoordinate coord; if (m_reader->attributes().hasAttribute("lat")) { bool ok = false; QString s = m_reader->attributes().value("lat").toString(); if ((s == "INF") || (s == "-INF") || (s == "NaN")) { m_reader->raiseError(QString("The attribute \"lat\" expected a value convertable to type double (value was \"%1\").").arg(s)); return false; } double lat = s.toDouble(&ok); if (!ok) { m_reader->raiseError(QString("The attribute \"lat\" expected a value convertable to type double (value was \"%1\").").arg(s)); return false; } if (lat < -90.0 || 90.0 < lat) { m_reader->raiseError(QString("The attribute \"lat\" fell outside of the bounds -90.0 <= lat <= 90.0 (value was \"%1\").").arg(s)); return false; } coord.setLatitude(lat); } else { m_reader->raiseError(QString("The element \"%1\" did not have the required attribute \"lat\".").arg(elementName)); return false; } if (m_reader->attributes().hasAttribute("lon")) { bool ok = false; QString s = m_reader->attributes().value("lon").toString(); if ((s == "INF") || (s == "-INF") || (s == "NaN")) { m_reader->raiseError(QString("The attribute \"lon\" expected a value convertable to type double (value was \"%1\").").arg(s)); return false; } double lon = s.toDouble(&ok); if (!ok) { m_reader->raiseError(QString("The attribute \"lon\" expected a value convertable to type double (value was \"%1\").").arg(s)); return false; } if (lon < -180.0 || 180.0 <= lon) { m_reader->raiseError(QString("The attribute \"lon\" fell outside of the bounds -180.0 <= lat < 180.0 (value was \"%1\").").arg(s)); return false; } coord.setLongitude(lon); } else { m_reader->raiseError(QString("The element \"%1\" did not have the required attribute \"lon\".").arg(elementName)); return false; } landmark.setCoordinate(coord); if (!m_reader->readNextStartElement()) return true; if (m_reader->name() == "ele") { bool ok = false; QString s = m_reader->readElementText(); if ((s == "INF") || (s == "-INF") || (s == "NaN")) { m_reader->raiseError(QString("The element \"ele\" expected a value convertable to type double (value was \"%1\").").arg(s)); return false; } double alt = s.toDouble(&ok); if (!ok) { m_reader->raiseError(QString("The element \"ele\" expected a value convertable to type double (value was \"%1\").").arg(s)); return false; } coord.setAltitude(alt); landmark.setCoordinate(coord); if (!m_reader->readNextStartElement()) return true; } QList<QString> unusedNames1; unusedNames1 << "time"; unusedNames1 << "magvar"; unusedNames1 << "geoidheight"; for (int i = 0; i < unusedNames1.size(); ++i) { if (m_reader->name() == unusedNames1.at(i)) { // Not used outside of schema compliance check m_reader->skipCurrentElement(); if (!m_reader->readNextStartElement()) return true; } } if (m_reader->name() == "name") { landmark.setName(m_reader->readElementText()); if (!m_reader->readNextStartElement()) return true; } if (m_reader->name() == "cmt") { // Not used outside of schema compliance check m_reader->skipCurrentElement(); if (!m_reader->readNextStartElement()) return true; } if (m_reader->name() == "desc") { landmark.setDescription(m_reader->readElementText()); if (!m_reader->readNextStartElement()) return true; } if (m_reader->name() == "src") { // Not used outside of schema compliance check m_reader->skipCurrentElement(); if (!m_reader->readNextStartElement()) return true; } while (m_reader->name() == "link") { // Not used outside of schema compliance check m_reader->skipCurrentElement(); if (!m_reader->readNextStartElement()) return true; } QList<QString> unusedNames2; unusedNames2 << "sym"; unusedNames2 << "type"; unusedNames2 << "fix"; unusedNames2 << "sat"; unusedNames2 << "hdop"; unusedNames2 << "vdop"; unusedNames2 << "pdop"; unusedNames2 << "ageofdgpsdata"; unusedNames2 << "dgpsid"; unusedNames2 << "extensions"; for (int i = 0; i < unusedNames2.size(); ++i) { if (m_reader->name() == unusedNames2.at(i)) { // Not used outside of schema compliance check m_reader->skipCurrentElement(); if (!m_reader->readNextStartElement()) return true; } } m_reader->raiseError(QString("The element \"%1\" did not expect a child element named \"%2\" at this point (unknown child element or child element out of order).").arg(elementName).arg(m_reader->name().toString())); return false; }
bool QLandmarkFileHandlerLmx::readLandmark(QLandmark &landmark) { /* <xsd:complexType name="landmarkType"> <xsd:sequence> <xsd:element name="name" type="xsd:string" minOccurs="0" /> <xsd:element name="description" type="xsd:string" minOccurs="0" /> <xsd:element name="coordinates" type="coordinatesType" minOccurs="0" /> <xsd:element name="coverageRadius" minOccurs="0"> <xsd:simpleType> <xsd:restriction base="xsd:float"> <xsd:minInclusive value="0"/> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name="addressInfo" type="addressInfoType" minOccurs="0" /> <xsd:element name="mediaLink" type="mediaLinkType" minOccurs="0" maxOccurs="unbounded" /> <xsd:element name="category" type="categoryType" minOccurs="0" maxOccurs="unbounded" /> </xsd:sequence> </xsd:complexType> */ if(m_cancel && (*m_cancel) == true) { m_errorCode = QLandmarkManager::CancelError; m_error = "Import of lmx file was canceled"; return false; } Q_ASSERT(m_reader->isStartElement() && (m_reader->name() == "landmark")); m_landmarkCategoryNames.append(QStringList()); if (!m_reader->readNextStartElement()) return true; if (m_reader->name() == "name") { landmark.setName(m_reader->readElementText()); if (!m_reader->readNextStartElement()) return true; } if (m_reader->name() == "description") { landmark.setDescription(m_reader->readElementText()); if (!m_reader->readNextStartElement()) return true; } if (m_reader->name() == "coordinates") { if (!readCoordinates(landmark)) return false; if (!m_reader->readNextStartElement()) return true; } if (m_reader->name() == "coverageRadius") { bool ok = false; QString s = m_reader->readElementText(); if ((s == "INF") || (s == "-INF") || (s == "NaN")) { m_reader->raiseError(QString("The element \"coverageRadius\" expected a value convertable to type real (value was \"%1\").").arg(s)); return false; } qreal rad = (qreal)(s.toDouble(&ok)); if (!ok) { m_reader->raiseError(QString("The element \"coverageRadius\" expected a value convertable to type real (value was \"%1\").").arg(s)); return false; } if (rad < 0.0) { m_reader->raiseError(QString("The element \"coverageRadius\" is expected to have a non-negative value (value was \"%1\").").arg(s)); return false; } landmark.setRadius(rad); if (!m_reader->readNextStartElement()) return true; } if (m_reader->name() == "addressInfo") { if (!readAddressInfo(landmark)) return false; if (!m_reader->readNextStartElement()) return true; } // TODO need to document the fact that only the first link is read // and the others are ignored bool mediaLinkRead = false; while (m_reader->name() == "mediaLink") { if (!mediaLinkRead) { mediaLinkRead = true; if (!readMediaLink(landmark)) return false; } if (!m_reader->readNextStartElement()) return true; } QStringList categoryNames; while (m_reader->name() == "category") { QString name; if (!readCategory(name)) return false; categoryNames << name; if (!m_reader->readNextStartElement()) { m_landmarkCategoryNames.last() = categoryNames; return true; } } m_reader->raiseError(QString("The element \"landmark\" did not expect a child element named \"%1\" at this point (unknown child element or child element out of order).").arg(m_reader->name().toString())); return false; }