From a71c9d0751ab1a1518533134a4024a8c73f61dd2 Mon Sep 17 00:00:00 2001 From: FeniksFire Date: Tue, 4 Jul 2017 13:29:50 +0200 Subject: [PATCH 1/4] Migrating from boost test to google test. --- test/Battlefield.cpp | 125 ------------------------- test/CMakeLists.txt | 36 +++---- test/CMemoryBufferTest.cpp | 34 +++---- test/CVcmiTestConfig.cpp | 1 + test/StdInc.cpp | 16 ++-- test/StdInc.h | 27 +++--- test/battle/BattleHexTest.cpp | 118 +++++++++++++++++++++++ test/main.cpp | 19 ++++ test/{ => map}/CMapEditManagerTest.cpp | 28 +++--- test/{ => map}/CMapFormatTest.cpp | 20 ++-- test/{ => map}/MapComparer.cpp | 83 +++++++--------- test/{ => map}/MapComparer.h | 3 +- 12 files changed, 248 insertions(+), 262 deletions(-) delete mode 100644 test/Battlefield.cpp create mode 100644 test/battle/BattleHexTest.cpp create mode 100644 test/main.cpp rename test/{ => map}/CMapEditManagerTest.cpp (87%) rename test/{ => map}/CMapFormatTest.cpp (93%) rename test/{ => map}/MapComparer.cpp (82%) rename test/{ => map}/MapComparer.h (94%) diff --git a/test/Battlefield.cpp b/test/Battlefield.cpp deleted file mode 100644 index 2c79967f9..000000000 --- a/test/Battlefield.cpp +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Battlefield.cpp, part of VCMI engine - * - * Authors: listed in file AUTHORS in main folder - * - * License: GNU General Public License v2.0 or later - * Full text of license available in license.txt file, in main folder - * - */ -#include "StdInc.h" -#include -#include "../lib/battle/BattleHex.h" -BOOST_AUTO_TEST_SUITE(BattlefieldHex_Suite) - -BOOST_AUTO_TEST_CASE(getNeighbouringTiles) -{ - BattleHex mainHex; - std::vector neighbouringTiles; - mainHex.setXY(16,0); - neighbouringTiles = mainHex.neighbouringTiles(); - BOOST_TEST(neighbouringTiles.size()==1); - mainHex.setXY(0,0); - neighbouringTiles = mainHex.neighbouringTiles(); - BOOST_TEST(neighbouringTiles.size()==2); - mainHex.setXY(15,2); - neighbouringTiles = mainHex.neighbouringTiles(); - BOOST_TEST(neighbouringTiles.size()==3); - mainHex.setXY(2,0); - neighbouringTiles = mainHex.neighbouringTiles(); - BOOST_TEST(neighbouringTiles.size()==4); - mainHex.setXY(1,2); - neighbouringTiles = mainHex.neighbouringTiles(); - BOOST_TEST(neighbouringTiles.size()==5); - mainHex.setXY(8,5); - neighbouringTiles = mainHex.neighbouringTiles(); - BOOST_TEST(neighbouringTiles.size()==6); - - BOOST_REQUIRE(neighbouringTiles.size()==6 && mainHex==93); - BOOST_TEST(neighbouringTiles.at(0)==75); - BOOST_TEST(neighbouringTiles.at(1)==76); - BOOST_TEST(neighbouringTiles.at(2)==94); - BOOST_TEST(neighbouringTiles.at(3)==110); - BOOST_TEST(neighbouringTiles.at(4)==109); - BOOST_TEST(neighbouringTiles.at(5)==92); -} - -BOOST_AUTO_TEST_CASE(getDistance) -{ - BattleHex firstHex(0,0), secondHex(16,0); - BOOST_TEST((int)firstHex.getDistance(firstHex,secondHex)==16); - firstHex=0, secondHex=170; - BOOST_TEST((int)firstHex.getDistance(firstHex,secondHex)==10); - firstHex=16, secondHex=181; - BOOST_TEST((int)firstHex.getDistance(firstHex,secondHex)==10); - firstHex=186, secondHex=70; - BOOST_TEST((int)firstHex.getDistance(firstHex,secondHex)==17); - firstHex=166, secondHex=39; - BOOST_TEST((int)firstHex.getDistance(firstHex,secondHex)==11); - firstHex=25, secondHex=103; - BOOST_TEST((int)firstHex.getDistance(firstHex,secondHex)==9); - firstHex=18, secondHex=71; - BOOST_TEST((int)firstHex.getDistance(firstHex,secondHex)==4); -} - -BOOST_AUTO_TEST_CASE(mutualPositions) -{ - BattleHex firstHex(0,0), secondHex(16,0); - firstHex=86, secondHex=68; - BOOST_TEST((int)firstHex.mutualPosition(firstHex,secondHex)==0); - secondHex=69; - BOOST_TEST((int)firstHex.mutualPosition(firstHex,secondHex)==1); - secondHex=87; - BOOST_TEST((int)firstHex.mutualPosition(firstHex,secondHex)==2); - secondHex=103; - BOOST_TEST((int)firstHex.mutualPosition(firstHex,secondHex)==3); - secondHex=102; - BOOST_TEST((int)firstHex.mutualPosition(firstHex,secondHex)==4); - secondHex=85; - BOOST_TEST((int)firstHex.mutualPosition(firstHex,secondHex)==5); - secondHex=46; - BOOST_TEST((int)firstHex.mutualPosition(firstHex,secondHex)==-1); -} - -BOOST_AUTO_TEST_CASE(getClosestTile) -{ - BattleHex mainHex(0); - std::set possibilities; - possibilities.insert(3); - possibilities.insert(170); - possibilities.insert(100); - possibilities.insert(119); - possibilities.insert(186); - - BOOST_TEST(mainHex.getClosestTile(0,mainHex,possibilities)==3); - mainHex = 139; - BOOST_TEST(mainHex.getClosestTile(1,mainHex,possibilities)==119); - mainHex = 16; - BOOST_TEST(mainHex.getClosestTile(1,mainHex,possibilities)==100); - mainHex = 166; - BOOST_TEST(mainHex.getClosestTile(0,mainHex,possibilities)==186); - mainHex = 76; - BOOST_TEST(mainHex.getClosestTile(1,mainHex,possibilities)==3); - BOOST_TEST(mainHex.getClosestTile(0,mainHex,possibilities)==100); -} - -BOOST_AUTO_TEST_CASE(moveEDir) -{ - BattleHex mainHex(20); - mainHex.moveInDirection(BattleHex::EDir::BOTTOM_RIGHT); - BOOST_TEST(mainHex==37); - mainHex.moveInDirection(BattleHex::EDir::RIGHT); - BOOST_TEST(mainHex==38); - mainHex.moveInDirection(BattleHex::EDir::TOP_RIGHT); - BOOST_TEST(mainHex==22); - mainHex.moveInDirection(BattleHex::EDir::TOP_LEFT); - BOOST_TEST(mainHex==4); - mainHex.moveInDirection(BattleHex::EDir::LEFT); - BOOST_TEST(mainHex==3); - mainHex.moveInDirection(BattleHex::EDir::BOTTOM_LEFT); - BOOST_TEST(mainHex==20); - mainHex.moveInDirection(BattleHex::EDir::NONE); - BOOST_TEST(mainHex==20); -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 9b37330e2..e695eab35 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -3,28 +3,32 @@ project(test) enable_testing() include_directories(${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/include ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_HOME_DIRECTORY}/test) include_directories(${Boost_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIR}) +find_package(GTest REQUIRED) +include_directories(${GTEST_INCLUDE_DIRS}) set(test_SRCS - StdInc.cpp + StdInc.cpp + main.cpp + CMemoryBufferTest.cpp + CVcmiTestConfig.cpp + + battle/BattleHexTest.cpp + battle/CHealthTest.cpp - Battlefield.cpp - CMapEditManagerTest.cpp - CMapFormatTest.cpp - CMemoryBufferTest.cpp - CVcmiTestConfig.cpp - MapComparer.cpp - battle/CHealthTest.cpp + map/CMapEditManagerTest.cpp + map/CMapFormatTest.cpp + map/MapComparer.cpp ) set(test_HEADERS - StdInc.h - - CVcmiTestConfig.h - MapComparer.h + StdInc.h + + CVcmiTestConfig.h + map/MapComparer.h ) add_executable(vcmitest ${test_SRCS} ${test_HEADERS}) -target_link_libraries(vcmitest vcmi ${Boost_LIBRARIES} ${RT_LIB} ${DL_LIB}) +target_link_libraries(vcmitest vcmi gtest ${RT_LIB} ${DL_LIB}) add_test(vcmitest vcmitest) vcmi_set_output_dir(vcmitest "") @@ -44,7 +48,7 @@ set(vcmitest_FILES ) foreach(file ${vcmitest_FILES}) - add_custom_command(TARGET vcmitestFiles POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/${file}" ${CMAKE_CURRENT_BINARY_DIR} - ) + add_custom_command(TARGET vcmitestFiles POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/${file}" ${CMAKE_CURRENT_BINARY_DIR} + ) endforeach() diff --git a/test/CMemoryBufferTest.cpp b/test/CMemoryBufferTest.cpp index 4370e0fa3..2df927686 100644 --- a/test/CMemoryBufferTest.cpp +++ b/test/CMemoryBufferTest.cpp @@ -7,46 +7,40 @@ * Full text of license available in license.txt file, in main folder * */ + #include "StdInc.h" -#include #include "../lib/filesystem/CMemoryBuffer.h" -struct CMemoryBufferFixture +struct CMemoryBufferTest : testing::Test { CMemoryBuffer subject; }; -BOOST_AUTO_TEST_SUITE(CMemoryBuffer_Suite) -BOOST_FIXTURE_TEST_CASE(empty, CMemoryBufferFixture) +TEST_F(CMemoryBufferTest, empty) { - BOOST_REQUIRE_EQUAL(0, subject.tell()); - BOOST_REQUIRE_EQUAL(0, subject.getSize()); - + EXPECT_EQ(subject.tell(), 0); + EXPECT_EQ(subject.getSize(), 0); si32 dummy = 1337; - auto ret = subject.read((ui8 *)&dummy, sizeof(si32)); - - BOOST_CHECK_EQUAL(0, ret); - BOOST_CHECK_EQUAL(1337, dummy); - BOOST_CHECK_EQUAL(0, subject.tell()); + EXPECT_EQ(ret, 0); + EXPECT_EQ(dummy, 1337); + EXPECT_EQ(subject.tell(), 0); } -BOOST_FIXTURE_TEST_CASE(write, CMemoryBufferFixture) +TEST_F(CMemoryBufferTest, write) { const si32 initial = 1337; subject.write((const ui8 *)&initial, sizeof(si32)); - BOOST_CHECK_EQUAL(4, subject.tell()); + EXPECT_EQ(subject.tell(), 4); subject.seek(0); - BOOST_CHECK_EQUAL(0, subject.tell()); + EXPECT_EQ(subject.tell(), 0); si32 current = 0; auto ret = subject.read((ui8 *)¤t, sizeof(si32)); - BOOST_CHECK_EQUAL(sizeof(si32), ret); - BOOST_CHECK_EQUAL(initial, current); - BOOST_CHECK_EQUAL(4, subject.tell()); + EXPECT_EQ(ret, sizeof(si32)); + EXPECT_EQ(current, initial); + EXPECT_EQ(subject.tell(), 4); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/test/CVcmiTestConfig.cpp b/test/CVcmiTestConfig.cpp index a9caff9ec..bb22d4920 100644 --- a/test/CVcmiTestConfig.cpp +++ b/test/CVcmiTestConfig.cpp @@ -47,3 +47,4 @@ CVcmiTestConfig::~CVcmiTestConfig() { std::cout << "Ending global test tear-down." << std::endl; } + diff --git a/test/StdInc.cpp b/test/StdInc.cpp index c1b797eb8..201d9a246 100644 --- a/test/StdInc.cpp +++ b/test/StdInc.cpp @@ -1,10 +1,12 @@ +/* + * StdInc.cpp, part of VCMI engine + * + * Authors: listed in file AUTHORS in main folder + * + * License: GNU General Public License v2.0 or later + * Full text of license available in license.txt file, in main folder + * + */ // Creates the precompiled header #include "StdInc.h" -#ifndef _MSC_VER - // Should be defined only once, before #include of unit test header - #define BOOST_TEST_MODULE VcmiTest - #include - #include "CVcmiTestConfig.h" - BOOST_GLOBAL_FIXTURE(CVcmiTestConfig); -#endif diff --git a/test/StdInc.h b/test/StdInc.h index ac257b5f0..0ea466cd6 100644 --- a/test/StdInc.h +++ b/test/StdInc.h @@ -1,16 +1,13 @@ +/* + * StdInc.h, part of VCMI engine + * + * Authors: listed in file AUTHORS in main folder + * + * License: GNU General Public License v2.0 or later + * Full text of license available in license.txt file, in main folder + * + */ #pragma once - -#include "../Global.h" - -#if !defined(_MSC_VER) && !defined(__MINGW32__) - #define BOOST_TEST_DYN_LINK -#endif - -#ifdef _MSC_VER - #define BOOST_TEST_MODULE VcmiTest - #include - #include "CVcmiTestConfig.h" - BOOST_GLOBAL_FIXTURE(CVcmiTestConfig); -#endif - - +#include +#include +#include "Global.h" diff --git a/test/battle/BattleHexTest.cpp b/test/battle/BattleHexTest.cpp new file mode 100644 index 000000000..e41809d6a --- /dev/null +++ b/test/battle/BattleHexTest.cpp @@ -0,0 +1,118 @@ +/* + * BattleHexTest.cpp, part of VCMI engine + * + * Authors: listed in file AUTHORS in main folder + * + * License: GNU General Public License v2.0 or later + * Full text of license available in license.txt file, in main folder + * + */ + +#include "StdInc.h" +#include "../lib/battle/BattleHex.h" + +TEST(BattleHexTest, getNeighbouringTiles){ + BattleHex mainHex; + std::vector neighbouringTiles; + mainHex.setXY(16,0); + neighbouringTiles = mainHex.neighbouringTiles(); + EXPECT_EQ(neighbouringTiles.size(), 1); + mainHex.setXY(0,0); + neighbouringTiles = mainHex.neighbouringTiles(); + EXPECT_EQ(neighbouringTiles.size(), 2); + mainHex.setXY(15,2); + neighbouringTiles = mainHex.neighbouringTiles(); + EXPECT_EQ(neighbouringTiles.size(), 3); + mainHex.setXY(2,0); + neighbouringTiles = mainHex.neighbouringTiles(); + EXPECT_EQ(neighbouringTiles.size(), 4); + mainHex.setXY(1,2); + neighbouringTiles = mainHex.neighbouringTiles(); + EXPECT_EQ(neighbouringTiles.size(), 5); + mainHex.setXY(8,5); + neighbouringTiles = mainHex.neighbouringTiles(); + EXPECT_EQ(neighbouringTiles.size(), 6); + + ASSERT_TRUE(neighbouringTiles.size()==6 && mainHex==93); + EXPECT_EQ(neighbouringTiles.at(0), 75); + EXPECT_EQ(neighbouringTiles.at(1), 76); + EXPECT_EQ(neighbouringTiles.at(2), 94); + EXPECT_EQ(neighbouringTiles.at(3), 110); + EXPECT_EQ(neighbouringTiles.at(4), 109); + EXPECT_EQ(neighbouringTiles.at(5), 92); +} + +TEST(BattleHexTest, getDistance){ + BattleHex firstHex(0,0), secondHex(16,0); + EXPECT_EQ((int)firstHex.getDistance(firstHex,secondHex), 16); + firstHex=0, secondHex=170; + EXPECT_EQ((int)firstHex.getDistance(firstHex,secondHex), 10); + firstHex=16, secondHex=181; + EXPECT_EQ((int)firstHex.getDistance(firstHex,secondHex), 10); + firstHex=186, secondHex=70; + EXPECT_EQ((int)firstHex.getDistance(firstHex,secondHex), 17); + firstHex=166, secondHex=39; + EXPECT_EQ((int)firstHex.getDistance(firstHex,secondHex), 11); + firstHex=25, secondHex=103; + EXPECT_EQ((int)firstHex.getDistance(firstHex,secondHex), 9); + firstHex=18, secondHex=71; + EXPECT_EQ((int)firstHex.getDistance(firstHex,secondHex), 4); +} + +TEST(BattleHexTest, mutualPositions) +{ + BattleHex firstHex(0,0), secondHex(16,0); + firstHex=86, secondHex=68; + EXPECT_EQ((int)firstHex.mutualPosition(firstHex,secondHex), BattleHex::EDir::TOP_LEFT); + secondHex=69; + EXPECT_EQ((int)firstHex.mutualPosition(firstHex,secondHex), BattleHex::EDir::TOP_RIGHT); + secondHex=87; + EXPECT_EQ((int)firstHex.mutualPosition(firstHex,secondHex), BattleHex::EDir::RIGHT); + secondHex=103; + EXPECT_EQ((int)firstHex.mutualPosition(firstHex,secondHex), BattleHex::EDir::BOTTOM_RIGHT); + secondHex=102; + EXPECT_EQ((int)firstHex.mutualPosition(firstHex,secondHex), BattleHex::EDir::BOTTOM_LEFT); + secondHex=85; + EXPECT_EQ((int)firstHex.mutualPosition(firstHex,secondHex), BattleHex::EDir::LEFT); + secondHex=46; + EXPECT_EQ((int)firstHex.mutualPosition(firstHex,secondHex), -1); +} + +TEST(BattleHexTest, getClosestTile) +{ + BattleHex mainHex(0); + std::set possibilities; + possibilities.insert(3); + possibilities.insert(170); + possibilities.insert(100); + possibilities.insert(119); + possibilities.insert(186); + + EXPECT_EQ(mainHex.getClosestTile(0,mainHex,possibilities), 3); + mainHex = 139; + EXPECT_EQ(mainHex.getClosestTile(1,mainHex,possibilities), 119); + mainHex = 16; + EXPECT_EQ(mainHex.getClosestTile(1,mainHex,possibilities), 100); + mainHex = 166; + EXPECT_EQ(mainHex.getClosestTile(0,mainHex,possibilities), 186); + mainHex = 76; + EXPECT_EQ(mainHex.getClosestTile(1,mainHex,possibilities), 3); + EXPECT_EQ(mainHex.getClosestTile(0,mainHex,possibilities), 100); +} + +TEST(BattleHexTest, moveEDir) +{ + BattleHex mainHex(20); + mainHex.moveInDirection(BattleHex::EDir::BOTTOM_RIGHT); + EXPECT_EQ(mainHex, 37); + mainHex.moveInDirection(BattleHex::EDir::RIGHT); + EXPECT_EQ(mainHex, 38); + mainHex.moveInDirection(BattleHex::EDir::TOP_RIGHT); + EXPECT_EQ(mainHex, 22); + mainHex.moveInDirection(BattleHex::EDir::TOP_LEFT); + EXPECT_EQ(mainHex, 4); + mainHex.moveInDirection(BattleHex::EDir::LEFT); + EXPECT_EQ(mainHex, 3); + mainHex.moveInDirection(BattleHex::EDir::BOTTOM_LEFT); + EXPECT_EQ(mainHex, 20); +} diff --git a/test/main.cpp b/test/main.cpp new file mode 100644 index 000000000..b1fe2f444 --- /dev/null +++ b/test/main.cpp @@ -0,0 +1,19 @@ +/* + * main.cpp, part of VCMI engine + * + * Authors: listed in file AUTHORS in main folder + * + * License: GNU General Public License v2.0 or later + * Full text of license available in license.txt file, in main folder + * + */ + +#include "StdInc.h" +#include "CVcmiTestConfig.h" +#include "../lib/filesystem/CMemoryBuffer.h" + +int main(int argc, char ** argv){ + ::testing::InitGoogleTest(&argc, argv); + CVcmiTestConfig test; + return RUN_ALL_TESTS(); +} diff --git a/test/CMapEditManagerTest.cpp b/test/map/CMapEditManagerTest.cpp similarity index 87% rename from test/CMapEditManagerTest.cpp rename to test/map/CMapEditManagerTest.cpp index d05803ef3..3bcff96f4 100644 --- a/test/CMapEditManagerTest.cpp +++ b/test/map/CMapEditManagerTest.cpp @@ -9,7 +9,6 @@ */ #include "StdInc.h" -#include #include "../lib/filesystem/ResourceID.h" #include "../lib/mapping/CMapService.h" @@ -20,9 +19,8 @@ #include "../lib/CRandomGenerator.h" #include "../lib/VCMI_Lib.h" -BOOST_AUTO_TEST_SUITE(CMapEditManager_Suite) -BOOST_AUTO_TEST_CASE(DrawTerrain_Type) +TEST(MapManager, DrawTerrain_Type) { logGlobal->info("CMapEditManager_DrawTerrain_Type start"); try @@ -40,17 +38,17 @@ BOOST_AUTO_TEST_CASE(DrawTerrain_Type) static const int3 squareCheck[] = { int3(5,5,0), int3(5,4,0), int3(4,4,0), int3(4,5,0) }; for(int i = 0; i < ARRAY_COUNT(squareCheck); ++i) { - BOOST_CHECK(map->getTile(squareCheck[i]).terType == ETerrainType::GRASS); + EXPECT_EQ(map->getTile(squareCheck[i]).terType, ETerrainType::GRASS); } // Concat to square editManager->getTerrainSelection().select(int3(6, 5, 0)); editManager->drawTerrain(ETerrainType::GRASS); - BOOST_CHECK(map->getTile(int3(6, 4, 0)).terType == ETerrainType::GRASS); + EXPECT_EQ(map->getTile(int3(6, 4, 0)).terType, ETerrainType::GRASS); editManager->getTerrainSelection().select(int3(6, 5, 0)); editManager->drawTerrain(ETerrainType::LAVA); - BOOST_CHECK(map->getTile(int3(4, 4, 0)).terType == ETerrainType::GRASS); - BOOST_CHECK(map->getTile(int3(7, 4, 0)).terType == ETerrainType::LAVA); + EXPECT_EQ(map->getTile(int3(4, 4, 0)).terType, ETerrainType::GRASS); + EXPECT_EQ(map->getTile(int3(7, 4, 0)).terType, ETerrainType::LAVA); // Special case water,rock editManager->getTerrainSelection().selectRange(MapRect(int3(10, 10, 0), 10, 5)); @@ -59,18 +57,18 @@ BOOST_AUTO_TEST_CASE(DrawTerrain_Type) editManager->drawTerrain(ETerrainType::GRASS); editManager->getTerrainSelection().select(int3(21, 16, 0)); editManager->drawTerrain(ETerrainType::GRASS); - BOOST_CHECK(map->getTile(int3(20, 15, 0)).terType == ETerrainType::GRASS); + EXPECT_EQ(map->getTile(int3(20, 15, 0)).terType, ETerrainType::GRASS); // Special case non water,rock static const int3 diagonalCheck[] = { int3(31,42,0), int3(32,42,0), int3(32,43,0), int3(33,43,0), int3(33,44,0), - int3(34,44,0), int3(34,45,0), int3(35,45,0), int3(35,46,0), int3(36,46,0), - int3(36,47,0), int3(37,47,0)}; + int3(34,44,0), int3(34,45,0), int3(35,45,0), int3(35,46,0), int3(36,46,0), + int3(36,47,0), int3(37,47,0)}; for(int i = 0; i < ARRAY_COUNT(diagonalCheck); ++i) { editManager->getTerrainSelection().select(diagonalCheck[i]); } editManager->drawTerrain(ETerrainType::GRASS); - BOOST_CHECK(map->getTile(int3(35, 44, 0)).terType == ETerrainType::WATER); + EXPECT_EQ(map->getTile(int3(35, 44, 0)).terType, ETerrainType::WATER); // Rock case editManager->getTerrainSelection().selectRange(MapRect(int3(1, 1, 1), 15, 15)); @@ -79,7 +77,7 @@ BOOST_AUTO_TEST_CASE(DrawTerrain_Type) int3(8, 7, 1), int3(4, 8, 1), int3(5, 8, 1), int3(6, 8, 1)}); editManager->getTerrainSelection().setSelection(vec); editManager->drawTerrain(ETerrainType::ROCK); - BOOST_CHECK(map->getTile(int3(5, 6, 1)).terType == ETerrainType::ROCK || map->getTile(int3(7, 8, 1)).terType == ETerrainType::ROCK); + EXPECT_TRUE(map->getTile(int3(5, 6, 1)).terType == ETerrainType::ROCK || map->getTile(int3(7, 8, 1)).terType == ETerrainType::ROCK); //todo: add checks here and enable, also use smaller size #if 0 @@ -111,7 +109,7 @@ BOOST_AUTO_TEST_CASE(DrawTerrain_Type) logGlobal->info("CMapEditManager_DrawTerrain_Type finish"); } -BOOST_AUTO_TEST_CASE(DrawTerrain_View) +TEST(MapManager, DrawTerrain_View) { logGlobal->info("CMapEditManager_DrawTerrain_View start"); try @@ -165,7 +163,7 @@ BOOST_AUTO_TEST_CASE(DrawTerrain_View) break; } } - BOOST_CHECK(isInRange); + EXPECT_TRUE(isInRange); if(!isInRange) logGlobal->error("No or invalid pattern found for current position."); } @@ -179,5 +177,3 @@ BOOST_AUTO_TEST_CASE(DrawTerrain_View) } logGlobal->info("CMapEditManager_DrawTerrain_View finish"); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/test/CMapFormatTest.cpp b/test/map/CMapFormatTest.cpp similarity index 93% rename from test/CMapFormatTest.cpp rename to test/map/CMapFormatTest.cpp index 82b454f20..5c186dde4 100644 --- a/test/CMapFormatTest.cpp +++ b/test/map/CMapFormatTest.cpp @@ -9,8 +9,6 @@ */ #include "StdInc.h" -#include - #include "../lib/filesystem/CMemoryBuffer.h" #include "../lib/filesystem/Filesystem.h" @@ -25,12 +23,11 @@ static const int TEST_RANDOM_SEED = 1337; -BOOST_AUTO_TEST_SUITE(MapFormat_Suite) -BOOST_AUTO_TEST_CASE(Random) +TEST(MapFormat, Random) { logGlobal->info("MapFormat_Random start"); - BOOST_TEST_CHECKPOINT("MapFormat_Random start"); + SCOPED_TRACE("MapFormat_Random start"); std::unique_ptr initialMap; CMapGenOptions opt; @@ -49,14 +46,14 @@ BOOST_AUTO_TEST_CASE(Random) initialMap = gen.generate(&opt, TEST_RANDOM_SEED); initialMap->name = "Test"; - BOOST_TEST_CHECKPOINT("MapFormat_Random generated"); + SCOPED_TRACE("MapFormat_Random generated"); CMemoryBuffer serializeBuffer; { CMapSaverJson saver(&serializeBuffer); saver.saveMap(initialMap); } - BOOST_TEST_CHECKPOINT("MapFormat_Random serialized"); + SCOPED_TRACE("MapFormat_Random serialized"); #if 1 { auto path = VCMIDirs::get().userDataPath()/"test_random.vmap"; @@ -70,8 +67,7 @@ BOOST_AUTO_TEST_CASE(Random) logGlobal->info("Test map has been saved to:"); logGlobal->info(path.string()); } - BOOST_TEST_CHECKPOINT("MapFormat_Random saved"); - + SCOPED_TRACE("MapFormat_Random saved"); #endif // 1 serializeBuffer.seek(0); @@ -82,7 +78,7 @@ BOOST_AUTO_TEST_CASE(Random) MapComparer c; c(serialized, initialMap); } - + SCOPED_TRACE("MapFormat_Random finish"); logGlobal->info("MapFormat_Random finish"); } @@ -116,7 +112,7 @@ static void addToArchive(CZipSaver & saver, const JsonNode & data, const std::st } } -BOOST_AUTO_TEST_CASE(Objects) +TEST(MapFormat, Objects) { logGlobal->info("MapFormat_Objects start"); @@ -203,5 +199,3 @@ BOOST_AUTO_TEST_CASE(Objects) logGlobal->info("MapFormat_Objects finish"); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/test/MapComparer.cpp b/test/map/MapComparer.cpp similarity index 82% rename from test/MapComparer.cpp rename to test/map/MapComparer.cpp index 6b8692e78..1e2fb6ffe 100644 --- a/test/MapComparer.cpp +++ b/test/map/MapComparer.cpp @@ -9,29 +9,27 @@ */ #include "StdInc.h" -#include - #include "MapComparer.h" #include "../lib/ScopeGuard.h" #include "../lib/mapping/CMap.h" -#define VCMI_CHECK_FIELD_EQUAL_P(field) BOOST_CHECK_EQUAL(actual->field, expected->field) +#define VCMI_CHECK_FIELD_EQUAL_P(field) EXPECT_EQ(actual->field, expected->field) -#define VCMI_CHECK_FIELD_EQUAL(field) BOOST_CHECK_EQUAL(actual.field, expected.field) +#define VCMI_CHECK_FIELD_EQUAL(field) EXPECT_EQ(actual.field, expected.field) -#define VCMI_REQUIRE_FIELD_EQUAL_P(field) BOOST_REQUIRE_EQUAL(actual->field, expected->field) -#define VCMI_REQUIRE_FIELD_EQUAL(field) BOOST_REQUIRE_EQUAL(actual.field, expected.field) +#define VCMI_REQUIRE_FIELD_EQUAL_P(field) ASSERT_EQ(actual->field, expected->field) +#define VCMI_REQUIRE_FIELD_EQUAL(field) ASSERT_EQ(actual.field, expected.field) template void checkEqual(const T & actual, const T & expected) { - BOOST_CHECK_EQUAL(actual, expected) ; + EXPECT_EQ(actual, expected) ; } void checkEqual(const std::vector & actual, const std::vector & expected) { - BOOST_CHECK_EQUAL(actual.size(), expected.size()); + EXPECT_EQ(actual.size(), expected.size()); for(auto actualIt = actual.begin(), expectedIt = expected.begin(); actualIt != actual.end() && expectedIt != expected.end(); actualIt++, expectedIt++) { @@ -42,7 +40,7 @@ void checkEqual(const std::vector & actual, const std::vector & expe template void checkEqual(const std::vector & actual, const std::vector & expected) { - BOOST_CHECK_EQUAL(actual.size(), expected.size()); + EXPECT_EQ(actual.size(), expected.size()); for(auto actualIt = actual.begin(), expectedIt = expected.begin(); actualIt != actual.end() && expectedIt != expected.end(); actualIt++, expectedIt++) { @@ -53,12 +51,12 @@ void checkEqual(const std::vector & actual, const std::vector template void checkEqual(const std::set & actual, const std::set & expected) { - BOOST_CHECK_EQUAL(actual.size(), expected.size()); + EXPECT_EQ(actual.size(), expected.size()); for(auto elem : expected) { if(!vstd::contains(actual, elem)) - BOOST_ERROR("Required element not found "+boost::to_string(elem)); + FAIL() << "Required element not found "+boost::to_string(elem); } } @@ -91,12 +89,12 @@ void checkEqual(const PlayerInfo & actual, const PlayerInfo & expected) VCMI_CHECK_FIELD_EQUAL(hasRandomHero); } -void checkEqual(const EventExpression & actual, const EventExpression & expected) +void checkEqual(const EventExpression & actual, const EventExpression & expected) { //todo: checkEventExpression } -void checkEqual(const TriggeredEvent & actual, const TriggeredEvent & expected) +void checkEqual(const TriggeredEvent & actual, const TriggeredEvent & expected) { VCMI_CHECK_FIELD_EQUAL(identifier); VCMI_CHECK_FIELD_EQUAL(description); @@ -142,8 +140,8 @@ void checkEqual(const TerrainTile & actual, const TerrainTile & expected) VCMI_REQUIRE_FIELD_EQUAL(roadDir); VCMI_REQUIRE_FIELD_EQUAL(extTileFlags); - BOOST_REQUIRE_EQUAL(actual.blockingObjects.size(), expected.blockingObjects.size()); - BOOST_REQUIRE_EQUAL(actual.visitableObjects.size(), expected.visitableObjects.size()); + ASSERT_EQ(actual.blockingObjects.size(), expected.blockingObjects.size()); + ASSERT_EQ(actual.visitableObjects.size(), expected.visitableObjects.size()); VCMI_REQUIRE_FIELD_EQUAL(visitable); VCMI_REQUIRE_FIELD_EQUAL(blocked); @@ -179,7 +177,7 @@ void MapComparer::compareHeader() auto sortByIdentifier = [](const TriggeredEvent & lhs, const TriggeredEvent & rhs) -> bool { - return lhs.identifier < rhs.identifier; + return lhs.identifier < rhs.identifier; }; boost::sort (actualEvents, sortByIdentifier); boost::sort (expectedEvents, sortByIdentifier); @@ -197,18 +195,18 @@ void MapComparer::compareOptions() checkEqual(actual->allowedArtifact, expected->allowedArtifact); checkEqual(actual->allowedSpell, expected->allowedSpell); - //todo: compareOptions events + //todo: compareOptions events } void MapComparer::compareObject(const CGObjectInstance * actual, const CGObjectInstance * expected) { - BOOST_CHECK_EQUAL(actual->instanceName, expected->instanceName); - BOOST_CHECK_EQUAL(typeid(actual).name(), typeid(expected).name());//todo: remove and use just comparison + EXPECT_EQ(actual->instanceName, expected->instanceName); + EXPECT_EQ(typeid(actual).name(), typeid(expected).name());//todo: remove and use just comparison std::string actualFullID = boost::to_string(boost::format("%s(%d)|%s(%d) %d") % actual->typeName % actual->ID % actual->subTypeName % actual->subID % actual->tempOwner); std::string expectedFullID = boost::to_string(boost::format("%s(%d)|%s(%d) %d") % expected->typeName % expected->ID % expected->subTypeName % expected->subID % expected->tempOwner); - BOOST_CHECK_EQUAL(actualFullID, expectedFullID); + EXPECT_EQ(actualFullID, expectedFullID); VCMI_CHECK_FIELD_EQUAL_P(pos); checkEqual(actual->appearance, expected->appearance); @@ -216,24 +214,24 @@ void MapComparer::compareObject(const CGObjectInstance * actual, const CGObjectI void MapComparer::compareObjects() { - BOOST_CHECK_EQUAL(actual->objects.size(), expected->objects.size()); + EXPECT_EQ(actual->objects.size(), expected->objects.size()); for(size_t idx = 0; idx < expected->objects.size(); idx++) { auto expectedObject = expected->objects[idx]; - BOOST_REQUIRE_EQUAL(idx, expectedObject->id.getNum()); + ASSERT_EQ(idx, expectedObject->id.getNum()); { auto it = expected->instanceNames.find(expectedObject->instanceName); - BOOST_REQUIRE(it != expected->instanceNames.end()); + ASSERT_NE(it, expected->instanceNames.end()); } { auto it = actual->instanceNames.find(expectedObject->instanceName); - BOOST_REQUIRE(it != actual->instanceNames.end()); + ASSERT_NE(it, actual->instanceNames.end()); auto actualObject = it->second; @@ -251,17 +249,16 @@ void MapComparer::compareTerrain() for(int y = 0; y < expected->height; y++) { int3 coord(x,y,0); - BOOST_TEST_CHECKPOINT(coord); - + SCOPED_TRACE(coord); checkEqual(actual->getTile(coord), expected->getTile(coord)); } } void MapComparer::compare() { - BOOST_REQUIRE_NE((void *) actual, (void *) expected); //should not point to the same object - BOOST_REQUIRE_MESSAGE(actual != nullptr, "Actual map is not defined"); - BOOST_REQUIRE_MESSAGE(expected != nullptr, "Expected map is not defined"); + ASSERT_NE((void *) actual, (void *) expected); //should not point to the same object + ASSERT_TRUE(actual != nullptr) << "Actual map is not defined"; + ASSERT_TRUE(expected != nullptr) << "Expected map is not defined"; compareHeader(); compareOptions(); @@ -269,7 +266,7 @@ void MapComparer::compare() compareTerrain(); } -void MapComparer::operator() (const std::unique_ptr& actual, const std::unique_ptr& expected) +void MapComparer::operator() (const std::unique_ptr& actual, const std::unique_ptr& expected) { this->actual = actual.get(); this->expected = expected.get(); @@ -301,12 +298,7 @@ std::string JsonMapComparer::buildMessage(const std::string & message) void JsonMapComparer::addError(const std::string & message) { - BOOST_ERROR(buildMessage(message)); -} - -void JsonMapComparer::addWarning(const std::string & message) -{ - BOOST_WARN_MESSAGE(false, buildMessage(message)); + FAIL()< Date: Sun, 9 Jul 2017 18:31:21 +0200 Subject: [PATCH 2/4] Add googletest as submodule --- .gitmodules | 3 +++ .travis.yml | 9 ++++----- test/CMakeLists.txt | 19 +++++++++++++++---- test/StdInc.h | 4 ++-- test/googletest | 1 + 5 files changed, 25 insertions(+), 11 deletions(-) create mode 100644 .gitmodules create mode 160000 test/googletest diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..3168f8390 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "test/googletest"] + path = test/googletest + url = https://github.com/google/googletest diff --git a/.travis.yml b/.travis.yml index 3d360465d..068aa0c46 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,17 +17,16 @@ matrix: - os: linux compiler: clang env: VCMI_PLATFORM='linux' REAL_CC=clang-3.6 REAL_CXX=clang++-3.6 PACKAGE=clang-3.6 - SUPPORT=libstdc++-4.8-dev VCMI_CMAKE_FLAGS='-DENABLE_TEST=0' + SUPPORT=libstdc++-4.8-dev - os: linux compiler: clang env: VCMI_PLATFORM='linux' REAL_CC=clang-3.4 REAL_CXX=clang++-3.4 PACKAGE=clang-3.4 - SUPPORT=libstdc++-4.8-dev VCMI_CMAKE_FLAGS='-DENABLE_TEST=0' + SUPPORT=libstdc++-4.8-dev - os: linux compiler: gcc env: VCMI_PLATFORM='linux' REAL_CC=gcc-4.8 REAL_CXX=g++-4.8 PACKAGE=g++-4.8 SUPPORT= - VCMI_CMAKE_FLAGS='-DENABLE_TEST=0' - os: linux - env: VCMI_PLATFORM='mxe' MXE_TARGET=i686-w64-mingw32.shared VCMI_CMAKE_FLAGS='-DENABLE_TEST=0' + env: VCMI_PLATFORM='mxe' MXE_TARGET=i686-w64-mingw32.shared sudo: required - os: osx env: VCMI_PLATFORM='mac' @@ -40,7 +39,7 @@ addons: notification_email: coverity@arseniyshestakov.com build_command_prepend: cov-configure --compiler clang-3.6 --comptype clangcc && cov-configure --comptype clangcxx --compiler clang++-3.6 && cmake -G Ninja .. - -DCMAKE_BUILD_TYPE=DEBUG -DENABLE_LAUNCHER=0 -DENABLE_TEST=0 + -DCMAKE_BUILD_TYPE=DEBUG -DENABLE_LAUNCHER=0 build_command: ninja -j 3 branch_pattern: coverity_scan diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index e695eab35..8f7f003e4 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,10 +1,19 @@ cmake_minimum_required(VERSION 2.8.7) + project(test) + enable_testing() + +set(googleTest_Dir ${CMAKE_CURRENT_SOURCE_DIR}/googletest) +if (EXISTS ${googleTest_Dir}) + SET(GTestSrc ${googleTest_Dir}/googletest) + SET(GMockSrc ${googleTest_Dir}/googlemock) +else () + message( FATAL_ERROR "No googletest src dir found!") +endif () +include_directories(${GTestSrc} ${GTestSrc}/include ${GMockSrc} ${GMockSrc}/include) include_directories(${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/include ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_HOME_DIRECTORY}/test) include_directories(${Boost_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIR}) -find_package(GTest REQUIRED) -include_directories(${GTEST_INCLUDE_DIRS}) set(test_SRCS StdInc.cpp @@ -27,8 +36,10 @@ set(test_HEADERS map/MapComparer.h ) -add_executable(vcmitest ${test_SRCS} ${test_HEADERS}) -target_link_libraries(vcmitest vcmi gtest ${RT_LIB} ${DL_LIB}) +add_subdirectory(googletest) + +add_executable(vcmitest ${test_SRCS} ${test_HEADERS} ${GTestSrc}/src/gtest-all.cc ${GMockSrc}/src/gmock-all.cc) +target_link_libraries(vcmitest vcmi ${RT_LIB} ${DL_LIB}) add_test(vcmitest vcmitest) vcmi_set_output_dir(vcmitest "") diff --git a/test/StdInc.h b/test/StdInc.h index 0ea466cd6..bd9a35c14 100644 --- a/test/StdInc.h +++ b/test/StdInc.h @@ -8,6 +8,6 @@ * */ #pragma once -#include -#include +#include "gtest/gtest.h" +#include "gmock/gmock.h" #include "Global.h" diff --git a/test/googletest b/test/googletest new file mode 160000 index 000000000..4bab34d20 --- /dev/null +++ b/test/googletest @@ -0,0 +1 @@ +Subproject commit 4bab34d2084259cba67f3bfb51217c10d606e175 From 587f59e93a904d6cadd7f787a7ecfe13e0deab5f Mon Sep 17 00:00:00 2001 From: FeniksFire Date: Tue, 18 Jul 2017 21:04:57 +0200 Subject: [PATCH 3/4] Migrating "CHealthTest" from boost to googlemock and googletest. --- test/CMakeLists.txt | 5 +- test/battle/CHealthTest.cpp | 219 ++++++++++++++++---------------- test/mock/mock_UnitHealthInfo.h | 22 ++++ 3 files changed, 137 insertions(+), 109 deletions(-) create mode 100644 test/mock/mock_UnitHealthInfo.h diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 8f7f003e4..a68b03c14 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -36,9 +36,12 @@ set(test_HEADERS map/MapComparer.h ) +set(mock_HEADERS + mock/mock_UnitHealthInfo.h +) add_subdirectory(googletest) -add_executable(vcmitest ${test_SRCS} ${test_HEADERS} ${GTestSrc}/src/gtest-all.cc ${GMockSrc}/src/gmock-all.cc) +add_executable(vcmitest ${test_SRCS} ${test_HEADERS} ${mock_HEADERS} ${GTestSrc}/src/gtest-all.cc ${GMockSrc}/src/gmock-all.cc) target_link_libraries(vcmitest vcmi ${RT_LIB} ${DL_LIB}) add_test(vcmitest vcmitest) diff --git a/test/battle/CHealthTest.cpp b/test/battle/CHealthTest.cpp index 14e0dff7f..9dc4fd81a 100644 --- a/test/battle/CHealthTest.cpp +++ b/test/battle/CHealthTest.cpp @@ -9,67 +9,58 @@ */ #include "StdInc.h" -#include +#include "mock/mock_UnitHealthInfo.h" #include "../../lib/CStack.h" +using namespace testing; + static const int32_t UNIT_HEALTH = 123; static const int32_t UNIT_AMOUNT = 300; -class CUnitHealthInfoMock : public IUnitHealthInfo +class HealthTest : public ::testing::Test { public: - CUnitHealthInfoMock(): - maxHealth(UNIT_HEALTH), - baseAmount(UNIT_AMOUNT), - health(this) - { - health.init(); + UnitHealthInfoMock mock; + HealthTest() : health(&mock){ + } - int32_t maxHealth; - int32_t baseAmount; - + void setDefaultExpectations() + { + EXPECT_CALL(mock, unitMaxHealth()).WillRepeatedly(Return(UNIT_HEALTH)); + EXPECT_CALL(mock, unitBaseAmount()).WillRepeatedly(Return(UNIT_AMOUNT)); + } CHealth health; - - int32_t unitMaxHealth() const override - { - return maxHealth; - }; - - int32_t unitBaseAmount() const override - { - return baseAmount; - }; }; -static void checkTotal(const CHealth & health, const CUnitHealthInfoMock & mock) +static void checkTotal(const CHealth & health, const UnitHealthInfoMock & mock) { - BOOST_CHECK_EQUAL(health.total(), mock.maxHealth * mock.baseAmount); + EXPECT_EQ(health.total(), mock.unitMaxHealth() * mock.unitBaseAmount()); } -static void checkEmptyHealth(const CHealth & health, const CUnitHealthInfoMock & mock) +static void checkEmptyHealth(const CHealth & health, const UnitHealthInfoMock & mock) { checkTotal(health, mock); - BOOST_CHECK_EQUAL(health.getCount(), 0); - BOOST_CHECK_EQUAL(health.getFirstHPleft(), 0); - BOOST_CHECK_EQUAL(health.getResurrected(), 0); - BOOST_CHECK_EQUAL(health.available(), 0); + EXPECT_EQ(health.getCount(), 0); + EXPECT_EQ(health.getFirstHPleft(), 0); + EXPECT_EQ(health.getResurrected(), 0); + EXPECT_EQ(health.available(), 0); } -static void checkFullHealth(const CHealth & health, const CUnitHealthInfoMock & mock) +static void checkFullHealth(const CHealth & health, const UnitHealthInfoMock & mock) { checkTotal(health, mock); - BOOST_CHECK_EQUAL(health.getCount(), mock.baseAmount); - BOOST_CHECK_EQUAL(health.getFirstHPleft(), mock.maxHealth); - BOOST_CHECK_EQUAL(health.getResurrected(), 0); - BOOST_CHECK_EQUAL(health.available(), mock.maxHealth * mock.baseAmount); + EXPECT_EQ(health.getCount(), mock.unitBaseAmount()); + EXPECT_EQ(health.getFirstHPleft(), mock.unitMaxHealth()); + EXPECT_EQ(health.getResurrected(), 0); + EXPECT_EQ(health.available(), mock.unitMaxHealth() * mock.unitBaseAmount()); } static void checkDamage(CHealth & health, const int32_t initialDamage, const int32_t expectedDamage) { int32_t damage = initialDamage; health.damage(damage); - BOOST_CHECK_EQUAL(damage, expectedDamage); + EXPECT_EQ(damage, expectedDamage); } static void checkNormalDamage(CHealth & health, const int32_t initialDamage) @@ -86,155 +77,167 @@ static void checkHeal(CHealth & health, EHealLevel level, EHealPower power, cons { int32_t heal = initialHeal; health.heal(heal, level, power); - BOOST_CHECK_EQUAL(heal, expectedHeal); + EXPECT_EQ(heal, expectedHeal); } -BOOST_AUTO_TEST_SUITE(CHealthTest_Suite) - -BOOST_AUTO_TEST_CASE(empty) +TEST_F(HealthTest, empty) { - CUnitHealthInfoMock uhi; - CHealth health(&uhi); - checkEmptyHealth(health, uhi); + setDefaultExpectations(); + + checkEmptyHealth(health, mock); health.init(); - checkFullHealth(health, uhi); + checkFullHealth(health, mock); health.reset(); - checkEmptyHealth(health, uhi); + checkEmptyHealth(health, mock); } -BOOST_FIXTURE_TEST_CASE(damage, CUnitHealthInfoMock) -{ - checkNormalDamage(health, 0); - checkFullHealth(health, *this); - checkNormalDamage(health, maxHealth - 1); - BOOST_CHECK_EQUAL(health.getCount(), UNIT_AMOUNT); - BOOST_CHECK_EQUAL(health.getFirstHPleft(), 1); - BOOST_CHECK_EQUAL(health.getResurrected(), 0); +TEST_F(HealthTest, damage) +{ + setDefaultExpectations(); + + health.init(); + + checkNormalDamage(health, 0); + checkFullHealth(health, mock); + + checkNormalDamage(health, mock.unitMaxHealth() - 1); + EXPECT_EQ(health.getCount(), UNIT_AMOUNT); + EXPECT_EQ(health.getFirstHPleft(), 1); + EXPECT_EQ(health.getResurrected(), 0); checkNormalDamage(health, 1); - BOOST_CHECK_EQUAL(health.getCount(), UNIT_AMOUNT - 1); - BOOST_CHECK_EQUAL(health.getFirstHPleft(), UNIT_HEALTH); - BOOST_CHECK_EQUAL(health.getResurrected(), 0); + EXPECT_EQ(health.getCount(), UNIT_AMOUNT - 1); + EXPECT_EQ(health.getFirstHPleft(), UNIT_HEALTH); + EXPECT_EQ(health.getResurrected(), 0); checkNormalDamage(health, UNIT_HEALTH * (UNIT_AMOUNT - 1)); - checkEmptyHealth(health, *this); + checkEmptyHealth(health, mock); checkNoDamage(health, 1337); - checkEmptyHealth(health, *this); + checkEmptyHealth(health, mock); } -BOOST_FIXTURE_TEST_CASE(heal, CUnitHealthInfoMock) +TEST_F(HealthTest, heal) { + setDefaultExpectations(); + + health.init(); + checkNormalDamage(health, 99); - BOOST_CHECK_EQUAL(health.getCount(), UNIT_AMOUNT); - BOOST_CHECK_EQUAL(health.getFirstHPleft(), UNIT_HEALTH-99); - BOOST_CHECK_EQUAL(health.getResurrected(), 0); + EXPECT_EQ(health.getCount(), UNIT_AMOUNT); + EXPECT_EQ(health.getFirstHPleft(), UNIT_HEALTH-99); + EXPECT_EQ(health.getResurrected(), 0); checkHeal(health, EHealLevel::HEAL, EHealPower::PERMANENT, 9, 9); - BOOST_CHECK_EQUAL(health.getCount(), UNIT_AMOUNT); - BOOST_CHECK_EQUAL(health.getFirstHPleft(), UNIT_HEALTH-90); - BOOST_CHECK_EQUAL(health.getResurrected(), 0); + EXPECT_EQ(health.getCount(), UNIT_AMOUNT); + EXPECT_EQ(health.getFirstHPleft(), UNIT_HEALTH-90); + EXPECT_EQ(health.getResurrected(), 0); checkHeal(health, EHealLevel::RESURRECT, EHealPower::ONE_BATTLE, 40, 40); - BOOST_CHECK_EQUAL(health.getCount(), UNIT_AMOUNT); - BOOST_CHECK_EQUAL(health.getFirstHPleft(), UNIT_HEALTH-50); - BOOST_CHECK_EQUAL(health.getResurrected(), 0); + EXPECT_EQ(health.getCount(), UNIT_AMOUNT); + EXPECT_EQ(health.getFirstHPleft(), UNIT_HEALTH-50); + EXPECT_EQ(health.getResurrected(), 0); checkHeal(health, EHealLevel::OVERHEAL, EHealPower::PERMANENT, 50, 50); - checkFullHealth(health, *this); + checkFullHealth(health, mock); } -BOOST_FIXTURE_TEST_CASE(resurrectOneBattle, CUnitHealthInfoMock) +TEST_F(HealthTest, resurrectOneBattle) { + setDefaultExpectations(); + health.init(); + checkNormalDamage(health, UNIT_HEALTH); - BOOST_CHECK_EQUAL(health.getCount(), UNIT_AMOUNT - 1); - BOOST_CHECK_EQUAL(health.getFirstHPleft(), UNIT_HEALTH); - BOOST_CHECK_EQUAL(health.getResurrected(), 0); + EXPECT_EQ(health.getCount(), UNIT_AMOUNT - 1); + EXPECT_EQ(health.getFirstHPleft(), UNIT_HEALTH); + EXPECT_EQ(health.getResurrected(), 0); checkHeal(health, EHealLevel::RESURRECT, EHealPower::ONE_BATTLE, UNIT_HEALTH, UNIT_HEALTH); - BOOST_CHECK_EQUAL(health.getCount(), UNIT_AMOUNT); - BOOST_CHECK_EQUAL(health.getFirstHPleft(), UNIT_HEALTH); - BOOST_CHECK_EQUAL(health.getResurrected(), 1); + EXPECT_EQ(health.getCount(), UNIT_AMOUNT); + EXPECT_EQ(health.getFirstHPleft(), UNIT_HEALTH); + EXPECT_EQ(health.getResurrected(), 1); checkNormalDamage(health, UNIT_HEALTH); - BOOST_CHECK_EQUAL(health.getCount(), UNIT_AMOUNT - 1); - BOOST_CHECK_EQUAL(health.getFirstHPleft(), UNIT_HEALTH); - BOOST_CHECK_EQUAL(health.getResurrected(), 0); + EXPECT_EQ(health.getCount(), UNIT_AMOUNT - 1); + EXPECT_EQ(health.getFirstHPleft(), UNIT_HEALTH); + EXPECT_EQ(health.getResurrected(), 0); health.init(); checkNormalDamage(health, UNIT_HEALTH); - BOOST_CHECK_EQUAL(health.getCount(), UNIT_AMOUNT - 1); - BOOST_CHECK_EQUAL(health.getFirstHPleft(), UNIT_HEALTH); - BOOST_CHECK_EQUAL(health.getResurrected(), 0); + EXPECT_EQ(health.getCount(), UNIT_AMOUNT - 1); + EXPECT_EQ(health.getFirstHPleft(), UNIT_HEALTH); + EXPECT_EQ(health.getResurrected(), 0); health.takeResurrected(); - BOOST_CHECK_EQUAL(health.getCount(), UNIT_AMOUNT - 1); - BOOST_CHECK_EQUAL(health.getFirstHPleft(), UNIT_HEALTH); - BOOST_CHECK_EQUAL(health.getResurrected(), 0); + EXPECT_EQ(health.getCount(), UNIT_AMOUNT - 1); + EXPECT_EQ(health.getFirstHPleft(), UNIT_HEALTH); + EXPECT_EQ(health.getResurrected(), 0); health.init(); checkNormalDamage(health, UNIT_HEALTH * UNIT_AMOUNT); - checkEmptyHealth(health, *this); + checkEmptyHealth(health, mock); checkHeal(health, EHealLevel::RESURRECT, EHealPower::ONE_BATTLE, UNIT_HEALTH * UNIT_AMOUNT, UNIT_HEALTH * UNIT_AMOUNT); - BOOST_CHECK_EQUAL(health.getCount(), UNIT_AMOUNT); - BOOST_CHECK_EQUAL(health.getFirstHPleft(), UNIT_HEALTH); - BOOST_CHECK_EQUAL(health.getResurrected(), UNIT_AMOUNT); + EXPECT_EQ(health.getCount(), UNIT_AMOUNT); + EXPECT_EQ(health.getFirstHPleft(), UNIT_HEALTH); + EXPECT_EQ(health.getResurrected(), UNIT_AMOUNT); health.takeResurrected(); - checkEmptyHealth(health, *this); + checkEmptyHealth(health, mock); } -BOOST_FIXTURE_TEST_CASE(resurrectPermanent, CUnitHealthInfoMock) +TEST_F(HealthTest, resurrectPermanent) { + setDefaultExpectations(); + health.init(); + checkNormalDamage(health, UNIT_HEALTH); - BOOST_CHECK_EQUAL(health.getCount(), UNIT_AMOUNT - 1); - BOOST_CHECK_EQUAL(health.getFirstHPleft(), UNIT_HEALTH); - BOOST_CHECK_EQUAL(health.getResurrected(), 0); + EXPECT_EQ(health.getCount(), UNIT_AMOUNT - 1); + EXPECT_EQ(health.getFirstHPleft(), UNIT_HEALTH); + EXPECT_EQ(health.getResurrected(), 0); checkHeal(health, EHealLevel::RESURRECT, EHealPower::PERMANENT, UNIT_HEALTH, UNIT_HEALTH); - BOOST_CHECK_EQUAL(health.getCount(), UNIT_AMOUNT); - BOOST_CHECK_EQUAL(health.getFirstHPleft(), UNIT_HEALTH); - BOOST_CHECK_EQUAL(health.getResurrected(), 0); + EXPECT_EQ(health.getCount(), UNIT_AMOUNT); + EXPECT_EQ(health.getFirstHPleft(), UNIT_HEALTH); + EXPECT_EQ(health.getResurrected(), 0); checkNormalDamage(health, UNIT_HEALTH); - BOOST_CHECK_EQUAL(health.getCount(), UNIT_AMOUNT - 1); - BOOST_CHECK_EQUAL(health.getFirstHPleft(), UNIT_HEALTH); - BOOST_CHECK_EQUAL(health.getResurrected(), 0); + EXPECT_EQ(health.getCount(), UNIT_AMOUNT - 1); + EXPECT_EQ(health.getFirstHPleft(), UNIT_HEALTH); + EXPECT_EQ(health.getResurrected(), 0); health.init(); checkNormalDamage(health, UNIT_HEALTH * UNIT_AMOUNT); - checkEmptyHealth(health, *this); + checkEmptyHealth(health, mock); checkHeal(health, EHealLevel::RESURRECT, EHealPower::PERMANENT, UNIT_HEALTH * UNIT_AMOUNT, UNIT_HEALTH * UNIT_AMOUNT); - checkFullHealth(health, *this); + checkFullHealth(health, mock); health.takeResurrected(); - checkFullHealth(health, *this); + checkFullHealth(health, mock); } -BOOST_FIXTURE_TEST_CASE(singleUnitStack, CUnitHealthInfoMock) +TEST_F(HealthTest, singleUnitStack) { //related to issue 2612 //one Titan - baseAmount = 1; - maxHealth = 300; + + EXPECT_CALL(mock, unitMaxHealth()).WillRepeatedly(Return(1)); + EXPECT_CALL(mock, unitBaseAmount()).WillRepeatedly(Return(300)); health.init(); checkDamage(health, 1000, 300); - checkEmptyHealth(health, *this); + checkEmptyHealth(health, mock); checkHeal(health, EHealLevel::RESURRECT, EHealPower::PERMANENT, 300, 300); - checkFullHealth(health, *this); + checkFullHealth(health, mock); } -BOOST_AUTO_TEST_SUITE_END() - diff --git a/test/mock/mock_UnitHealthInfo.h b/test/mock/mock_UnitHealthInfo.h new file mode 100644 index 000000000..240128d31 --- /dev/null +++ b/test/mock/mock_UnitHealthInfo.h @@ -0,0 +1,22 @@ +/* + * mock_UnitHealthInfo.h, part of VCMI engine + * + * Authors: listed in file AUTHORS in main folder + * + * License: GNU General Public License v2.0 or later + * Full text of license available in license.txt file, in main folder + * + */ + +#include "StdInc.h" +#include "../../lib/CStack.h" + +class UnitHealthInfoMock : public IUnitHealthInfo +{ +public: + MOCK_CONST_METHOD0(unitMaxHealth, int32_t()); + MOCK_CONST_METHOD0(unitBaseAmount, int32_t()); +}; + + + From d84ecb6fb25690f610f449676eb98110c70d7d77 Mon Sep 17 00:00:00 2001 From: FeniksFire Date: Tue, 18 Jul 2017 21:18:37 +0200 Subject: [PATCH 4/4] Tests improvement Delete our logger from tests. Make correction. --- .travis.yml | 2 +- test/CVcmiTestConfig.cpp | 4 ---- test/battle/CHealthTest.cpp | 9 ++++----- test/main.cpp | 3 ++- test/map/CMapEditManagerTest.cpp | 17 +++-------------- test/map/CMapFormatTest.cpp | 11 ----------- 6 files changed, 10 insertions(+), 36 deletions(-) diff --git a/.travis.yml b/.travis.yml index 068aa0c46..3a4668c26 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,7 +26,7 @@ matrix: compiler: gcc env: VCMI_PLATFORM='linux' REAL_CC=gcc-4.8 REAL_CXX=g++-4.8 PACKAGE=g++-4.8 SUPPORT= - os: linux - env: VCMI_PLATFORM='mxe' MXE_TARGET=i686-w64-mingw32.shared + env: VCMI_PLATFORM='mxe' MXE_TARGET=i686-w64-mingw32.shared VCMI_CMAKE_FLAGS='-DENABLE_TEST=0' sudo: required - os: osx env: VCMI_PLATFORM='mac' diff --git a/test/CVcmiTestConfig.cpp b/test/CVcmiTestConfig.cpp index bb22d4920..63a658200 100644 --- a/test/CVcmiTestConfig.cpp +++ b/test/CVcmiTestConfig.cpp @@ -24,13 +24,9 @@ CVcmiTestConfig::CVcmiTestConfig() { console = new CConsoleHandler(); - CBasicLogConfigurator logConfig(VCMIDirs::get().userCachePath() / "VCMI_Test_log.txt", console); - logConfig.configureDefault(); preinitDLL(console); settings.init(); - logConfig.configure(); loadDLLClasses(); - logGlobal->info("Initialized global test setup."); /* TEST_DATA_DIR may be wrong, if yes below test don't run, find your test data folder in your build and change TEST_DATA_DIR for it*/ diff --git a/test/battle/CHealthTest.cpp b/test/battle/CHealthTest.cpp index 9dc4fd81a..f0062291b 100644 --- a/test/battle/CHealthTest.cpp +++ b/test/battle/CHealthTest.cpp @@ -21,9 +21,8 @@ class HealthTest : public ::testing::Test { public: UnitHealthInfoMock mock; - HealthTest() : health(&mock){ - - } + HealthTest() : health(&mock) + {} void setDefaultExpectations() { @@ -229,8 +228,8 @@ TEST_F(HealthTest, singleUnitStack) //one Titan - EXPECT_CALL(mock, unitMaxHealth()).WillRepeatedly(Return(1)); - EXPECT_CALL(mock, unitBaseAmount()).WillRepeatedly(Return(300)); + EXPECT_CALL(mock, unitMaxHealth()).WillRepeatedly(Return(300)); + EXPECT_CALL(mock, unitBaseAmount()).WillRepeatedly(Return(1)); health.init(); diff --git a/test/main.cpp b/test/main.cpp index b1fe2f444..52b7c53ef 100644 --- a/test/main.cpp +++ b/test/main.cpp @@ -12,7 +12,8 @@ #include "CVcmiTestConfig.h" #include "../lib/filesystem/CMemoryBuffer.h" -int main(int argc, char ** argv){ +int main(int argc, char ** argv) +{ ::testing::InitGoogleTest(&argc, argv); CVcmiTestConfig test; return RUN_ALL_TESTS(); diff --git a/test/map/CMapEditManagerTest.cpp b/test/map/CMapEditManagerTest.cpp index 3bcff96f4..6583cd819 100644 --- a/test/map/CMapEditManagerTest.cpp +++ b/test/map/CMapEditManagerTest.cpp @@ -22,7 +22,6 @@ TEST(MapManager, DrawTerrain_Type) { - logGlobal->info("CMapEditManager_DrawTerrain_Type start"); try { auto map = make_unique(); @@ -102,23 +101,19 @@ TEST(MapManager, DrawTerrain_Type) } catch(const std::exception & e) { - logGlobal->error("CMapEditManager_DrawTerrain_Type crash"); - logGlobal->error(e.what()); + FAIL()<info("CMapEditManager_DrawTerrain_Type finish"); } TEST(MapManager, DrawTerrain_View) { - logGlobal->info("CMapEditManager_DrawTerrain_View start"); try { const ResourceID testMap("test/TerrainViewTest", EResType::MAP); // Load maps and json config const auto originalMap = CMapService::loadMap(testMap); auto map = CMapService::loadMap(testMap); - logGlobal->info("Loaded test map successfully."); // Validate edit manager auto editManager = map->getEditManager(); @@ -146,10 +141,6 @@ TEST(MapManager, DrawTerrain_View) const auto & posVector = posNode.Vector(); if(posVector.size() != 3) throw std::runtime_error("A position should consist of three values x,y,z. Continue with next position."); int3 pos(posVector[0].Float(), posVector[1].Float(), posVector[2].Float()); -#if 0 - logGlobal->trace("Test pattern '%s' on position x '%d', y '%d', z '%d'.", patternStr, pos.x, pos.y, pos.z); - CTerrainViewPatternUtils::printDebuggingInfoAboutTile(map.get(), pos); -#endif // 0 const auto & originalTile = originalMap->getTile(pos); editManager->getTerrainSelection().selectRange(MapRect(pos, 1, 1)); editManager->drawTerrain(originalTile.terType, &gen); @@ -165,15 +156,13 @@ TEST(MapManager, DrawTerrain_View) } EXPECT_TRUE(isInRange); if(!isInRange) - logGlobal->error("No or invalid pattern found for current position."); + FAIL()<<("No or invalid pattern found for current position."); } } } catch(const std::exception & e) { - logGlobal->info("CMapEditManager_DrawTerrain_View crash"); - logGlobal->info(e.what()); + FAIL()<info("CMapEditManager_DrawTerrain_View finish"); } diff --git a/test/map/CMapFormatTest.cpp b/test/map/CMapFormatTest.cpp index 5c186dde4..d889d2192 100644 --- a/test/map/CMapFormatTest.cpp +++ b/test/map/CMapFormatTest.cpp @@ -26,7 +26,6 @@ static const int TEST_RANDOM_SEED = 1337; TEST(MapFormat, Random) { - logGlobal->info("MapFormat_Random start"); SCOPED_TRACE("MapFormat_Random start"); std::unique_ptr initialMap; @@ -63,9 +62,6 @@ TEST(MapFormat, Random) tmp.write((const char *)serializeBuffer.getBuffer().data(),serializeBuffer.getSize()); tmp.flush(); tmp.close(); - - logGlobal->info("Test map has been saved to:"); - logGlobal->info(path.string()); } SCOPED_TRACE("MapFormat_Random saved"); #endif // 1 @@ -79,7 +75,6 @@ TEST(MapFormat, Random) c(serialized, initialMap); } SCOPED_TRACE("MapFormat_Random finish"); - logGlobal->info("MapFormat_Random finish"); } static JsonNode getFromArchive(CZipLoader & archive, const std::string & archiveFilename) @@ -114,8 +109,6 @@ static void addToArchive(CZipSaver & saver, const JsonNode & data, const std::st TEST(MapFormat, Objects) { - logGlobal->info("MapFormat_Objects start"); - static const std::string MAP_DATA_PATH = "test/ObjectPropertyTest/"; const JsonNode initialHeader(ResourceID(MAP_DATA_PATH+"header.json")); @@ -173,8 +166,6 @@ TEST(MapFormat, Objects) tmp.write((const char *)serializeBuffer.getBuffer().data(),serializeBuffer.getSize()); tmp.flush(); tmp.close(); - - logGlobal->infoStream() << "Test map has been saved to " << path; } { @@ -196,6 +187,4 @@ TEST(MapFormat, Objects) JsonMapComparer c; c.compareTerrain("underground", actualUnderground, expectedUnderground); } - - logGlobal->info("MapFormat_Objects finish"); }