AbsoluteLevelConditionTest.cpp 2.8 KB

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