*/
#include <QGraphicsScene>
+#include <QGraphicsView>
#include <QtTest/QtTest>
#include "common.h"
+#include "coordinates/scenecoordinate.h"
#include "map/mapcommon.h"
+#include "map/maptile.h"
+
#include "map/mapengine.h"
-const int DEFAULT_TEST_ZOOMLEVEL = 5;
-const QPoint DEFAULT_TEST_SCENECOORDINATE = QPoint(12345,54321);
-const QPoint NEW_TEST_SCENECOORDINATE = QPoint(50000,40000);
+const int ZOOM_LEVEL = 14;
+const SceneCoordinate DEFAULT_TEST_SCENECOORDINATE = SceneCoordinate(12345, 54321);
+const SceneCoordinate NEW_TEST_SCENECOORDINATE = SceneCoordinate(50000, 40000);
+const int MAP_FETCH_DELAY = 1000;
class TestMapEngine: public QObject
{
private slots:
void convertTileNumberToSceneCoordinate();
- void convertLatLonToSceneCoordinate_data();
- void convertLatLonToSceneCoordinate();
+ void convertTileNumberToSceneCoordinate_data();
void setLocationNewTilesCount();
void setLocationRemovedTilesCount();
- void zoomOutRemovedTilesCount();
- void zoomInRemovedTilesCount();
void usingLastLocation();
+ void zoomInRemovedTilesCount();
+ void zoomOutRemovedTilesCount();
signals:
- void setCenterPosition(QPoint); // a way to call a private slot
+ void setCenterPosition(SceneCoordinate); // a way to call a private slot
};
/**
*/
void TestMapEngine::convertTileNumberToSceneCoordinate()
{
- QCOMPARE(MapEngine::convertTileNumberToSceneCoordinate(18, QPoint(0,0)), QPoint(0,0));
- QCOMPARE(MapEngine::convertTileNumberToSceneCoordinate(18, QPoint(1,2)), QPoint(256,512));
- QCOMPARE(MapEngine::convertTileNumberToSceneCoordinate(16, QPoint(3,4)), QPoint(3072,4096));
-}
+ QFETCH(int, zoomLevel);
+ QFETCH(QPoint, tileNumber);
+ QFETCH(SceneCoordinate, expected);
-/**
- * @brief Test data for converting latitude and longitude coordinates to scene coordinates
- */
-void TestMapEngine::convertLatLonToSceneCoordinate_data()
-{
- QTest::addColumn<QPointF>("coordinate");
- QTest::addColumn<QPoint>("result");
-
- QTest::newRow("top left") << QPointF(MIN_LONGITUDE, MAX_LATITUDE) << QPoint(0, 0);
-
- int x = (1 << MAX_MAP_ZOOM_LEVEL) * TILE_SIZE_X;
- int y = (1 << MAX_MAP_ZOOM_LEVEL) * TILE_SIZE_Y;
- QTest::newRow("bottom right") << QPointF(MAX_LONGITUDE, MIN_LATITUDE) << QPoint(x, y);
+ SceneCoordinate result = MapTile::convertTileNumberToSceneCoordinate(zoomLevel, tileNumber);
+ QCOMPARE(result.x(), expected.x());
+ QCOMPARE(result.y(), expected.y());
}
-/**
-* @brief Test converting real world cordinates to scene coordinates
-* @todo Implement
-*/
-void TestMapEngine::convertLatLonToSceneCoordinate()
+void TestMapEngine::convertTileNumberToSceneCoordinate_data()
{
- QFETCH(QPointF, coordinate);
- QFETCH(QPoint, result);
+ QTest::addColumn<int>("zoomLevel");
+ QTest::addColumn<QPoint>("tileNumber");
+ QTest::addColumn<SceneCoordinate>("expected");
- QCOMPARE(MapEngine::convertLatLonToSceneCoordinate(coordinate), result);
+ QTest::newRow("data1") << 18 << QPoint(0, 0) << SceneCoordinate(0, 0);
+ QTest::newRow("data2") << 18 << QPoint(1, 2) << SceneCoordinate(256, 512);
+ QTest::newRow("data3") << 16 << QPoint(3, 4) << SceneCoordinate(3072, 4096);
}
void TestMapEngine::setLocationNewTilesCount()
{
MapEngine engine;
+ QGraphicsView view;
+ view.setScene(engine.scene());
engine.viewResized(QSize(800, 480));
- connect(this, SIGNAL(setCenterPosition(QPoint)), &engine, SLOT(setCenterPosition(QPoint)));
+ connect(this, SIGNAL(setCenterPosition(SceneCoordinate)),
+ &engine, SLOT(setCenterPosition(SceneCoordinate)));
+
+ // set initial state for map engine
+ engine.setZoomLevel(ZOOM_LEVEL);
+ emit setCenterPosition(SceneCoordinate(0, 0));
+ QTest::qWait(MAP_FETCH_DELAY);
QSignalSpy fetchImageSpy(&engine, SIGNAL(fetchImage(int,int,int)));
- QTest::qWait(1000);
- fetchImageSpy.clear();
- // first test, scene is empty so all tiles should be downloaded
- emit setCenterPosition(QPoint(1220*16, 1220*16));
- QTest::qWait(1000);
+ // first test, target location in the scene is empty so all tiles should be downloaded
+ emit setCenterPosition(SceneCoordinate(1220*16, 1220*16));
+ QTest::qWait(MAP_FETCH_DELAY);
QCOMPARE(fetchImageSpy.count(), 5*4);
fetchImageSpy.clear();
// move one tile to east and south, only most right one column and most bottom one row tiles
// should be downloaded
- emit setCenterPosition(QPoint((1220+TILE_SIZE_X)*16, (1220+TILE_SIZE_Y)*16));
- QTest::qWait(1000);
+ emit setCenterPosition(SceneCoordinate((1220+OSM_TILE_SIZE_X)*16, (1220+OSM_TILE_SIZE_Y)*16));
+ QTest::qWait(MAP_FETCH_DELAY);
QCOMPARE(fetchImageSpy.count(), 4 + 4);
fetchImageSpy.clear();
}
void TestMapEngine::setLocationRemovedTilesCount()
{
MapEngine engine;
+ QGraphicsView view;
+ view.setScene(engine.scene());
engine.viewResized(QSize(800, 480));
- connect(this, SIGNAL(setCenterPosition(QPoint)), &engine, SLOT(setCenterPosition(QPoint)));
+ connect(this, SIGNAL(setCenterPosition(SceneCoordinate)),
+ &engine, SLOT(setCenterPosition(SceneCoordinate)));
+
+ engine.setZoomLevel(OSM_MAX_ZOOM_LEVEL);
const int maxItemsCount = 40;
- emit setCenterPosition(QPoint(1220*16, 1220*16));
- QTest::qWait(1000);
- emit setCenterPosition(QPoint(2220*16, 2220*16));
- QTest::qWait(1000);
+ emit setCenterPosition(SceneCoordinate(1220*16, 1220*16));
+ QTest::qWait(MAP_FETCH_DELAY);
+ emit setCenterPosition(SceneCoordinate(2220*16, 2220*16));
+ QTest::qWait(MAP_FETCH_DELAY);
QVERIFY(engine.scene()->items().count() <= maxItemsCount);
- emit setCenterPosition(QPoint(520*16, 2220*16));
- QTest::qWait(1000);
- emit setCenterPosition(QPoint(2220*16, 520*16));
- QTest::qWait(1000);
-
+ emit setCenterPosition(SceneCoordinate(520*16, 2220*16));
+ QTest::qWait(MAP_FETCH_DELAY);
+ emit setCenterPosition(SceneCoordinate(2220*16, 520*16));
+ QTest::qWait(MAP_FETCH_DELAY);
QVERIFY(engine.scene()->items().count() <= maxItemsCount);
}
void TestMapEngine::zoomInRemovedTilesCount()
{
MapEngine engine;
+ QGraphicsView view;
+ view.setScene(engine.scene());
engine.viewResized(QSize(800, 480));
- connect(this, SIGNAL(setCenterPosition(QPoint)), &engine, SLOT(setCenterPosition(QPoint)));
+ connect(this, SIGNAL(setCenterPosition(SceneCoordinate)),
+ &engine, SLOT(setCenterPosition(SceneCoordinate)));
+
+ engine.setZoomLevel(OSM_MAX_ZOOM_LEVEL);
const int maxItemsCount = 40;
- emit setCenterPosition(QPoint(1220*16, 1220*16));
- QTest::qWait(1000);
- QTest::qWait(1000);
+ emit setCenterPosition(SceneCoordinate(1220*16, 1220*16));
+ QTest::qWait(MAP_FETCH_DELAY);
+ QTest::qWait(MAP_FETCH_DELAY);
QVERIFY(engine.scene()->items().count() <= maxItemsCount);
- emit setCenterPosition(QPoint(520*16, 2220*16));
- QTest::qWait(1000);
- emit setCenterPosition(QPoint(2220*16, 520*16));
- QTest::qWait(1000);
-
+ emit setCenterPosition(SceneCoordinate(520*16, 2220*16));
+ QTest::qWait(MAP_FETCH_DELAY);
+ emit setCenterPosition(SceneCoordinate(2220*16, 520*16));
+ QTest::qWait(MAP_FETCH_DELAY);
QVERIFY(engine.scene()->items().count() <= maxItemsCount);
}
void TestMapEngine::zoomOutRemovedTilesCount()
{
MapEngine engine;
+ QGraphicsView view;
+ view.setScene(engine.scene());
engine.viewResized(QSize(800, 480));
- connect(this, SIGNAL(setCenterPosition(QPoint)), &engine, SLOT(setCenterPosition(QPoint)));
+ connect(this, SIGNAL(setCenterPosition(SceneCoordinate)),
+ &engine, SLOT(setCenterPosition(SceneCoordinate)));
+
+ engine.setZoomLevel(OSM_MAX_ZOOM_LEVEL);
const int maxItemsCount = 40;
- emit setCenterPosition(QPoint(1220*16, 1220.23*16));
- QTest::qWait(1000);
- emit setCenterPosition(QPoint(2220*16, 2220.23*16));
- QTest::qWait(1000);
+ emit setCenterPosition(SceneCoordinate(1220*16, 1220.23*16));
+ QTest::qWait(MAP_FETCH_DELAY);
+ emit setCenterPosition(SceneCoordinate(2220*16, 2220.23*16));
+ QTest::qWait(MAP_FETCH_DELAY);
QVERIFY(engine.scene()->items().count() <= maxItemsCount);
- emit setCenterPosition(QPoint(520*16, 2220*16));
- QTest::qWait(1000);
- emit setCenterPosition(QPoint(2220*16, 520*16));
- QTest::qWait(1000);
-
+ emit setCenterPosition(SceneCoordinate(520*16, 2220*16));
+ QTest::qWait(MAP_FETCH_DELAY);
+ emit setCenterPosition(SceneCoordinate(2220*16, 520*16));
+ QTest::qWait(MAP_FETCH_DELAY);
QVERIFY(engine.scene()->items().count() <= maxItemsCount);
}
{
// Create mapengine and start monitoring zoomLevelChanged-signal
MapEngine *mapengine = new MapEngine;
+ QGraphicsView view;
+ view.setScene(mapengine->scene());
QSignalSpy mapEngineSpy(mapengine, SIGNAL(zoomLevelChanged(int)));
- connect(this, SIGNAL(setCenterPosition(QPoint)), mapengine, SLOT(setCenterPosition(QPoint)));
+ connect(this, SIGNAL(setCenterPosition(SceneCoordinate)),
+ mapengine, SLOT(setCenterPosition(SceneCoordinate)));
QVERIFY (mapEngineSpy.isValid());
QCOMPARE (mapEngineSpy.count(), 0);
// Write new zoomlevel and location to settings
- QSettings settings(DIRECTORY_NAME, FILE_NAME);
- settings.setValue(MAP_LAST_ZOOMLEVEL, DEFAULT_TEST_ZOOMLEVEL);
+ QSettings settings(SETTINGS_ORGANIZATION_NAME, SETTINGS_APPLICATION_NAME);
+ settings.setValue(MAP_LAST_ZOOMLEVEL, ZOOM_LEVEL);
settings.setValue(MAP_LAST_POSITION,
- mapengine->convertSceneCoordinateToLatLon(DEFAULT_TEST_ZOOMLEVEL,
- DEFAULT_TEST_SCENECOORDINATE));
+ QVariant::fromValue(GeoCoordinate(DEFAULT_TEST_SCENECOORDINATE)));
// Call mapengines init() and verify that signal will be send
mapengine->init();
QCOMPARE (mapEngineSpy.count(), 1);
// Remove zoomlevel and location from settings, call init() again and check that
- // signals is send again
+ // signals are sent again
settings.remove(MAP_LAST_ZOOMLEVEL);
settings.remove(MAP_LAST_POSITION);
mapengine->init();
// Check parameters of sended signals
QList<QVariant> parameters = mapEngineSpy.takeFirst();
- QVERIFY(parameters.at(0).toInt() == DEFAULT_TEST_ZOOMLEVEL);
-
- parameters = mapEngineSpy.takeFirst();
- QVERIFY(parameters.at(0).toInt() == DEFAULT_START_ZOOM_LEVEL);
+ QVERIFY(parameters.at(0).toInt() == ZOOM_LEVEL);
// Call set location with know parameter to get location changed
// Store new location and zoomlevel to settings
delete mapengine;
// Read settings and verify that zoomlevel is correct
- MapEngine testengine;// = new mapEngine;
- QPointF LatLonLocation =
- settings.value(MAP_LAST_POSITION, ERROR_VALUE_NOT_FOUND_ON_SETTINGS).toPointF();
- QCOMPARE(LatLonLocation, testengine.convertSceneCoordinateToLatLon(DEFAULT_TEST_ZOOMLEVEL,
- NEW_TEST_SCENECOORDINATE));
+ GeoCoordinate location =
+ settings.value(MAP_LAST_POSITION, ERROR_VALUE_NOT_FOUND_ON_SETTINGS).value<GeoCoordinate>();
+ QCOMPARE(location.latitude(), GeoCoordinate(NEW_TEST_SCENECOORDINATE).latitude());
+ QCOMPARE(location.longitude(), GeoCoordinate(NEW_TEST_SCENECOORDINATE).longitude());
}
QTEST_MAIN(TestMapEngine)