[Mys-venture-commits] SF.net SVN: mys-venture:[83] trunk/mysventure
Status: Inactive
Brought to you by:
kimmovii
From: <kim...@us...> - 2010-07-31 16:33:32
|
Revision: 83 http://mys-venture.svn.sourceforge.net/mys-venture/?rev=83&view=rev Author: kimmovii Date: 2010-07-31 16:33:22 +0000 (Sat, 31 Jul 2010) Log Message: ----------- Implemented test for GameMap. Modified Paths: -------------- trunk/mysventure/source/sub_level/maplayer.cpp Added Paths: ----------- trunk/mysventure/test/sub_level/testgamemap/ trunk/mysventure/test/sub_level/testgamemap/test.cpp trunk/mysventure/test/sub_level/testgamemap/testgamemap.pro Modified: trunk/mysventure/source/sub_level/maplayer.cpp =================================================================== --- trunk/mysventure/source/sub_level/maplayer.cpp 2010-07-31 10:43:24 UTC (rev 82) +++ trunk/mysventure/source/sub_level/maplayer.cpp 2010-07-31 16:33:22 UTC (rev 83) @@ -63,7 +63,7 @@ Sub_GameLevel ::MapLayer::getRowSize() const { - m_layer.size(); + return m_layer.size(); } Added: trunk/mysventure/test/sub_level/testgamemap/test.cpp =================================================================== --- trunk/mysventure/test/sub_level/testgamemap/test.cpp (rev 0) +++ trunk/mysventure/test/sub_level/testgamemap/test.cpp 2010-07-31 16:33:22 UTC (rev 83) @@ -0,0 +1,268 @@ +/* + Mys-venture is a 2D tile-based puzzle game. + Copyright (C) 2010 Kimmo Viitanen + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program 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 this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <QtCore/QString> +#include <QtTest/QtTest> + +#include "sub_level/gamemap.h" +#include "util/position.h" + +using namespace Sub_GameLevel; +using namespace Sub_GameUtility; + + + +class Testgamemap : public QObject +{ + Q_OBJECT + +public: + Testgamemap(); + +private Q_SLOTS: + + void init(); + void cleanup(); + + /*! \brief + Tests GameMap constructor. + */ + void testConstructor(); + + /*! \brief + Tests GameMap::addLayer() and GameMap::removeLayer(). + */ + void testAddRemoveLayer(); + + /*! \brief + Tests GameMap::resize(). + */ + void testResize(); + + /*! \brief + Tests GameMap::getEntity(), GameMap::setEntity() and + GameMap::getEntities(). + */ + void testSetGetEntity(); + + /*! \brief + Tests GameMap::isInMap(). + */ + void testIsInMap(); + +private: + + GameMap* m_map; + MapLayer* m_layer1; + MapLayer* m_layer2; + MapLayer* m_layer3; + + QVector<MapLayer> m_mapData; + + unsigned int m_numberOfRows; + unsigned int m_numberOfColumns; + +}; + +Testgamemap::Testgamemap() +{ + m_numberOfRows = 20; + m_numberOfColumns = 33; +} + +void Testgamemap::init() +{ + // Fill layer1-layer3 with entities. + QVector<MapColumn> layer1; + QVector<MapColumn> layer2; + QVector<MapColumn> layer3; + + for (int column = 0; column < m_numberOfColumns; ++column) + { + QVector<Identification> newColumn1; + QVector<Identification> newColumn2; + QVector<Identification> newColumn3; + for (int row = 0; row < m_numberOfRows; ++row) + { + newColumn1.push_back(Identification()); + newColumn2.push_back(Identification()); + newColumn3.push_back(Identification()); + } + layer1.push_back(MapColumn(m_numberOfRows, newColumn1)); + layer2.push_back(MapColumn(m_numberOfRows, newColumn2)); + layer3.push_back(MapColumn(m_numberOfRows, newColumn3)); + } + + m_layer1 = new MapLayer(m_numberOfColumns, m_numberOfRows, 1, + layer1); + m_layer2 = new MapLayer(m_numberOfColumns, m_numberOfRows, 2, + layer2); + m_layer3 = new MapLayer(m_numberOfColumns, m_numberOfRows, 3, + layer3); + + m_mapData << *m_layer1 << *m_layer2 << *m_layer3; + m_map = new GameMap(m_numberOfRows, m_numberOfColumns, + m_mapData); +} + +void Testgamemap::cleanup() +{ + delete m_layer1; + delete m_layer2; + delete m_layer3; + delete m_map; + m_mapData.clear(); +} + +/*! +Test plan: +- Verify that all entities are correct +- Verify that map dimensions are correct +*/ +void Testgamemap::testConstructor() +{ + // Verify map dimensions in map created in init(). + QVERIFY(m_map->getNumberOfColumns() == this->m_numberOfColumns); + QVERIFY(m_map->getNumberOfRows() == this->m_numberOfRows); + QVERIFY(m_map->getColumnSize() == this->m_numberOfRows); + QVERIFY(m_map->getRowSize() == this->m_numberOfColumns); + + // Verify contents + // Loop layers + for (int layer = 1; layer < 4; ++layer) + { + // Loop columns + for (int column = 0; column < m_numberOfColumns; ++column) + { + // Loop entities + for (int row = 0; row < m_numberOfRows; ++row) + { + QVERIFY(m_map->getEntity(Position(column, row, layer)) == + m_mapData.at(layer - 1 ).getEntity(row, column)); + } + } + } +} + +/*! +Test plan: +- Remove layers from map. +- Verify that removed layers are not on map. +- Add a layer +- Verify that added layer is on map. +- Verify that entities from removed layer are not found. +- Verify that entities from added layers are found. +*/ +void Testgamemap::testAddRemoveLayer() +{ + // Remove layer1 and layer2 from m_map. + m_map->removeLayer(1); + m_map->removeLayer(2); + QVERIFY(!m_map->hasLayer(1)); + QVERIFY(!m_map->hasLayer(2)); + QVERIFY(m_map->hasLayer(3)); + + // Add layer2 + m_map->addLayer(*m_layer2); + + QVERIFY(m_map->hasLayer(2)); + + // Verify that entities from removed layer are not found. + QVERIFY(m_map->getEntity(Position(m_numberOfColumns - 5, m_numberOfRows - 7, 1)) == + Identification::invalidId()); + + // Verify that entities from added layer are found. + QVERIFY(m_map->getEntity(Position(m_numberOfColumns - 1, m_numberOfRows - 1, 2)) + == m_layer2->getEntity(m_numberOfRows - 1, m_numberOfColumns - 1)); +} + +/*! +Test plan: +- Resize map to a different size +- Verify map dimensions were changed. +*/ +void Testgamemap::testResize() +{ + // Resize m_map to a different size + m_map->resize(m_numberOfRows + 5, m_numberOfColumns - 10); + QVERIFY(m_map->getNumberOfColumns() == m_numberOfColumns - 10); + QVERIFY(m_map->getNumberOfRows() == m_numberOfRows + 5); + QVERIFY(m_map->getColumnSize() == m_numberOfRows + 5); + QVERIFY(m_map->getRowSize() == m_numberOfColumns - 10); + + QVERIFY(m_map->getEntity(Position(m_numberOfRows + 3, 4)) == + Identification::invalidId()); +} + +/*! +Test plan: +- Verify entities. +- Verify getEntity() returns correct entities for valid positions. +- Verify getEntity() returns invalid entities for invalid positions. +- Verify getEntities() returns valid entities. +*/ +void Testgamemap::testSetGetEntity() +{ + // Test that returned entities are correct + for (int layer = 1; layer < 4; ++layer) + { + // Loop columns + for (int column = 0; column < m_numberOfColumns; ++column) + { + // Loop entities + for (int row = 0; row < m_numberOfRows; ++row) + { + QVERIFY(m_map->getEntity(Position(column, row, layer)) == + m_mapData.at(layer - 1 ).getEntity(row, column)); + } + } + } + + // Get all entities at position (0, 0) + QVector<Identification> entities = + m_map->getEntities(0, 0); + QVERIFY(entities.at(0) == m_layer1->getEntity(0, 0)); + QVERIFY(entities.at(1) == m_layer2->getEntity(0, 0)); + QVERIFY(entities.at(2) == m_layer3->getEntity(0, 0)); + + // Test that position outside m_map boundaries return invalid. + QVERIFY(m_map->getEntity(Position(5, 3, 5)) == Identification::invalidId()); + QVERIFY(m_map->getEntity(Position(m_numberOfColumns, m_numberOfRows, 2)) == + Identification::invalidId()); +} + +/*! +Test plan: +- Verify positions inside map are reported as such. +- Verify positions outside map are reported as such.*/ +void Testgamemap::testIsInMap() +{ + // Test positions inside map + QVERIFY(m_map->isInMap(Position(0, 0, 1))); + QVERIFY(m_map->isInMap(10, 12)); + + // Test positions outside map + QVERIFY(!(m_map->isInMap(m_numberOfRows, m_numberOfColumns))); + QVERIFY(!(m_map->isInMap(Position(5, 5, 4)))); +} + + + +QTEST_APPLESS_MAIN(Testgamemap); + +#include "test.moc" Added: trunk/mysventure/test/sub_level/testgamemap/testgamemap.pro =================================================================== --- trunk/mysventure/test/sub_level/testgamemap/testgamemap.pro (rev 0) +++ trunk/mysventure/test/sub_level/testgamemap/testgamemap.pro 2010-07-31 16:33:22 UTC (rev 83) @@ -0,0 +1,28 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2010-07-31T13:48:10 +# +#------------------------------------------------- + +QT += testlib + +QT -= gui + +TARGET = test +CONFIG += console +CONFIG -= app_bundle + +TEMPLATE = app + + +SOURCES += test.cpp \ + ../../../source/sub_level/gamemap.cpp \ + ../../../source/util/identification.cpp \ + ../../../source/sub_level/mapcolumn.cpp \ + ../../../source/sub_level/maplayer.cpp \ + ../../../source/util/Position.cpp +DEFINES += SRCDIR=\\\"$$PWD/\\\" +INCLUDEPATH += ../../../include + +HEADERS += \ + ../../../include/sub_level/gamemap.h This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |