EffectFixture.cpp 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  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. }
  42. EffectFixture::~EffectFixture() = default;
  43. void EffectFixture::setupEffect(const JsonNode & effectConfig)
  44. {
  45. subject = Effect::create(GlobalRegistry::get(), effectName);
  46. ASSERT_TRUE(subject);
  47. JsonDeserializer deser(nullptr, effectConfig);
  48. subject->serializeJson(deser);
  49. }
  50. void EffectFixture::setupEffect(Registry * registry, const JsonNode & effectConfig)
  51. {
  52. subject = Effect::create(registry, effectName);
  53. ASSERT_TRUE(subject);
  54. JsonDeserializer deser(nullptr, effectConfig);
  55. subject->serializeJson(deser);
  56. }
  57. void EffectFixture::setUp()
  58. {
  59. #if SCRIPTING_ENABLED
  60. pool = std::make_shared<PoolMock>();
  61. battleFake = std::make_shared<battle::BattleFake>(pool);
  62. #else
  63. battleFake = std::make_shared<battle::BattleFake>();
  64. #endif
  65. battleFake->setUp();
  66. EXPECT_CALL(mechanicsMock, game()).WillRepeatedly(Return(&gameMock));
  67. EXPECT_CALL(mechanicsMock, battle()).WillRepeatedly(Return(battleFake.get()));
  68. ON_CALL(*battleFake, getUnitsIf(_)).WillByDefault(Invoke(&unitsFake, &battle::UnitsFake::getUnitsIf));
  69. ON_CALL(mechanicsMock, spells()).WillByDefault(Return(&spellServiceMock));
  70. ON_CALL(spellServiceMock, getById(_)).WillByDefault(Return(&spellStub));
  71. ON_CALL(mechanicsMock, creatures()).WillByDefault(Return(&creatureServiceMock));
  72. ON_CALL(creatureServiceMock, getById(_)).WillByDefault(Return(&creatureStub));
  73. ON_CALL(serverMock, getRNG()).WillByDefault(Return(&rngMock));
  74. ON_CALL(serverMock, apply(Matcher<BattleLogMessage *>(_))).WillByDefault(Invoke(battleFake.get(), &battle::BattleFake::accept<BattleLogMessage>));
  75. ON_CALL(serverMock, apply(Matcher<BattleStackMoved *>(_))).WillByDefault(Invoke(battleFake.get(), &battle::BattleFake::accept<BattleStackMoved>));
  76. ON_CALL(serverMock, apply(Matcher<BattleUnitsChanged *>(_))).WillByDefault(Invoke(battleFake.get(), &battle::BattleFake::accept<BattleUnitsChanged>));
  77. ON_CALL(serverMock, apply(Matcher<SetStackEffect *>(_))).WillByDefault(Invoke(battleFake.get(), &battle::BattleFake::accept<SetStackEffect>));
  78. ON_CALL(serverMock, apply(Matcher<StacksInjured *>(_))).WillByDefault(Invoke(battleFake.get(), &battle::BattleFake::accept<StacksInjured>));
  79. ON_CALL(serverMock, apply(Matcher<BattleObstaclesChanged *>(_))).WillByDefault(Invoke(battleFake.get(), &battle::BattleFake::accept<BattleObstaclesChanged>));
  80. ON_CALL(serverMock, apply(Matcher<CatapultAttack *>(_))).WillByDefault(Invoke(battleFake.get(), &battle::BattleFake::accept<CatapultAttack>));
  81. }
  82. static vstd::TRandI64 getInt64RangeDef(int64_t lower, int64_t upper)
  83. {
  84. return [=]()->int64_t
  85. {
  86. return (lower + upper)/2;
  87. };
  88. }
  89. static vstd::TRand getDoubleRangeDef(double lower, double upper)
  90. {
  91. return [=]()->double
  92. {
  93. return (lower + upper)/2;
  94. };
  95. }
  96. void EffectFixture::setupDefaultRNG()
  97. {
  98. EXPECT_CALL(serverMock, getRNG()).Times(AtLeast(0));
  99. EXPECT_CALL(rngMock, getInt64Range(_,_)).WillRepeatedly(Invoke(&getInt64RangeDef));
  100. EXPECT_CALL(rngMock, getDoubleRange(_,_)).WillRepeatedly(Invoke(&getDoubleRangeDef));
  101. }
  102. }