INCLUDEPATH += . \
src/tests/testmap/ \
src/map/
-SOURCES += src/map/mapfetcher.cpp \
+SOURCES += src/main.cpp \
+src/map/mapfetcher.cpp \
src/map/mapengine.cpp \
- tests/testmap/testmapfetcher.cpp \
+# tests/testmap/testmapfetcher.cpp \
# tests/testmap/testmapengine.cpp \
- src/ui/mainwindow.cpp
+ src/ui/mainwindow.cpp \
+ tests/testmap/networkaccessmanagermock.cpp \
+ tests/testmap/networkreplymock.cpp
HEADERS += src/map/mapfetcher.h \
src/map/mapengine.h \
- src/ui/mainwindow.h
+ src/ui/mainwindow.h \
+ tests/testmap/networkaccessmanagermock.h \
+ tests/testmap/networkreplymock.h
m_manager->setCache(diskCache);
- connect(m_manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(downloadFinished(QNetworkReply*)));
+ connect(m_manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(downloadFinished(QNetworkReply*))); //Change to QNetworkReply
}
void MapFetcher::fetchMapImage(const QUrl &url)
void MapFetcher::downloadFinished(QNetworkReply *reply)
{
qDebug() << __PRETTY_FUNCTION__;
-
if (reply->error() == QNetworkReply::NoError) {
QImage image;
QUrl url = reply->url();
private:
QNetworkAccessManager *m_manager;
- QList<QNetworkReply *> currentDownloads;
+ QList<QNetworkReply*> currentDownloads;
QQueue<QUrl> downloadQueue;
};
void MainWindow::debug()
{
qDebug() << __PRETTY_FUNCTION__;
- for (int j = 0; j < 10; ++j) {
- mapFetcher->fetchMapImage(QUrl(QString("http://tile.openstreetmap.org/mapnik/13/4675/213%1.png").arg(j)));
- }
+ for (int i = 0; i < 2; ++i)
+ for (int j = 0; j < 2; ++j)
+ mapFetcher->fetchMapImage(QUrl(QString("http://tile.openstreetmap.org/mapnik/13/467%1/213%2.png")
+ .arg(i).arg(j)));
}
MainWindow::~MainWindow()
--- /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>
+#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
#include <QUrl>
#include <QImage>
#include <QNetworkAccessManager>
+#include <QLabel>
#include "mapfetcher.h"
+#include "networkaccessmanagermock.h"
/**
* @brief
TestMapFetcher::TestMapFetcher()
{
QNetworkAccessManager *manager = new QNetworkAccessManager();
- mapFetcher = new MapFetcher(this, manager);
+ NetworkAccessManagerMock *managerMock = new NetworkAccessManagerMock(manager, this);
+ mapFetcher = new MapFetcher(this, managerMock);
}
void TestMapFetcher::testFetchImageEmptyURL()
// //Correct URL
// QUrl url2("http://tile.openstreetmap.org/7/63/42.png");
// mapFetcher->fetchMapImage(url2);
-// QTest::qWait(1000);
+// 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());
+// 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()