TimedTest.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. /*
  2. * TimedTest.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/modding/ModScope.h"
  14. #include "../../../lib/json/JsonNode.h"
  15. namespace test
  16. {
  17. using namespace ::spells;
  18. using namespace ::spells::effects;
  19. using namespace ::testing;
  20. class TimedTest : public Test, public EffectFixture
  21. {
  22. public:
  23. TimedTest()
  24. : EffectFixture("core:timed")
  25. {
  26. }
  27. protected:
  28. void SetUp() override
  29. {
  30. EffectFixture::setUp();
  31. }
  32. };
  33. class TimedApplyTest : public TestWithParam<::testing::tuple<bool, bool>>, public EffectFixture
  34. {
  35. public:
  36. bool cumulative = false;
  37. bool firstCast = false;
  38. const int32_t spellIndex = 456;
  39. const int32_t duration = 57;
  40. TimedApplyTest()
  41. : EffectFixture("core:timed")
  42. {
  43. }
  44. void setDefaultExpectations()
  45. {
  46. unitsFake.setDefaultBonusExpectations();
  47. EXPECT_CALL(mechanicsMock, getSpellIndex()).WillRepeatedly(Return(spellIndex));
  48. EXPECT_CALL(mechanicsMock, getEffectDuration()).WillRepeatedly(Return(duration));
  49. EXPECT_CALL(serverMock, describeChanges()).WillRepeatedly(Return(false));
  50. }
  51. protected:
  52. void SetUp() override
  53. {
  54. EffectFixture::setUp();
  55. cumulative = get<0>(GetParam());
  56. firstCast = get<1>(GetParam());
  57. }
  58. };
  59. TEST_P(TimedApplyTest, DISABLED_ChangesBonuses)
  60. {
  61. Bonus testBonus1(BonusDuration::PERMANENT, BonusType::PRIMARY_SKILL, BonusSource::OTHER, 3, BonusSourceID(), BonusSubtypeID(PrimarySkill::KNOWLEDGE));
  62. Bonus testBonus2(BonusDuration::N_TURNS, BonusType::PRIMARY_SKILL, BonusSource::OTHER, 3, BonusSourceID(), BonusSubtypeID(PrimarySkill::KNOWLEDGE));
  63. testBonus2.turnsRemain = 4;
  64. JsonNode options;
  65. options["cumulative"].Bool() = cumulative;
  66. options["bonus"]["test1"] = testBonus1.toJsonNode();
  67. options["bonus"]["test2"] = testBonus2.toJsonNode();
  68. options.setModScope(ModScope::scopeBuiltin());
  69. setupEffect(options);
  70. const uint32_t unitId = 42;
  71. auto & targetUnit = unitsFake.add(BattleSide::ATTACKER);
  72. targetUnit.makeAlive();
  73. EXPECT_CALL(targetUnit, unitId()).WillRepeatedly(Return(unitId));
  74. EXPECT_CALL(targetUnit, creatureLevel()).WillRepeatedly(Return(1));
  75. EffectTarget target;
  76. target.emplace_back(&targetUnit, BattleHex());
  77. std::vector<Bonus> actualBonus;
  78. std::vector<Bonus> expectedBonus;
  79. testBonus1.turnsRemain = duration;
  80. expectedBonus.push_back(testBonus1);
  81. expectedBonus.push_back(testBonus2);
  82. for(auto & bonus : expectedBonus)
  83. {
  84. bonus.source = BonusSource::SPELL_EFFECT;
  85. bonus.sid = BonusSourceID(SpellID(spellIndex));
  86. }
  87. if(cumulative)
  88. {
  89. EXPECT_CALL(*battleFake, addUnitBonus(Eq(unitId),_)).WillOnce(SaveArg<1>(&actualBonus));
  90. }
  91. else
  92. {
  93. EXPECT_CALL(*battleFake, updateUnitBonus(Eq(unitId),_)).WillOnce(SaveArg<1>(&actualBonus));
  94. }
  95. setDefaultExpectations();
  96. EXPECT_CALL(serverMock, apply(Matcher<SetStackEffect &>(_))).Times(1);
  97. subject->apply(&serverMock, &mechanicsMock, target);
  98. EXPECT_THAT(actualBonus, UnorderedElementsAreArray(expectedBonus));
  99. }
  100. INSTANTIATE_TEST_SUITE_P
  101. (
  102. ByConfig,
  103. TimedApplyTest,
  104. Combine
  105. (
  106. Values(false, true),
  107. Values(false, true)
  108. )
  109. );
  110. }