#include <QtCore>
#include <QNetworkAccessManager>
+#include "mapfetcher.h"
+
class QNetworkReply;
class QUrl;
-#include "mapfetcher.h"
-
/**
* @brief MapFetcher handles requests to get map tiles.
*
void downloadFinished(QNetworkReply *reply);
/**
- * @brief This slot is called when
+ * @brief This slot is called when next download is started.
*
* @fn startNextDownload
*/
void startNextDownload();
private:
+
QNetworkAccessManager *m_manager;
QList<QNetworkReply*> currentDownloads;
QQueue<QUrl> downloadQueue;
+++ /dev/null
-/*
- Situare - A location system for Facebook
- Copyright (C) 2010 Ixonos Plc. Authors:
-
- Jussi Laitinen - jussi.laitinen@ixonos.com
-
- Situare is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- version 2 as published by the Free Software Foundation.
-
- Situare is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with Situare; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA.
-*/
-
-#include <QNetworkAccessManager>
-#include <QDebug>
-#include <QTimer>
-#include <QImage>
-#include <QBuffer>
-#include "networkaccessmanagermock.h"
-#include "networkreplymock.h"
-
-NetworkAccessManagerMock::NetworkAccessManagerMock(QNetworkAccessManager *manager, QObject *parent)
- : QNetworkAccessManager(parent)
-{
- qDebug() << __PRETTY_FUNCTION__;
- setCache(manager->cache());
- setCookieJar(manager->cookieJar());
- //setProxy(manager->proxy());
- setProxyFactory(manager->proxyFactory());
-
- //connect(this, SIGNAL(error(QNetworkRequest*)), this, SLOT(generateError(QNetworkRequest)));
-}
-
-void NetworkAccessManagerMock::setMode(int mode)
-{
- this->mode = mode;
-}
-
-NetworkReplyMock *NetworkAccessManagerMock::get(const QNetworkRequest &request)
-{
- qDebug() << __PRETTY_FUNCTION__;
- this->request = request;
- reply = new NetworkReplyMock(this);
-
- //QTimer::singleShot(500, this, SLOT(generateError()));
-
- //QTimer::singleShot(500, this, SLOT(generateCorrectReply()));
-
- //QTimer::singleShot(0, this, SLOT(generateDelayedCorrectReply()));
-
- QTimer::singleShot(0, this, SLOT(generateCorruptedImageReply()));
-
- return reply;
-}
-
-void NetworkAccessManagerMock::generateError()
-{
- qDebug() << __PRETTY_FUNCTION__;
- reply->setUrl(request.url());
- reply->setError(QNetworkReply::HostNotFoundError, "Host not found");
- emit finished(reply);
-}
-
-void NetworkAccessManagerMock::generateCorrectReply()
-{
- qDebug() << __PRETTY_FUNCTION__;
- reply->setUrl(request.url());
- QImage image;
- if (!image.load("res/images/static/testTile.png", 0))
- image = QImage();
- else
- qDebug() << "image loaded";
-
- QByteArray array;
- QBuffer buffer(&array);
- buffer.open(QBuffer::WriteOnly);
- if (image.save(&buffer, "PNG"))
- qDebug() << "image saved";
- buffer.close();
- reply->setData(array);
- emit finished(reply);
-}
-
-void NetworkAccessManagerMock::generateDelayedCorrectReply()
-{
- qDebug() << __PRETTY_FUNCTION__;
- QTimer::singleShot(4000, this, SLOT(generateCorrectReply()));
-}
-
-void NetworkAccessManagerMock::generateCorruptedImageReply()
-{
- qDebug() << __PRETTY_FUNCTION__;
- reply->setUrl(request.url());
- QImage image;
- if (!image.load("res/images/static/testTile.png", 0))
- image = QImage();
- else
- qDebug() << "image loaded";
-
- QByteArray array;
- array.append("PNG.?ASDSADSDSADSAD");
- reply->setData(array);
- emit finished(reply);
-}
+++ /dev/null
-/*
- Situare - A location system for Facebook
- Copyright (C) 2010 Ixonos Plc. Authors:
-
- Jussi Laitinen - jussi.laitinen@ixonos.com
-
- Situare is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- version 2 as published by the Free Software Foundation.
-
- Situare is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with Situare; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA.
-*/
-
-#ifndef NETWORKACCESSMANAGERMOCK_H
-#define NETWORKACCESSMANAGERMOCK_H
-
-#include <QNetworkAccessManager>
-#include "networkreplymock.h"
-
-class NetworkAccessManagerMock : public QNetworkAccessManager
-{
- Q_OBJECT
-
-public:
- NetworkAccessManagerMock(QNetworkAccessManager *manager = 0, QObject *parent = 0);
-
- NetworkReplyMock *get(const QNetworkRequest &request);
-
- void setMode(int mode);
-
-signals:
- void finished(NetworkReplyMock *reply);
-
-private slots:
- void generateError();
- void generateCorrectReply();
- void generateDelayedCorrectReply();
- void generateCorruptedImageReply();
-
-private:
- NetworkReplyMock *reply;
- QNetworkRequest request;
- int mode;
-};
-
-#endif // NETWORKACCESSMANAGERMOCK_H
+++ /dev/null
-/*
- Situare - A location system for Facebook
- Copyright (C) 2010 Ixonos Plc. Authors:
-
- Jussi Laitinen - jussi.laitinen@ixonos.com
-
- Situare is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- version 2 as published by the Free Software Foundation.
-
- Situare is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with Situare; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA.
-*/
-
-#include <QNetworkReply>
+++ /dev/null
-/*
- Situare - A location system for Facebook
- Copyright (C) 2010 Ixonos Plc. Authors:
-
- Jussi Laitinen - jussi.laitinen@ixonos.com
-
- Situare is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- version 2 as published by the Free Software Foundation.
-
- Situare is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with Situare; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA.
-*/
-
-#include <QNetworkReply>
-#include <QDebug>
-
-#include "networkreplymock.h"
-
-NetworkReplyMock::NetworkReplyMock(QObject *parent)
- : QNetworkReply(parent)
- , m_offset(0)
-
-{
-
-}
-
-void NetworkReplyMock::setError(NetworkError errorCode, const QString &errorString)
-{
- qDebug() << __PRETTY_FUNCTION__;
- QNetworkReply::setError(errorCode, errorString);
-}
-
-
-qint64 NetworkReplyMock::readData(char *data, qint64 maxLen)
-{
- qDebug() << __PRETTY_FUNCTION__;
- if (m_offset < m_content.size()) {
- qint64 number = qMin(maxLen, m_content.size() - m_offset);
- memcpy(data, m_content.constData() + m_offset, number);
- m_offset += number;
- return number;
- }
- else {
- return -1;
- }
-}
-
-QByteArray NetworkReplyMock::readAll()
-{
- return m_content;
-}
-
-void NetworkReplyMock::setUrl(const QUrl &url)
-{
- qDebug() << __PRETTY_FUNCTION__;
- QNetworkReply::setUrl(url);
-}
-
-void NetworkReplyMock::abort()
-{
- qDebug() << __PRETTY_FUNCTION__;
-}
-
-void NetworkReplyMock::test()
-{
- qDebug() << __PRETTY_FUNCTION__;
-}
-
-void NetworkReplyMock::setData(const QByteArray &content)
-{
- qDebug() << __PRETTY_FUNCTION__;
- setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/png"));
- setHeader(QNetworkRequest::ContentLengthHeader, QVariant(this->m_content.size()));
- m_content.append(content);
- qDebug() << "Content size: " << m_content.size();
-}
+++ /dev/null
-/*
- Situare - A location system for Facebook
- Copyright (C) 2010 Ixonos Plc. Authors:
-
- Jussi Laitinen - jussi.laitinen@ixonos.com
-
- Situare is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- version 2 as published by the Free Software Foundation.
-
- Situare is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with Situare; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA.
-*/
-
-#ifndef NETWORKREPLYMOCK_H
-#define NETWORKREPLYMOCK_H
-
-#include <QNetworkReply>
-#include <QDebug>
-
-class NetworkReplyMock : public QNetworkReply
-{
- Q_OBJECT
-
-public:
- NetworkReplyMock(QObject *parent = 0);
- void abort();
- qint64 bytesAvailable() const
- {
- return m_content.size() - m_offset;
- }
- bool isSequential() const
- {
- return true;
- }
- void setError(NetworkError errorCode, const QString &errorString);
- void setData(const QByteArray &content);
- void setUrl(const QUrl &url);
- void test();
- QByteArray readAll();
-
-protected:
- qint64 readData(char *data, qint64 maxlen);
-
-private:
- QByteArray m_content;
- qint64 m_offset;
-};
-
-#endif // NETWORKREPLYMOCK_H
+++ /dev/null
-#include <QtGui>
-
-
+++ /dev/null
-#include <QtTest/QtTest>
-#include <QPointF>
-#include <QDebug>
-
-#include "mapengine.h"
-
-/**
-* @brief Test class for MapEngine.
-*
-* @class TestMapEngine testmapengine.cpp "tests/testmapengine.cpp"
-*/
-class TestMapEngine : public QObject
-{
- Q_OBJECT
-public:
- TestMapEngine();
-
-private slots:
- void coordinatesToTiles();
- void longitudeFromTiles();
- void latitudeFromTiles();
-
-private:
- MapEngine *mapEngine;
-};
-
-TestMapEngine::TestMapEngine()
-{
- mapEngine = new MapEngine();
-}
-
-
-void TestMapEngine::coordinatesToTiles()
-{
- QPoint point1 = mapEngine->latLonToTile(47.629, 7.262, 1);
- QCOMPARE(point1, QPoint(1, 0));
- QPoint point2 = mapEngine->latLonToTile(65.013379, 25.472059, 13);
- QCOMPARE(point2, QPoint(4675, 2131));
- QPoint point3 = mapEngine->latLonToTile(65.013379, 25.472059, 10);
- QCOMPARE(point3, QPoint(584, 266));
-}
-
-void TestMapEngine::longitudeFromTiles()
-{
- int longitude = (int)mapEngine->tileXToLongitude(4675, 13);
- QCOMPARE(longitude, 25);
-}
-
-void TestMapEngine::latitudeFromTiles()
-{
-
-}
-
-QTEST_MAIN(TestMapEngine)
-#include "testmapengine.moc"
+++ /dev/null
-/*
- Situare - A location system for Facebook
- Copyright (C) 2010 Ixonos Plc. Authors:
-
- Jussi Laitinen - jussi.laitinen@ixonos.com
-
- Situare is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- version 2 as published by the Free Software Foundation.
-
- Situare is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with Situare; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA.
-*/
-
-#include <QtTest/QtTest>
-#include <QUrl>
-#include <QImage>
-#include <QNetworkAccessManager>
-#include <QLabel>
-
-#include "mapfetcher.h"
-#include "networkaccessmanagermock.h"
-
-/**
-* @brief
-*
-* @class TestMapFetcher testmapfetcher.cpp "tests/testMap/testmapfetcher.cpp"
-*/
-class TestMapFetcher : public QObject
-{
- Q_OBJECT
-public:
- /**
- * @brief TestMapFetcher is a test class for MapFetcher class.
- *
- * @fn TestMapFetcher
- */
- TestMapFetcher();
-
-
-private slots:
- /**
- * @brief Tests fetchImage method with empty URL as parameter.
- *
- * @fn testFetchImageEmptyURL
- */
- void testFetchImageEmptyURL();
- /**
- * @brief Tests fetchImage method with incorrect URL as parameter.
- *
- * @fn testFetchImageIncorrectURL
- */
- void testFetchImageIncorrectURL();
- /**
- * @brief Tests fetchImage method with correct URL as parameter.
- *
- * @fn testFetchImageCorrectURL
- */
- void testFetchImageCorrectURL();
-
- void testFetchCorruptedImage();
-
- /**
- * @brief Tests fetchImage method 20 times with correct URLs
- * as parameters.
- *
- * @fn testFetchImage20URLs
- */
- void testFetchImage20URLs();
- /**
- * @brief Tests fetchImage method 50 times with correct URLs
- * as parameters.
- *
- * @fn testFetchImage50URLs
- */
- void testFetchImage50URLs();
-
-private:
- MapFetcher *mapFetcher;
-};
-
-TestMapFetcher::TestMapFetcher()
-{
- QNetworkAccessManager *manager = new QNetworkAccessManager();
- NetworkAccessManagerMock *managerMock = new NetworkAccessManagerMock(manager, this);
- mapFetcher = new MapFetcher(this, managerMock);
-}
-
-void TestMapFetcher::testFetchImageEmptyURL()
-{
- QUrl url("");
- mapFetcher->fetchMapImage(url);
-}
-
-void TestMapFetcher::testFetchImageIncorrectURL()
-{
-// QSignalSpy imageReceivedErrorSpy(mapFetcher, SIGNAL(error(QString)));
-//
-// QVERIFY(imageReceivedErrorSpy.isValid());
-//
-// //Incorrect URL
-// QUrl url1("http://tile.openstreetmap.org/7/63/22.gi");
-// qDebug() << QTime::currentTime().toString();
-// mapFetcher->fetchMapImage(url1);
-// QTest::qWait(5000);
-// QCOMPARE(imageReceivedErrorSpy.count(), 1);
-}
-
-void TestMapFetcher::testFetchImageCorrectURL()
-{
- QSignalSpy imageReceivedSpy(mapFetcher, SIGNAL(mapImageReceived(QUrl,QPixmap)));
-
- QVERIFY(imageReceivedSpy.isValid());
-
- //Correct URL
- QUrl url2("http://tile.openstreetmap.org/7/63/42.png");
- mapFetcher->fetchMapImage(url2);
- QTest::qWait(2000);
- QCOMPARE(imageReceivedSpy.count(), 1);
- QList<QVariant> signalArgs2 = imageReceivedSpy.takeLast();
- QCOMPARE(url2, signalArgs2.at(0).toUrl());
-}
-
-void TestMapFetcher::testFetchCorruptedImage()
-{
-// QSignalSpy imageReceivedSpy(mapFetcher, SIGNAL(mapImageReceived(QUrl,QPixmap)));
-//
-// QVERIFY(imageReceivedSpy.isValid());
-//
-// //Correct URL
-// QUrl url2("http://tile.openstreetmap.org/7/63/1.png");
-// mapFetcher->fetchMapImage(url2);
-// QTest::qWait(1000);
-// QCOMPARE(imageReceivedSpy.count(), 1);
-// QList<QVariant> signalArgs2 = imageReceivedSpy.takeLast();
-// QCOMPARE(url2, signalArgs2.at(0).toUrl());
-}
-
-void TestMapFetcher::testFetchImage20URLs()
-{
-// QSignalSpy imageReceivedSpy(mapFetcher, SIGNAL(mapImageReceived(QUrl,QPixmap)));
-// QSignalSpy imageReceivedErrorSpy(mapFetcher, SIGNAL(error(QString)));
-//
-// QVERIFY(imageReceivedSpy.isValid());
-//
-// //20 requests
-// for (int i = 1; i < 3; ++i) {
-// for (int j = 0; j < 10; ++j) {
-// QUrl url(QString("http://tile.openstreetmap.org/18/23/%1%2.png").arg(i).arg(j));
-// mapFetcher->fetchMapImage(url);
-// }
-// }
-// QTest::qWait(2000);
-// int totalCount = imageReceivedSpy.count() + imageReceivedErrorSpy.count();
-// QCOMPARE(totalCount, 20);
-}
-
-void TestMapFetcher::testFetchImage50URLs()
-{
-// QSignalSpy imageReceivedSpy(mapFetcher, SIGNAL(mapImageReceived(QUrl,QPixmap)));
-// QSignalSpy imageReceivedErrorSpy(mapFetcher, SIGNAL(error(QString)));
-//
-// QVERIFY(imageReceivedSpy.isValid());
-//
-// //50 requests
-// for (int i = 1; i < 6; ++i) {
-// for (int j = 0; j < 10; ++j) {
-// QUrl url(QString("http://tile.openstreetmap.org/18/24/%1%2.png").arg(i).arg(j));
-// mapFetcher->fetchMapImage(url);
-// }
-// }
-//
-// QTest::qWait(5000);
-// int totalCount = imageReceivedSpy.count() + imageReceivedErrorSpy.count();
-// QCOMPARE(totalCount, 50);
-}
-
-QTEST_MAIN(TestMapFetcher)
-#include "testmapfetcher.moc"
--- /dev/null
+/*
+ Situare - A location system for Facebook
+ Copyright (C) 2010 Ixonos Plc. Authors:
+
+ Jussi Laitinen - jussi.laitinen@ixonos.com
+
+ Situare is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Situare is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Situare; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA.
+*/
+
+#include <QNetworkAccessManager>
+#include <QDebug>
+#include <QTimer>
+#include <QImage>
+#include <QBuffer>
+#include "networkaccessmanagermock.h"
+#include "networkreplymock.h"
+
+
+
+NetworkAccessManagerMock::NetworkAccessManagerMock(QNetworkAccessManager *manager, QObject *parent)
+ : QNetworkAccessManager(parent)
+ , mode(0)
+{
+ qDebug() << __PRETTY_FUNCTION__;
+ setCache(manager->cache());
+ setCookieJar(manager->cookieJar());
+ //setProxy(manager->proxy());
+ setProxyFactory(manager->proxyFactory());
+
+ //connect(this, SIGNAL(error(QNetworkRequest*)), this, SLOT(generateError(QNetworkRequest)));
+}
+
+void NetworkAccessManagerMock::setMode(int mode)
+{
+ this->mode = mode;
+}
+
+void NetworkAccessManagerMock::debug()
+{
+ qDebug() << __PRETTY_FUNCTION__;
+}
+
+NetworkReplyMock *NetworkAccessManagerMock::get(const QNetworkRequest &request)
+{
+ qDebug() << __PRETTY_FUNCTION__;
+ this->request = request;
+ reply = new NetworkReplyMock(this);
+
+ switch (this->mode) {
+
+ case NetworkAccessManagerMock::CORRECT:
+ QTimer::singleShot(0, this, SLOT(generateCorrectReply()));
+ break;
+ case NetworkAccessManagerMock::INCORRECT:
+ QTimer::singleShot(0, this, SLOT(generateError()));
+ break;
+ case NetworkAccessManagerMock::DELAYED_CORRECT:
+ QTimer::singleShot(0, this, SLOT(generateDelayedCorrectReply()));
+ break;
+ case NetworkAccessManagerMock::CORRUPTED_IMAGE:
+ QTimer::singleShot(0, this, SLOT(generateCorruptedImageReply()));
+ break;
+ default:
+ QTimer::singleShot(0, this, SLOT(generateCorrectReply()));
+ break;
+ }
+
+ return reply;
+}
+
+void NetworkAccessManagerMock::generateError()
+{
+ qDebug() << __PRETTY_FUNCTION__;
+ reply->setUrl(request.url());
+ reply->setError(QNetworkReply::HostNotFoundError, "Host not found");
+ emit finished(reply);
+}
+
+void NetworkAccessManagerMock::generateCorrectReply()
+{
+ qDebug() << __PRETTY_FUNCTION__;
+ reply->setUrl(request.url());
+ QImage image;
+ if (!image.load("res/images/static/testTile.png", 0))
+ image = QImage();
+ else
+ qDebug() << "image loaded";
+
+ QByteArray array;
+ QBuffer buffer(&array);
+ buffer.open(QBuffer::WriteOnly);
+ if (image.save(&buffer, "PNG"))
+ qDebug() << "image saved";
+ buffer.close();
+ reply->setData(array);
+ emit finished(reply);
+}
+
+void NetworkAccessManagerMock::generateDelayedCorrectReply()
+{
+ qDebug() << __PRETTY_FUNCTION__;
+ QTimer::singleShot(4000, this, SLOT(generateCorrectReply()));
+}
+
+void NetworkAccessManagerMock::generateCorruptedImageReply()
+{
+ qDebug() << __PRETTY_FUNCTION__;
+ reply->setUrl(request.url());
+ QImage image;
+ if (!image.load("res/images/static/testTile.png", 0))
+ image = QImage();
+ else
+ qDebug() << "image loaded";
+
+ QByteArray array;
+ array.append("PNG.?ASDSADSDSADSAD");
+ reply->setData(array);
+ emit finished(reply);
+}
--- /dev/null
+/*
+ Situare - A location system for Facebook
+ Copyright (C) 2010 Ixonos Plc. Authors:
+
+ Jussi Laitinen - jussi.laitinen@ixonos.com
+
+ Situare is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Situare is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Situare; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA.
+*/
+
+#ifndef NETWORKACCESSMANAGERMOCK_H
+#define NETWORKACCESSMANAGERMOCK_H
+
+#include <QNetworkAccessManager>
+#include "networkreplymock.h"
+
+class NetworkAccessManagerMock : public QNetworkAccessManager
+{
+ Q_OBJECT
+
+public:
+ NetworkAccessManagerMock(QNetworkAccessManager *manager = 0, QObject *parent = 0);
+
+ NetworkReplyMock *get(const QNetworkRequest &request);
+
+ void setMode(int mode);
+
+ void debug();
+
+ enum {CORRECT, INCORRECT, DELAYED_CORRECT, CORRUPTED_IMAGE};
+
+signals:
+ void finished(NetworkReplyMock *reply);
+
+private slots:
+ void generateError();
+ void generateCorrectReply();
+ void generateDelayedCorrectReply();
+ void generateCorruptedImageReply();
+
+private:
+ NetworkReplyMock *reply;
+ QNetworkRequest request;
+ int mode;
+};
+
+#endif // NETWORKACCESSMANAGERMOCK_H
--- /dev/null
+/*
+ Situare - A location system for Facebook
+ Copyright (C) 2010 Ixonos Plc. Authors:
+
+ Jussi Laitinen - jussi.laitinen@ixonos.com
+
+ Situare is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Situare is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Situare; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA.
+*/
+
+#include <QNetworkReply>
+#include <QDebug>
+
+#include "networkreplymock.h"
+
+NetworkReplyMock::NetworkReplyMock(QObject *parent)
+ : QNetworkReply(parent)
+ , m_offset(0)
+
+{
+
+}
+
+void NetworkReplyMock::setError(NetworkError errorCode, const QString &errorString)
+{
+ qDebug() << __PRETTY_FUNCTION__;
+ QNetworkReply::setError(errorCode, errorString);
+}
+
+
+qint64 NetworkReplyMock::readData(char *data, qint64 maxLen)
+{
+ qDebug() << __PRETTY_FUNCTION__;
+ if (m_offset < m_content.size()) {
+ qint64 number = qMin(maxLen, m_content.size() - m_offset);
+ memcpy(data, m_content.constData() + m_offset, number);
+ m_offset += number;
+ return number;
+ }
+ else {
+ return -1;
+ }
+}
+
+QByteArray NetworkReplyMock::readAll()
+{
+ return m_content;
+}
+
+void NetworkReplyMock::setUrl(const QUrl &url)
+{
+ qDebug() << __PRETTY_FUNCTION__;
+ QNetworkReply::setUrl(url);
+}
+
+void NetworkReplyMock::abort()
+{
+ qDebug() << __PRETTY_FUNCTION__;
+}
+
+void NetworkReplyMock::test()
+{
+ qDebug() << __PRETTY_FUNCTION__;
+}
+
+void NetworkReplyMock::setData(const QByteArray &content)
+{
+ qDebug() << __PRETTY_FUNCTION__;
+ setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/png"));
+ setHeader(QNetworkRequest::ContentLengthHeader, QVariant(this->m_content.size()));
+ m_content.append(content);
+ qDebug() << "Content size: " << m_content.size();
+}
--- /dev/null
+/*
+ Situare - A location system for Facebook
+ Copyright (C) 2010 Ixonos Plc. Authors:
+
+ Jussi Laitinen - jussi.laitinen@ixonos.com
+
+ Situare is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Situare is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Situare; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA.
+*/
+
+#ifndef NETWORKREPLYMOCK_H
+#define NETWORKREPLYMOCK_H
+
+#include <QNetworkReply>
+#include <QDebug>
+
+class NetworkReplyMock : public QNetworkReply
+{
+ Q_OBJECT
+
+public:
+ NetworkReplyMock(QObject *parent = 0);
+ void abort();
+ qint64 bytesAvailable() const
+ {
+ return m_content.size() - m_offset;
+ }
+ bool isSequential() const
+ {
+ return true;
+ }
+ void setError(NetworkError errorCode, const QString &errorString);
+ void setData(const QByteArray &content);
+ void setUrl(const QUrl &url);
+ void test();
+ QByteArray readAll();
+
+protected:
+ qint64 readData(char *data, qint64 maxlen);
+
+private:
+ QByteArray m_content;
+ qint64 m_offset;
+};
+
+#endif // NETWORKREPLYMOCK_H
--- /dev/null
+/*
+ Situare - A location system for Facebook
+ Copyright (C) 2010 Ixonos Plc. Authors:
+
+ Jussi Laitinen - jussi.laitinen@ixonos.com
+
+ Situare is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Situare is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Situare; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA.
+*/
+
+#include <QtTest/QtTest>
+#include <QUrl>
+#include <QImage>
+#include <QNetworkAccessManager>
+#include <QLabel>
+
+#include "../../../src/map/mapfetcher.h"
+#include "networkaccessmanagermock.h"
+#include "networkreplymock.h"
+
+/**
+* @brief
+*
+* @class TestMapFetcher testmapfetcher.cpp "tests/testMap/testmapfetcher.cpp"
+*/
+class TestMapFetcher : public QObject
+{
+ Q_OBJECT
+public:
+ /**
+ * @brief TestMapFetcher is a test class for MapFetcher class.
+ *
+ * @fn TestMapFetcher
+ */
+ TestMapFetcher();
+
+
+private slots:
+ /**
+ * @brief Tests fetchImage method with empty URL as parameter.
+ *
+ * @fn testFetchImageEmptyURL
+ */
+ void testFetchImageEmptyURL();
+ /**
+ * @brief Tests fetchImage method with incorrect URL as parameter.
+ *
+ * @fn testFetchImageIncorrectURL
+ */
+ void testFetchImageIncorrectURL();
+ /**
+ * @brief Tests fetchImage method with correct URL as parameter.
+ *
+ * @fn testFetchImageCorrectURL
+ */
+ void testFetchImageCorrectURL();
+
+ void testFetchCorruptedImage();
+
+ /**
+ * @brief Tests fetchImage method 20 times with correct URLs
+ * as parameters.
+ *
+ * @fn testFetchImage20URLs
+ */
+ void testFetchImage20URLs();
+ /**
+ * @brief Tests fetchImage method 50 times with correct URLs
+ * as parameters.
+ *
+ * @fn testFetchImage50URLs
+ */
+ void testFetchImage50URLs();
+
+private:
+ MapFetcher *mapFetcher;
+ NetworkAccessManagerMock *managerMock;
+};
+
+TestMapFetcher::TestMapFetcher()
+{
+ QNetworkAccessManager *manager = new QNetworkAccessManager();
+ managerMock = new NetworkAccessManagerMock(manager, this);
+ mapFetcher = new MapFetcher(this, managerMock);
+}
+
+void TestMapFetcher::testFetchImageEmptyURL()
+{
+ QUrl url("");
+ mapFetcher->fetchMapImage(url);
+}
+
+void TestMapFetcher::testFetchImageIncorrectURL()
+{
+ managerMock->setMode(NetworkAccessManagerMock::INCORRECT);
+
+ QSignalSpy imageReceivedErrorSpy(mapFetcher, SIGNAL(error(QString)));
+
+ QVERIFY(imageReceivedErrorSpy.isValid());
+
+ //Incorrect URL
+ QUrl url1("http://tile.openstreetmap.org/7/63/22.gi");
+ mapFetcher->fetchMapImage(url1);
+ QTest::qWait(1000);
+ QCOMPARE(imageReceivedErrorSpy.count(), 1);
+}
+
+void TestMapFetcher::testFetchImageCorrectURL()
+{
+ managerMock->setMode(NetworkAccessManagerMock::CORRECT);
+
+ QSignalSpy imageReceivedSpy(mapFetcher, SIGNAL(mapImageReceived(QUrl,QPixmap)));
+
+ QVERIFY(imageReceivedSpy.isValid());
+
+ //Correct URL
+ QUrl url2("http://tile.openstreetmap.org/7/63/42.png");
+ mapFetcher->fetchMapImage(url2);
+ QTest::qWait(2000);
+ QCOMPARE(imageReceivedSpy.count(), 1);
+ QList<QVariant> signalArgs2 = imageReceivedSpy.takeLast();
+ QCOMPARE(url2, signalArgs2.at(0).toUrl());
+}
+
+void TestMapFetcher::testFetchCorruptedImage()
+{
+ QSignalSpy imageReceivedSpy(mapFetcher, SIGNAL(mapImageReceived(QUrl,QPixmap)));
+
+ QVERIFY(imageReceivedSpy.isValid());
+
+ //Correct URL
+ QUrl url2("http://tile.openstreetmap.org/7/63/1.png");
+ mapFetcher->fetchMapImage(url2);
+ QTest::qWait(1000);
+ QCOMPARE(imageReceivedSpy.count(), 1);
+ QList<QVariant> signalArgs2 = imageReceivedSpy.takeLast();
+ QCOMPARE(url2, signalArgs2.at(0).toUrl());
+}
+
+void TestMapFetcher::testFetchImage20URLs()
+{
+ managerMock->setMode(NetworkAccessManagerMock::CORRECT);
+
+ QSignalSpy imageReceivedSpy(mapFetcher, SIGNAL(mapImageReceived(QUrl,QPixmap)));
+ QSignalSpy imageReceivedErrorSpy(mapFetcher, SIGNAL(error(QString)));
+
+ QVERIFY(imageReceivedSpy.isValid());
+
+ //20 requests
+ for (int i = 1; i < 3; ++i) {
+ for (int j = 0; j < 10; ++j) {
+ QUrl url(QString("http://tile.openstreetmap.org/18/23/%1%2.png").arg(i).arg(j));
+ mapFetcher->fetchMapImage(url);
+ }
+ }
+ QTest::qWait(2000);
+ int totalCount = imageReceivedSpy.count() + imageReceivedErrorSpy.count();
+ QCOMPARE(totalCount, 20);
+}
+
+void TestMapFetcher::testFetchImage50URLs()
+{
+ managerMock->setMode(NetworkAccessManagerMock::CORRECT);
+
+ QSignalSpy imageReceivedSpy(mapFetcher, SIGNAL(mapImageReceived(QUrl,QPixmap)));
+ QSignalSpy imageReceivedErrorSpy(mapFetcher, SIGNAL(error(QString)));
+
+ QVERIFY(imageReceivedSpy.isValid());
+
+ //50 requests
+ for (int i = 1; i < 6; ++i) {
+ for (int j = 0; j < 10; ++j) {
+ QUrl url(QString("http://tile.openstreetmap.org/18/24/%1%2.png").arg(i).arg(j));
+ mapFetcher->fetchMapImage(url);
+ }
+ }
+
+ QTest::qWait(5000);
+ int totalCount = imageReceivedSpy.count() + imageReceivedErrorSpy.count();
+ QCOMPARE(totalCount, 50);
+}
+
+QTEST_MAIN(TestMapFetcher)
+#include "testmapfetcher.moc"
--- /dev/null
+QT += network testlib
+
+HEADERS += networkreplymock.h \
+ networkaccessmanagermock.h \
+ ../../../src/map/mapfetcher.h
+SOURCES += testmapfetcher.cpp \
+ networkreplymock.cpp \
+ networkreplydummy.cpp \
+ networkaccessmanagermock.cpp \
+ ../../../src/map/mapfetcher.cpp
+++ /dev/null
-######################################################################
-# Automatically generated by qmake (2.01a) Fri Mar 26 11:22:18 2010
-######################################################################
-
-CONFIG += qtestlib
-TEMPLATE = app
-TARGET =
-DEPENDPATH += .
-INCLUDEPATH += .
-
-# Input
-HEADERS += ../../src/ui/mainwindow.h testui.moc
-SOURCES += testui.cpp ../../src/ui/mainwindow.cpp
+++ /dev/null
-/*
- Situare - A location system for Facebook
- Copyright (C) 2010 Ixonos Plc. Authors:
-
- Henri Lampela - henri.lampela@ixonos.com
-
- Situare is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- version 2 as published by the Free Software Foundation.
-
- Situare is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with Situare; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA.
- */
-
-#include <QtGui>
-#include <QtTest/QtTest>
-#include "../../src/ui/mainwindow.h"
-
-class TestUi: public QObject
-{
- Q_OBJECT
-
-private slots:
- void testUi();
-
-
-};
-
-void TestUi::testUi()
-{
- QLineEdit lineEdit;
-
- QTest::keyClicks(&lineEdit, "UI test");
-
- QCOMPARE(lineEdit.text(), QString("UI test"));
-}
-
-
-QTEST_MAIN(TestUi)
-#include "testui.moc"