ElementalConditionTest.cpp 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /*
  2. * ElementalConditionTest.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 ElementalConditionTest : public TargetConditionItemTest, public WithParamInterface<bool>
  17. {
  18. public:
  19. bool isPositive;
  20. void setDefaultExpectations()
  21. {
  22. EXPECT_CALL(unitMock, getAllBonuses(_, _, _, _)).Times(AtLeast(1));
  23. EXPECT_CALL(unitMock, getTreeVersion()).Times(AtLeast(0));
  24. std::vector<Bonus::BonusType> immunityList =
  25. {
  26. Bonus::AIR_IMMUNITY,
  27. Bonus::FIRE_IMMUNITY,
  28. };
  29. EXPECT_CALL(mechanicsMock, getElementalImmunity()).Times(AtLeast(1)).WillRepeatedly(Return(immunityList));
  30. EXPECT_CALL(mechanicsMock, isPositiveSpell()).WillRepeatedly(Return(isPositive));
  31. }
  32. void SetUp() override
  33. {
  34. TargetConditionItemTest::SetUp();
  35. subject = TargetConditionItemFactory::getDefault()->createElemental();
  36. isPositive = GetParam();
  37. }
  38. };
  39. TEST_P(ElementalConditionTest, ReceptiveIfNoBonus)
  40. {
  41. setDefaultExpectations();
  42. EXPECT_TRUE(subject->isReceptive(&mechanicsMock, &unitMock));
  43. }
  44. TEST_P(ElementalConditionTest, ImmuneIfBonusMatches)
  45. {
  46. setDefaultExpectations();
  47. unitBonuses.addNewBonus(std::make_shared<Bonus>(Bonus::ONE_BATTLE, Bonus::AIR_IMMUNITY, Bonus::SPELL_EFFECT, 0, 0, 0));
  48. EXPECT_FALSE(subject->isReceptive(&mechanicsMock, &unitMock));
  49. }
  50. TEST_P(ElementalConditionTest, DependsOnPositivness)
  51. {
  52. setDefaultExpectations();
  53. unitBonuses.addNewBonus(std::make_shared<Bonus>(Bonus::ONE_BATTLE, Bonus::AIR_IMMUNITY, Bonus::SPELL_EFFECT, 0, 0, 1));
  54. EXPECT_EQ(isPositive, subject->isReceptive(&mechanicsMock, &unitMock));
  55. }
  56. TEST_P(ElementalConditionTest, ImmuneIfBothBonusesPresent)
  57. {
  58. setDefaultExpectations();
  59. unitBonuses.addNewBonus(std::make_shared<Bonus>(Bonus::ONE_BATTLE, Bonus::AIR_IMMUNITY, Bonus::SPELL_EFFECT, 0, 0, 0));
  60. unitBonuses.addNewBonus(std::make_shared<Bonus>(Bonus::ONE_BATTLE, Bonus::AIR_IMMUNITY, Bonus::SPELL_EFFECT, 0, 0, 1));
  61. EXPECT_FALSE(subject->isReceptive(&mechanicsMock, &unitMock));
  62. }
  63. INSTANTIATE_TEST_SUITE_P
  64. (
  65. ByPositiveness,
  66. ElementalConditionTest,
  67. Values(false, true)
  68. );
  69. }