EffectFixture.cpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. /*
  2. * EffectFixture.cpp, part of VCMI engine
  3. *
  4. * Authors: listed in file AUTHORS in main folder
  5. *
  6. * License: GNU General Public License v2.0 or later
  7. * Full text of license available in license.txt file, in main folder
  8. *
  9. */
  10. #include "StdInc.h"
  11. #include "EffectFixture.h"
  12. #include <vstd/RNG.h>
  13. #include "../../../lib/networkPacks/PacksForClientBattle.h"
  14. #include "../../../lib/networkPacks/SetStackEffect.h"
  15. #include "../../../lib/serializer/JsonDeserializer.h"
  16. bool battle::operator==(const Destination& left, const Destination& right)
  17. {
  18. return left.unitValue == right.unitValue && left.hexValue == right.hexValue;
  19. }
  20. bool operator==(const Bonus & b1, const Bonus & b2)
  21. {
  22. return b1.duration == b2.duration
  23. && b1.type == b2.type
  24. && b1.subtype == b2.subtype
  25. && b1.source == b2.source
  26. && b1.val == b2.val
  27. && b1.sid == b2.sid
  28. && b1.valType == b2.valType
  29. && b1.additionalInfo == b2.additionalInfo
  30. && b1.effectRange == b2.effectRange;
  31. }
  32. namespace test
  33. {
  34. EffectFixture::EffectFixture(std::string effectName_)
  35. :subject(),
  36. problemMock(),
  37. mechanicsMock(),
  38. battleFake(),
  39. effectName(effectName_)
  40. {
  41. mechanicsMock.casterSide = BattleSide::ATTACKER;
  42. }
  43. EffectFixture::~EffectFixture() = default;
  44. void EffectFixture::setupEffect(const JsonNode & effectConfig)
  45. {
  46. subject = Effect::create(GlobalRegistry::get(), effectName);
  47. ASSERT_TRUE(subject);
  48. JsonNode effectConfigActual = effectConfig;
  49. effectConfigActual.setModScope("game");
  50. JsonDeserializer deser(nullptr, effectConfigActual);
  51. subject->serializeJson(deser);
  52. }
  53. void EffectFixture::setupEffect(Registry * registry, const JsonNode & effectConfig)
  54. {
  55. subject = Effect::create(registry, effectName);
  56. ASSERT_TRUE(subject);
  57. JsonNode effectConfigActual = effectConfig;
  58. effectConfigActual.setModScope("game");
  59. JsonDeserializer deser(nullptr, effectConfigActual);
  60. subject->serializeJson(deser);
  61. }
  62. void EffectFixture::setUp()
  63. {
  64. #if SCRIPTING_ENABLED
  65. pool = std::make_shared<PoolMock>();
  66. battleFake = std::make_shared<battle::BattleFake>(pool);
  67. #else
  68. battleFake = std::make_shared<battle::BattleFake>();
  69. #endif
  70. battleFake->setUp();
  71. EXPECT_CALL(mechanicsMock, game()).WillRepeatedly(Return(&gameMock));
  72. EXPECT_CALL(mechanicsMock, battle()).WillRepeatedly(Return(battleFake.get()));
  73. ON_CALL(*battleFake, getUnitsIf(_)).WillByDefault(Invoke(&unitsFake, &battle::UnitsFake::getUnitsIf));
  74. ON_CALL(mechanicsMock, spells()).WillByDefault(Return(&spellServiceMock));
  75. ON_CALL(spellServiceMock, getById(_)).WillByDefault(Return(&spellStub));
  76. ON_CALL(mechanicsMock, creatures()).WillByDefault(Return(&creatureServiceMock));
  77. ON_CALL(creatureServiceMock, getById(_)).WillByDefault(Return(&creatureStub));
  78. ON_CALL(creatureServiceMock, getByIndex(_)).WillByDefault(Return(&creatureStub));
  79. ON_CALL(serverMock, getRNG()).WillByDefault(Return(&rngMock));
  80. ON_CALL(serverMock, apply(Matcher<BattleLogMessage &>(_))).WillByDefault(Invoke(battleFake.get(), &battle::BattleFake::accept<BattleLogMessage>));
  81. ON_CALL(serverMock, apply(Matcher<BattleStackMoved &>(_))).WillByDefault(Invoke(battleFake.get(), &battle::BattleFake::accept<BattleStackMoved>));
  82. ON_CALL(serverMock, apply(Matcher<BattleUnitsChanged &>(_))).WillByDefault(Invoke(battleFake.get(), &battle::BattleFake::accept<BattleUnitsChanged>));
  83. ON_CALL(serverMock, apply(Matcher<SetStackEffect &>(_))).WillByDefault(Invoke(battleFake.get(), &battle::BattleFake::accept<SetStackEffect>));
  84. ON_CALL(serverMock, apply(Matcher<StacksInjured &>(_))).WillByDefault(Invoke(battleFake.get(), &battle::BattleFake::accept<StacksInjured>));
  85. ON_CALL(serverMock, apply(Matcher<BattleObstaclesChanged &>(_))).WillByDefault(Invoke(battleFake.get(), &battle::BattleFake::accept<BattleObstaclesChanged>));
  86. ON_CALL(serverMock, apply(Matcher<CatapultAttack &>(_))).WillByDefault(Invoke(battleFake.get(), &battle::BattleFake::accept<CatapultAttack>));
  87. }
  88. static int64_t getInt64Range(int64_t lower, int64_t upper)
  89. {
  90. return (lower + upper)/2;
  91. }
  92. static double getDoubleRange(double lower, double upper)
  93. {
  94. return (lower + upper)/2;
  95. }
  96. void EffectFixture::setupDefaultRNG()
  97. {
  98. EXPECT_CALL(serverMock, getRNG()).Times(AtLeast(0));
  99. EXPECT_CALL(rngMock, nextInt64(_,_)).WillRepeatedly(Invoke(&getInt64Range));
  100. EXPECT_CALL(rngMock, nextDouble(_,_)).WillRepeatedly(Invoke(&getDoubleRange));
  101. }
  102. }