diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile.am | 1 | ||||
-rw-r--r-- | src/actormanager.h | 2 | ||||
-rw-r--r-- | src/utils/chatutils_unittest.cc | 209 |
3 files changed, 212 insertions, 0 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index 2431c6b0f..5cd693930 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1762,6 +1762,7 @@ manaplustests_SOURCES = ${manaplus_SOURCES} \ resources/dye/dye_unittest.cc \ resources/dye/dyepalette_unittest.cc \ integrity_unittest.cc \ + utils/chatutils_unittest.cc \ gui/windowmanager_unittest.cc endif diff --git a/src/actormanager.h b/src/actormanager.h index 9c6672bbf..7ab4b1d67 100644 --- a/src/actormanager.h +++ b/src/actormanager.h @@ -385,7 +385,9 @@ class ActorManager final: public ConfigListener const std::string &name); #endif +#ifndef UNITTESTS protected: +#endif bool validateBeing(const Being *const aroundBeing, Being *const being, const ActorTypeT &type, diff --git a/src/utils/chatutils_unittest.cc b/src/utils/chatutils_unittest.cc new file mode 100644 index 000000000..31889b76c --- /dev/null +++ b/src/utils/chatutils_unittest.cc @@ -0,0 +1,209 @@ +/* + * The ManaPlus Client + * Copyright (C) 2012-2016 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * 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 2 of the License, or + * 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 "catch.hpp" + +#include "actormanager.h" +#include "party.h" + +#include "being/localplayer.h" + +#include "utils/chatutils.h" +#include "utils/delete2.h" + +#include "debug.h" + +TEST_CASE("chatutils replaceVars") +{ + localPlayer = new LocalPlayer(static_cast<BeingId>(1), + BeingTypeId_zero); + actorManager = new ActorManager; + std::string str; + + SECTION("empty") + { + replaceVars(str); + REQUIRE(str == ""); + + str = "test line"; + replaceVars(str); + REQUIRE(str == "test line"); + + str = "test <PLAYER>"; + replaceVars(str); + REQUIRE(str == "test "); + + str = "test <MONSTER>"; + replaceVars(str); + REQUIRE(str == "test "); + + str = "test <PEOPLE>"; + replaceVars(str); + REQUIRE(str == "test "); + + str = "test <PARTY>"; + replaceVars(str); + REQUIRE(str == "test "); + + str = "test <SOMETHING>"; + replaceVars(str); + REQUIRE(str == "test <SOMETHING>"); + + delete2(localPlayer); + } + + SECTION("player") + { + Being *player1 = new Being(static_cast<BeingId>(2), + ActorType::Player, + BeingTypeId_zero, + nullptr); + player1->setName("player1"); + actorManager->mActors.insert(player1); + + localPlayer->setTarget(player1); + str = "test <PLAYER>"; + replaceVars(str); + REQUIRE(str == "test player1"); + + delete2(localPlayer); + } + + SECTION("monster") + { + Being *monster = new Being(static_cast<BeingId>(3), + ActorType::Monster, + BeingTypeId_zero, + nullptr); + monster->setName("monster1"); + actorManager->mActors.insert(monster); + + localPlayer->setTarget(monster); + str = "test <MONSTER>"; + replaceVars(str); + REQUIRE(str == "test monster1"); + + delete2(localPlayer); + } + + SECTION("people") + { + actorManager->mActors.insert(localPlayer); + str = "test <PEOPLE>"; + replaceVars(str); + REQUIRE(str == "test "); + + Being *player1 = new Being(static_cast<BeingId>(2), + ActorType::Player, + BeingTypeId_zero, + nullptr); + player1->setName("player1"); + actorManager->mActors.insert(player1); + + str = "test <PEOPLE>"; + replaceVars(str); + REQUIRE(str == "test player1"); + + Being *player2 = new Being(static_cast<BeingId>(4), + ActorType::Player, + BeingTypeId_zero, + nullptr); + player2->setName("player2"); + actorManager->mActors.insert(player2); + + str = "test <PEOPLE>"; + replaceVars(str); + const bool correct = str == "test player1,player2" || + str == "test player2,player1"; + REQUIRE(correct == true); + } + + SECTION("party") + { + actorManager->mActors.insert(localPlayer); + + Party *party1 = Party::getParty(1); + localPlayer->setParty(party1); + + str = "test <PARTY>"; + replaceVars(str); + REQUIRE(str == "test "); + + Being *player1 = new Being(static_cast<BeingId>(2), + ActorType::Player, + BeingTypeId_zero, + nullptr); + player1->setName("player1"); + actorManager->mActors.insert(player1); + player1->setParty(party1); + + str = "test <PARTY>"; + replaceVars(str); + REQUIRE(str == "test player1"); + + Being *player2 = new Being(static_cast<BeingId>(4), + ActorType::Player, + BeingTypeId_zero, + nullptr); + player2->setName("player2"); + actorManager->mActors.insert(player2); + player2->setParty(party1); + + str = "test <PARTY>"; + replaceVars(str); + REQUIRE(str == "test player1,player2"); + + Party *party2 = Party::getParty(2); + + Being *player3 = new Being(static_cast<BeingId>(5), + ActorType::Player, + BeingTypeId_zero, + nullptr); + player3->setName("player3"); + actorManager->mActors.insert(player3); + player3->setParty(party2); + + str = "test <PARTY>"; + replaceVars(str); + REQUIRE(str == "test player1,player2"); + + player3->setParty(party1); + + str = "test <PARTY>"; + replaceVars(str); + REQUIRE(str == "test player1,player2,player3"); + + player2->setParty(party2); + + str = "test <PARTY>"; + replaceVars(str); + REQUIRE(str == "test player1,player3"); + } + + delete2(actorManager); +} + +TEST_CASE("chatutils textToMe") +{ + REQUIRE(textToMe("") == "**"); + REQUIRE(textToMe("123") == "*123*"); + REQUIRE(textToMe("*") == "***"); + REQUIRE(textToMe("test line") == "*test line*"); +} |