CUnitStateMagicTest.cpp 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. /*
  2. * CUnitStateMagicTest.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 "mock/mock_BonusBearer.h"
  12. #include "mock/mock_spells_Spell.h"
  13. #include "mock/mock_UnitInfo.h"
  14. #include "mock/mock_UnitEnvironment.h"
  15. #include "../../lib/battle/CUnitState.h"
  16. #include "../../lib/CCreatureHandler.h"
  17. class UnitStateMagicTest : public ::testing::Test
  18. {
  19. public:
  20. UnitInfoMock infoMock;
  21. UnitEnvironmentMock envMock;
  22. BonusBearerMock bonusMock;
  23. ::testing::StrictMock<spells::SpellMock> spellMock;
  24. battle::CUnitStateDetached subject;
  25. const int32_t DEFAULT_AMOUNT = 100;
  26. const int32_t DEFAULT_SPELL_INDEX = 42000000; //could be anything but should be far out of spellhandler bounds
  27. const int32_t DEFAULT_SCHOOL_LEVEL = 2;
  28. UnitStateMagicTest()
  29. :infoMock(),
  30. envMock(),
  31. bonusMock(),
  32. spellMock(),
  33. subject(&infoMock, &bonusMock)
  34. {
  35. }
  36. void setDefaultExpectations()
  37. {
  38. using namespace testing;
  39. EXPECT_CALL(infoMock, unitBaseAmount()).WillRepeatedly(Return(DEFAULT_AMOUNT));
  40. EXPECT_CALL(spellMock, getIndex()).WillRepeatedly(Return(DEFAULT_SPELL_INDEX));
  41. }
  42. void initUnit()
  43. {
  44. subject.localInit(&envMock);
  45. }
  46. void makeNormalCaster()
  47. {
  48. bonusMock.addNewBonus(std::make_shared<Bonus>(BonusDuration::PERMANENT, BonusType::SPELLCASTER, BonusSource::CREATURE_ABILITY, DEFAULT_SCHOOL_LEVEL, BonusSourceID(), BonusSubtypeID(SpellID(DEFAULT_SPELL_INDEX))));
  49. }
  50. };
  51. TEST_F(UnitStateMagicTest, initialNormal)
  52. {
  53. setDefaultExpectations();
  54. bonusMock.addNewBonus(std::make_shared<Bonus>(BonusDuration::PERMANENT, BonusType::CASTS, BonusSource::CREATURE_ABILITY, 567, BonusSourceID()));
  55. initUnit();
  56. EXPECT_TRUE(subject.canCast());
  57. EXPECT_TRUE(subject.isCaster());
  58. EXPECT_EQ(subject.casts.total(), 567);
  59. EXPECT_EQ(subject.casts.available(), 567);
  60. }
  61. TEST_F(UnitStateMagicTest, DISABLED_schoolLevelByDefault)
  62. {
  63. setDefaultExpectations();
  64. initUnit();
  65. EXPECT_EQ(subject.getSpellSchoolLevel(&spellMock, nullptr), 0);
  66. }
  67. TEST_F(UnitStateMagicTest, DISABLED_schoolLevelForNormalCaster)
  68. {
  69. setDefaultExpectations();
  70. initUnit();
  71. makeNormalCaster();
  72. EXPECT_EQ(subject.getSpellSchoolLevel(&spellMock, nullptr), DEFAULT_SCHOOL_LEVEL);
  73. }
  74. TEST_F(UnitStateMagicTest, DISABLED_effectLevelForNormalCaster)
  75. {
  76. setDefaultExpectations();
  77. initUnit();
  78. makeNormalCaster();
  79. EXPECT_EQ(subject.getEffectLevel(&spellMock), DEFAULT_SCHOOL_LEVEL);
  80. }
  81. TEST_F(UnitStateMagicTest, spellBonus)
  82. {
  83. setDefaultExpectations();
  84. initUnit();
  85. makeNormalCaster();
  86. EXPECT_EQ(subject.getSpellBonus(&spellMock, 12345, &subject), 12345);
  87. }
  88. TEST_F(UnitStateMagicTest, specificSpellBonus)
  89. {
  90. setDefaultExpectations();
  91. initUnit();
  92. makeNormalCaster();
  93. EXPECT_EQ(subject.getSpecificSpellBonus(&spellMock, 12345), 12345);
  94. }
  95. TEST_F(UnitStateMagicTest, effectPower)
  96. {
  97. setDefaultExpectations();
  98. initUnit();
  99. const int32_t EFFECT_POWER = 12 * 100;
  100. bonusMock.addNewBonus(std::make_shared<Bonus>(BonusDuration::PERMANENT, BonusType::CREATURE_SPELL_POWER, BonusSource::CREATURE_ABILITY, EFFECT_POWER, BonusSourceID()));
  101. makeNormalCaster();
  102. EXPECT_EQ(subject.getEffectPower(&spellMock), 12 * DEFAULT_AMOUNT);
  103. }
  104. TEST_F(UnitStateMagicTest, enchantPowerByDefault)
  105. {
  106. setDefaultExpectations();
  107. initUnit();
  108. makeNormalCaster();
  109. EXPECT_EQ(subject.getEnchantPower(&spellMock), 3);
  110. }
  111. TEST_F(UnitStateMagicTest, enchantPower)
  112. {
  113. setDefaultExpectations();
  114. initUnit();
  115. const int32_t ENCHANT_POWER = 42;
  116. bonusMock.addNewBonus(std::make_shared<Bonus>(BonusDuration::PERMANENT, BonusType::CREATURE_ENCHANT_POWER, BonusSource::CREATURE_ABILITY, ENCHANT_POWER, BonusSourceID()));
  117. makeNormalCaster();
  118. EXPECT_EQ(subject.getEnchantPower(&spellMock), ENCHANT_POWER);
  119. }
  120. TEST_F(UnitStateMagicTest, DISABLED_effectValueByDefault)
  121. {
  122. setDefaultExpectations();
  123. initUnit();
  124. makeNormalCaster();
  125. EXPECT_EQ(subject.getEffectValue(&spellMock), 0);
  126. }
  127. TEST_F(UnitStateMagicTest, DISABLED_effectValue)
  128. {
  129. setDefaultExpectations();
  130. initUnit();
  131. const int32_t EFFECT_VALUE = 456;
  132. bonusMock.addNewBonus(std::make_shared<Bonus>(BonusDuration::PERMANENT, BonusType::SPECIFIC_SPELL_POWER, BonusSource::CREATURE_ABILITY, EFFECT_VALUE, BonusSourceID(), BonusSubtypeID(SpellID(DEFAULT_SPELL_INDEX))));
  133. makeNormalCaster();
  134. EXPECT_EQ(subject.getEffectValue(&spellMock), EFFECT_VALUE * DEFAULT_AMOUNT);
  135. }
  136. TEST_F(UnitStateMagicTest, getOwner)
  137. {
  138. using namespace testing;
  139. setDefaultExpectations();
  140. initUnit();
  141. PlayerColor player(123);
  142. PlayerColor otherPlayer(124);
  143. EXPECT_CALL(infoMock, unitOwner()).WillRepeatedly(Return(player));
  144. ON_CALL(envMock, unitEffectiveOwner(Eq(&subject))).WillByDefault(Return(otherPlayer));
  145. EXPECT_CALL(envMock, unitEffectiveOwner(_));
  146. EXPECT_EQ(subject.getCasterOwner(), otherPlayer);
  147. }
  148. TEST_F(UnitStateMagicTest, spendMana)
  149. {
  150. setDefaultExpectations();
  151. bonusMock.addNewBonus(std::make_shared<Bonus>(BonusDuration::PERMANENT, BonusType::CASTS, BonusSource::CREATURE_ABILITY, 1, BonusSourceID()));
  152. initUnit();
  153. EXPECT_TRUE(subject.canCast());
  154. subject.spendMana(nullptr, 1);
  155. EXPECT_FALSE(subject.canCast());
  156. }
  157. //TODO:getCasterName
  158. //TODO:getCastDescription
  159. //TODO:spendMana