AbsoluteLevelConditionTest.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. /*
  2. * AbsoluteLevelConditionTest.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 "TargetConditionItemFixture.h"
  12. namespace test
  13. {
  14. using namespace ::spells;
  15. using namespace ::testing;
  16. class AbsoluteLevelConditionTest : public TargetConditionItemTest
  17. {
  18. public:
  19. void setDefaultExpectations()
  20. {
  21. EXPECT_CALL(mechanicsMock, isMagicalEffect()).WillRepeatedly(Return(true));
  22. EXPECT_CALL(unitMock, getAllBonuses(_, _, _)).Times(AtLeast(1));
  23. EXPECT_CALL(unitMock, getTreeVersion()).Times(AtLeast(0));
  24. }
  25. void SetUp() override
  26. {
  27. TargetConditionItemTest::SetUp();
  28. subject = TargetConditionItemFactory::getDefault()->createAbsoluteLevel();
  29. }
  30. };
  31. TEST_F(AbsoluteLevelConditionTest, DefaultForAbility)
  32. {
  33. setDefaultExpectations();
  34. EXPECT_CALL(mechanicsMock, getSpellLevel()).WillRepeatedly(Return(0));
  35. EXPECT_TRUE(subject->isReceptive(&mechanicsMock, &unitMock));
  36. }
  37. TEST_F(AbsoluteLevelConditionTest, DefaultForNormalSpell)
  38. {
  39. setDefaultExpectations();
  40. EXPECT_CALL(mechanicsMock, getSpellLevel()).WillRepeatedly(Return(1));
  41. EXPECT_TRUE(subject->isReceptive(&mechanicsMock, &unitMock));
  42. }
  43. TEST_F(AbsoluteLevelConditionTest, ReceptiveNormalSpell)
  44. {
  45. setDefaultExpectations();
  46. auto bonus = std::make_shared<Bonus>(BonusDuration::ONE_BATTLE, BonusType::LEVEL_SPELL_IMMUNITY, BonusSource::OTHER, 3, BonusSourceID());
  47. bonus->additionalInfo = 1;
  48. unitBonuses.addNewBonus(bonus);
  49. EXPECT_CALL(mechanicsMock, getSpellLevel()).Times(AtLeast(1)).WillRepeatedly(Return(4));
  50. EXPECT_TRUE(subject->isReceptive(&mechanicsMock, &unitMock));
  51. }
  52. //this tests covers fact that creature abilities ignored (by spell level == 0)
  53. TEST_F(AbsoluteLevelConditionTest, ReceptiveAbility)
  54. {
  55. setDefaultExpectations();
  56. auto bonus = std::make_shared<Bonus>(BonusDuration::ONE_BATTLE, BonusType::LEVEL_SPELL_IMMUNITY, BonusSource::OTHER, 5, BonusSourceID());
  57. bonus->additionalInfo = 1;
  58. unitBonuses.addNewBonus(bonus);
  59. EXPECT_CALL(mechanicsMock, getSpellLevel()).Times(AtLeast(1)).WillRepeatedly(Return(0));
  60. EXPECT_TRUE(subject->isReceptive(&mechanicsMock, &unitMock));
  61. }
  62. TEST_F(AbsoluteLevelConditionTest, ImmuneNormalSpell)
  63. {
  64. setDefaultExpectations();
  65. auto bonus = std::make_shared<Bonus>(BonusDuration::ONE_BATTLE, BonusType::LEVEL_SPELL_IMMUNITY, BonusSource::OTHER, 4, BonusSourceID());
  66. bonus->additionalInfo = 1;
  67. unitBonuses.addNewBonus(bonus);
  68. EXPECT_CALL(mechanicsMock, getSpellLevel()).Times(AtLeast(1)).WillRepeatedly(Return(2));
  69. EXPECT_FALSE(subject->isReceptive(&mechanicsMock, &unitMock));
  70. }
  71. TEST_F(AbsoluteLevelConditionTest, IgnoresNormalCase)
  72. {
  73. setDefaultExpectations();
  74. auto bonus = std::make_shared<Bonus>(BonusDuration::ONE_BATTLE, BonusType::LEVEL_SPELL_IMMUNITY, BonusSource::OTHER, 4, BonusSourceID());
  75. unitBonuses.addNewBonus(bonus);
  76. EXPECT_TRUE(subject->isReceptive(&mechanicsMock, &unitMock));
  77. }
  78. }