123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315 |
- /*
- * ERM_BU.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 "../scripting/ScriptFixture.h"
- #include "../../lib/NetPacks.h"
- namespace test
- {
- namespace scripting
- {
- using namespace ::testing;
- class ERM_BU : public Test, public ScriptFixture
- {
- protected:
- void SetUp() override
- {
- ScriptFixture::setUp();
- }
- };
- class ERM_BU_C : public ERM_BU
- {
- protected:
- void doTest(std::optional<int> input, double output)
- {
- EXPECT_CALL(binfoMock, battleIsFinished()).WillOnce(Return(input));
- std::stringstream source;
- source << "VERM" << std::endl;
- source << "!?PI;" << std::endl;
- source << "!!BU:C?v851;" << std::endl;
- JsonNode actualState = runScript(VLC->scriptHandler->erm, source.str());
- SCOPED_TRACE("\n" + subject->code);
- EXPECT_EQ(actualState["ERM"]["v"]["851"], JsonUtils::floatNode(output)) << actualState.toJson(true);
- }
- };
- TEST_F(ERM_BU_C, Finished)
- {
- doTest(std::make_optional(1), 1);
- }
- TEST_F(ERM_BU_C, NotFinished)
- {
- doTest(std::nullopt, 0);
- }
- class ERM_BU_D : public ERM_BU
- {
- protected:
- void doTest(double output)
- {
- std::stringstream source;
- source << "VERM" << std::endl;
- source << "!?PI;" << std::endl;
- source << "!!BU:D75/?v1;" << std::endl;
- JsonNode actualState = runScript(VLC->scriptHandler->erm, source.str());
- SCOPED_TRACE("\n" + subject->code);
- EXPECT_EQ(actualState["ERM"]["v"]["1"], JsonUtils::floatNode(output)) << actualState.toJson(true);
- }
- };
- TEST_F(ERM_BU_D, EmptyField)
- {
- EXPECT_CALL(binfoMock, battleGetUnitByPos(_,_)).WillOnce(Return(nullptr));
- doTest(-1);
- }
- TEST_F(ERM_BU_D, Alive)
- {
- auto & unit = unitsFake.add(BattleSide::ATTACKER);
- EXPECT_CALL(binfoMock, battleGetUnitByPos(Eq(BattleHex(75)), Eq(false))).WillOnce(Return(&unit));
- EXPECT_CALL(unit, alive()).WillOnce(Return(true));
- doTest(-2);
- }
- TEST_F(ERM_BU_D, Dead)
- {
- auto & unit = unitsFake.add(BattleSide::ATTACKER);
- EXPECT_CALL(binfoMock, battleGetUnitByPos(Eq(BattleHex(75)), Eq(false))).WillOnce(Return(&unit));
- EXPECT_CALL(unit, alive()).WillOnce(Return(false));
- EXPECT_CALL(unit, unitId()).WillOnce(Return(47));
- doTest(47);
- }
- class ERM_BU_E : public ERM_BU
- {
- protected:
- void doTest(double output)
- {
- std::stringstream source;
- source << "VERM" << std::endl;
- source << "!?PI;" << std::endl;
- source << "!!BU:E75/?v1;" << std::endl;
- JsonNode actualState = runScript(VLC->scriptHandler->erm, source.str());
- SCOPED_TRACE("\n" + subject->code);
- EXPECT_EQ(actualState["ERM"]["v"]["1"], JsonUtils::floatNode(output)) << actualState.toJson(true);
- }
- };
- TEST_F(ERM_BU_E, EmptyField)
- {
- EXPECT_CALL(binfoMock, battleGetUnitByPos(_,_)).WillOnce(Return(nullptr));
- doTest(-1);
- }
- TEST_F(ERM_BU_E, Alive)
- {
- auto & unit = unitsFake.add(BattleSide::ATTACKER);
- EXPECT_CALL(binfoMock, battleGetUnitByPos(Eq(BattleHex(75)), Eq(false))).WillOnce(Return(&unit));
- EXPECT_CALL(unit, alive()).WillOnce(Return(true));
- EXPECT_CALL(unit, unitId()).WillOnce(Return(47));
- doTest(47);
- }
- TEST_F(ERM_BU_E, Dead)
- {
- auto & unit = unitsFake.add(BattleSide::ATTACKER);
- EXPECT_CALL(binfoMock, battleGetUnitByPos(Eq(BattleHex(75)), Eq(false))).WillOnce(Return(&unit));
- EXPECT_CALL(unit, alive()).WillOnce(Return(false));
- doTest(-1);
- }
- class ERM_BU_G : public ERM_BU
- {
- };
- TEST_F(ERM_BU_G, Get)
- {
- std::stringstream source;
- source << "VERM" << std::endl;
- source << "!?PI;" << std::endl;
- source << "!!BU:G?v1;" << std::endl;
- EXPECT_CALL(binfoMock, battleGetBattlefieldType()).WillOnce(Return(BattleField::fromString("snow_trees")));
- loadScript(VLC->scriptHandler->erm, source.str());
- runServer();
- JsonNode actualState = context->saveState();
- EXPECT_EQ(actualState["ERM"]["v"]["1"], JsonUtils::floatNode(-1)) << actualState.toJson(true);
- }
- TEST_F(ERM_BU_G, Get2)
- {
- const int EXPECTED_ERM_FOG_CODE = 4;
- std::stringstream source;
- source << "VERM" << std::endl;
- source << "!?PI;" << std::endl;
- source << "!!BU:G?v1;" << std::endl;
- EXPECT_CALL(binfoMock, battleGetBattlefieldType()).WillOnce(Return(BattleField::fromString("evil_fog")));
- loadScript(VLC->scriptHandler->erm, source.str());
- runServer();
- JsonNode actualState = context->saveState();
- EXPECT_EQ(actualState["ERM"]["v"]["1"], JsonUtils::floatNode(EXPECTED_ERM_FOG_CODE)) << actualState.toJson(true);
- }
- //TODO: ERM_BU_G Set
- class ERM_BU_M : public ERM_BU
- {
- };
- TEST_F(ERM_BU_M, Simple)
- {
- std::stringstream source;
- source << "VERM" << std::endl;
- source << "!?PI;" << std::endl;
- source << "!!BU:M^Test 1^;" << std::endl;
- auto checkApply = [&](BattleLogMessage * pack)
- {
- EXPECT_EQ(pack->lines.size(), 1);
- if(!pack->lines.empty())
- {
- EXPECT_EQ(pack->lines[0].toString(), "Test 1");
- }
- };
- EXPECT_CALL(serverMock, apply(Matcher<BattleLogMessage *>(_))).WillOnce(Invoke(checkApply));
- loadScript(VLC->scriptHandler->erm, source.str());
- runServer();
- }
- class ERM_BU_O : public ERM_BU
- {
- };
- class ERM_BU_R : public ERM_BU
- {
- };
- class ERM_BU_S : public ERM_BU
- {
- };
- TEST_F(ERM_BU_S, Summon)
- {
- const uint32_t UNIT_ID = 42;
- std::stringstream source;
- source << "VERM" << std::endl;
- source << "!?PI;" << std::endl;
- source << "!!BU:S^core:angel^/10/59/0/-1/0;" << std::endl;
- loadScript(VLC->scriptHandler->erm, source.str());
- auto checkApply = [&](BattleUnitsChanged * pack)
- {
- EXPECT_EQ(pack->changedStacks.size(), 1);
- if(!pack->changedStacks.empty())
- {
- UnitChanges & unit = pack->changedStacks.front();
- EXPECT_EQ(unit.id, UNIT_ID);
- EXPECT_EQ(unit.operation, BattleChanges::EOperation::ADD);
- JsonNode expected;
- expected["newUnitInfo"]["count"].Float() = 10;
- expected["newUnitInfo"]["type"].String() = "core:angel";
- expected["newUnitInfo"]["side"].Float() = 0;
- expected["newUnitInfo"]["position"].Float() = 59;
- expected["newUnitInfo"]["summoned"].Bool() = true;
- JsonComparer c(false);
- c.compare("newUnitInfo", unit.data, expected);
- }
- };
- EXPECT_CALL(binfoMock, battleNextUnitId()).WillOnce(Return(UNIT_ID));
- EXPECT_CALL(serverMock, apply(Matcher<BattleUnitsChanged *>(_))).WillOnce(Invoke(checkApply));
- runServer();
- }
- class ERM_BU_T : public ERM_BU
- {
- };
- TEST_F(ERM_BU_T, NoTactics)
- {
- std::stringstream source;
- source << "VERM" << std::endl;
- source << "!?PI;" << std::endl;
- source << "!!BU:T?v2;" << std::endl;
- loadScript(VLC->scriptHandler->erm, source.str());
- EXPECT_CALL(binfoMock, battleTacticDist()).WillOnce(Return(0));
- JsonNode actualState = runClientServer();
- EXPECT_EQ(actualState["ERM"]["v"]["2"], JsonUtils::floatNode(0)) << actualState.toJson(true);
- }
- TEST_F(ERM_BU_T, Tactics)
- {
- std::stringstream source;
- source << "VERM" << std::endl;
- source << "!?PI;" << std::endl;
- source << "!!BU:T?v2;" << std::endl;
- loadScript(VLC->scriptHandler->erm, source.str());
- EXPECT_CALL(binfoMock, battleTacticDist()).WillOnce(Return(4));
- JsonNode actualState = runClientServer();
- EXPECT_EQ(actualState["ERM"]["v"]["2"], JsonUtils::floatNode(1)) << actualState.toJson(true);
- }
- class ERM_BU_V : public ERM_BU
- {
- };
- }
- }
|