AbilityCasterTest.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /*
  2. * AbilityCasterTest.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_battle_Unit.h"
  12. #include "mock/mock_BonusBearer.h"
  13. #include "mock/mock_spells_Spell.h"
  14. #include "../../lib/NetPacksBase.h"
  15. #include "../../lib/spells/AbilityCaster.h"
  16. namespace test
  17. {
  18. using namespace ::spells;
  19. using namespace ::testing;
  20. class AbilityCasterTest : public Test
  21. {
  22. public:
  23. std::shared_ptr<AbilityCaster> subject;
  24. StrictMock<UnitMock> actualCaster;
  25. BonusBearerMock casterBonuses;
  26. StrictMock<SpellMock> spellMock;
  27. protected:
  28. void SetUp() override
  29. {
  30. ON_CALL(actualCaster, getAllBonuses(_, _, _, _)).WillByDefault(Invoke(&casterBonuses, &BonusBearerMock::getAllBonuses));
  31. ON_CALL(actualCaster, getTreeVersion()).WillByDefault(Invoke(&casterBonuses, &BonusBearerMock::getTreeVersion));
  32. }
  33. void setupSubject(int skillLevel)
  34. {
  35. subject = std::make_shared<AbilityCaster>(&actualCaster, skillLevel);
  36. }
  37. };
  38. TEST_F(AbilityCasterTest, NonMagicAbilityIgnoresBonuses)
  39. {
  40. EXPECT_CALL(spellMock, getLevel()).WillRepeatedly(Return(0));
  41. setupSubject(1);
  42. EXPECT_EQ(subject->getSpellSchoolLevel(&spellMock), 1);
  43. }
  44. TEST_F(AbilityCasterTest, MagicAbilityAffectedByGenericBonus)
  45. {
  46. EXPECT_CALL(spellMock, getLevel()).WillRepeatedly(Return(1));
  47. casterBonuses.addNewBonus(std::make_shared<Bonus>(BonusDuration::ONE_BATTLE, BonusType::MAGIC_SCHOOL_SKILL, BonusSource::OTHER, 2, 0, SpellSchool(ESpellSchool::ANY)));
  48. EXPECT_CALL(actualCaster, getAllBonuses(_, _, _, _)).Times(AtLeast(1));
  49. EXPECT_CALL(actualCaster, getTreeVersion()).Times(AtLeast(0));
  50. setupSubject(1);
  51. EXPECT_EQ(subject->getSpellSchoolLevel(&spellMock), 2);
  52. }
  53. TEST_F(AbilityCasterTest, MagicAbilityIngoresSchoolBonus)
  54. {
  55. EXPECT_CALL(spellMock, getLevel()).WillRepeatedly(Return(1));
  56. casterBonuses.addNewBonus(std::make_shared<Bonus>(BonusDuration::ONE_BATTLE, BonusType::MAGIC_SCHOOL_SKILL, BonusSource::OTHER, 2, 0, SpellSchool(ESpellSchool::AIR)));
  57. EXPECT_CALL(actualCaster, getAllBonuses(_, _, _, _)).Times(AtLeast(1));
  58. EXPECT_CALL(actualCaster, getTreeVersion()).Times(AtLeast(0));
  59. setupSubject(1);
  60. EXPECT_EQ(subject->getSpellSchoolLevel(&spellMock), 1);
  61. }
  62. }