TimedTest.cpp 3.2 KB

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