diff options
Diffstat (limited to 'tests/auto/testplugin/qgeosearchmanagerengine_test.h')
-rw-r--r-- | tests/auto/testplugin/qgeosearchmanagerengine_test.h | 250 |
1 files changed, 250 insertions, 0 deletions
diff --git a/tests/auto/testplugin/qgeosearchmanagerengine_test.h b/tests/auto/testplugin/qgeosearchmanagerengine_test.h new file mode 100644 index 00000000..c3532521 --- /dev/null +++ b/tests/auto/testplugin/qgeosearchmanagerengine_test.h @@ -0,0 +1,250 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGEOSEARCHMANAGERENGINE_TEST_H +#define QGEOSEARCHMANAGERENGINE_TEST_H + +#include <qgeoserviceprovider.h> +#include <qgeosearchmanagerengine.h> +#include <QLocale> +#include <qlandmarkmanager.h> +#include <qgeoaddress.h> +#include <qgeoplace.h> +#include <qgeosearchreply.h> + +#include <QTimer> +#include <QTimerEvent> + +QTM_USE_NAMESPACE + + +class SearchReplyTest :public QGeoSearchReply +{ + Q_OBJECT +public: + SearchReplyTest(QObject *parent=0):QGeoSearchReply (parent) {} + + void callAddPlace ( const QGeoPlace & place ) {addPlace(place);} + void callSetError ( Error error, const QString & errorString ) {setError(error, errorString);} + void callSetFinished ( bool finished ) {setFinished(finished);} + void callSetLimit ( int limit ) {setLimit(limit);} + void callSetOffset ( int offset ) {setOffset(offset);} + void callSetPlaces ( const QList<QGeoPlace> & places ) {setPlaces(places);} + void callSetViewport ( QGeoBoundingArea * viewport ) {setViewport(viewport);} + void abort() { + emit aborted(); + } +Q_SIGNALS: + void aborted(); +}; + +class QGeoSearchManagerEngineTest: public QGeoSearchManagerEngine + +{ +Q_OBJECT +public: + QGeoSearchManagerEngineTest(const QMap<QString, QVariant> ¶meters, + QGeoServiceProvider::Error *error, QString *errorString) : + QGeoSearchManagerEngine(parameters), + validateWellKnownValues_(false), + finishRequestImmediately_(true), + supported_(true), + searchReply_(0), + timerId_(0), + errorCode_(QGeoSearchReply::NoError) + { + Q_UNUSED(error) + Q_UNUSED(errorString) + if (parameters.contains("supported")) + supported_ = qvariant_cast<bool>(parameters.value("supported")); + if (parameters.contains("finishRequestImmediately")) + finishRequestImmediately_ = qvariant_cast<bool>(parameters.value("finishRequestImmediately")); + if (parameters.contains("validateWellKnownValues")) + validateWellKnownValues_ = qvariant_cast<bool>(parameters.value("validateWellKnownValues")); + + setSupportedSearchTypes(QGeoSearchManager::SearchGeocode); + setSupportsGeocoding(supported_); + setSupportsReverseGeocoding(supported_); + setLocale(*(new QLocale (QLocale::German, QLocale::Germany))); + } + + QGeoSearchReply* geocode ( const QGeoAddress & address, QGeoBoundingArea * bounds ) + { + searchReply_ = new SearchReplyTest(); + connect(searchReply_, SIGNAL(aborted()), this, SLOT(requestAborted())); + searchReply_->callSetViewport(bounds); + + if (address.street().startsWith("error")) { + errorString_ = address.street(); + errorCode_ = (QGeoSearchReply::Error)address.county().toInt(); + } else { + errorString_ = ""; + errorCode_ = QGeoSearchReply::NoError; + } + // 1. Check if we are to validate values + if (validateWellKnownValues_) { + if (address.street() != "wellknown street") { + searchReply_->callSetError(QGeoSearchReply::EngineNotSetError, address.street()); + } else { + searchReply_->callSetError(QGeoSearchReply::NoError,address.street()); + } + } + + // 2. Set the places into the reply + setPlaces(searchReply_, address); + + // 3. Finish the request + if (finishRequestImmediately_) { + // check if we should finish with error + if (errorCode_) { + searchReply_->callSetError(errorCode_, errorString_); + } else { + searchReply_->callSetFinished(true); + } + } else { + // we only allow serialized requests in QML - previous must have been aborted + Q_ASSERT(timerId_ == 0); + timerId_ = startTimer(200); + } + return static_cast<QGeoSearchReply*>(searchReply_); + } + +public Q_SLOTS: + void requestAborted() + { + if (timerId_) { + killTimer(timerId_); + timerId_ = 0; + } + errorString_ = ""; + errorCode_ = QGeoSearchReply::NoError; + } + +public: + void setPlaces(SearchReplyTest* reply, const QString searchString, int limit ) + { + for (int i = 0; i < limit; ++i) { + QGeoPlace place; + QGeoAddress address; + address.setStreet(searchString); + place.setAddress(address); + reply->callAddPlace(place); + } + } + + void setPlaces(SearchReplyTest* reply, const QGeoAddress& address) + { + int count = address.county().toInt(); + + for (int i = 0; i < count; ++i) { + QGeoPlace place; + place.setAddress(address); + reply->callAddPlace(place); + } + } + + void setPlaces(SearchReplyTest* reply, const QGeoCoordinate & coordinate) + { + for (int i = 0; i < coordinate.longitude(); ++i) { + QGeoPlace place; + place.setCoordinate(coordinate); + reply->callAddPlace(place); + } + } + + QGeoSearchReply* reverseGeocode ( const QGeoCoordinate & coordinate, QGeoBoundingArea * bounds ) + { + searchReply_ = new SearchReplyTest(); + connect(searchReply_, SIGNAL(aborted()), this, SLOT(requestAborted())); + + setPlaces(searchReply_, coordinate); + searchReply_->callSetViewport(bounds); + + if (coordinate.latitude() > 70) { + errorString_ = "error"; + errorCode_ = (QGeoSearchReply::Error) (coordinate.latitude() - 70); + } else { + errorString_ = ""; + errorCode_ = QGeoSearchReply::NoError; + } + if (finishRequestImmediately_) { + if (errorCode_) { + searchReply_->callSetError(errorCode_, errorString_); + } else { + searchReply_->callSetError(QGeoSearchReply::NoError,coordinate.toString()); + searchReply_->callSetFinished(true); + } + } else { + // we only allow serialized requests in QML - previous must have been aborted or finished + Q_ASSERT(timerId_ == 0); + timerId_ = startTimer(200); + } + return static_cast<QGeoSearchReply*>(searchReply_); + } + +protected: + void timerEvent(QTimerEvent *event) + { + Q_ASSERT(timerId_ == event->timerId()); + Q_ASSERT(searchReply_); + killTimer(timerId_); + timerId_ = 0; + if (errorCode_) { + searchReply_->callSetError(errorCode_, errorString_); + emit error(searchReply_, errorCode_, errorString_); + } else { + searchReply_->callSetError(QGeoSearchReply::NoError, "no error"); + searchReply_->callSetFinished(true); + } + emit finished(searchReply_); + } + +private: + bool validateWellKnownValues_; + bool finishRequestImmediately_; + bool supported_; + SearchReplyTest* searchReply_; + int timerId_; + QGeoSearchReply::Error errorCode_; + QString errorString_; +}; + +#endif |