|
@@ -20,18 +20,20 @@ class ElementalConditionTest : public TargetConditionItemTest, public WithParamI
|
|
|
{
|
|
|
public:
|
|
|
bool isPositive;
|
|
|
+
|
|
|
void setDefaultExpectations()
|
|
|
{
|
|
|
EXPECT_CALL(unitMock, getAllBonuses(_, _, _, _)).Times(AtLeast(1));
|
|
|
EXPECT_CALL(unitMock, getTreeVersion()).Times(AtLeast(0));
|
|
|
|
|
|
- std::vector<BonusType> immunityList =
|
|
|
+ EXPECT_CALL(mechanicsMock, getSpell()).Times(AtLeast(1)).WillRepeatedly(Return(&spellMock));
|
|
|
+ EXPECT_CALL(spellMock, forEachSchool(NotNull())).Times(AtLeast(1)).WillRepeatedly([](const spells::Spell::SchoolCallback & cb)
|
|
|
{
|
|
|
- BonusType::AIR_IMMUNITY,
|
|
|
- BonusType::FIRE_IMMUNITY,
|
|
|
- };
|
|
|
+ bool stop = false;
|
|
|
+ cb(ESpellSchool::AIR, stop);
|
|
|
+ cb(ESpellSchool::FIRE, stop);
|
|
|
+ });
|
|
|
|
|
|
- EXPECT_CALL(mechanicsMock, getElementalImmunity()).Times(AtLeast(1)).WillRepeatedly(Return(immunityList));
|
|
|
EXPECT_CALL(mechanicsMock, isPositiveSpell()).WillRepeatedly(Return(isPositive));
|
|
|
}
|
|
|
|
|
@@ -54,15 +56,23 @@ TEST_P(ElementalConditionTest, ReceptiveIfNoBonus)
|
|
|
TEST_P(ElementalConditionTest, ImmuneIfBonusMatches)
|
|
|
{
|
|
|
setDefaultExpectations();
|
|
|
- unitBonuses.addNewBonus(std::make_shared<Bonus>(BonusDuration::ONE_BATTLE, BonusType::AIR_IMMUNITY, BonusSource::SPELL_EFFECT, 0, 0, 0));
|
|
|
+ unitBonuses.addNewBonus(std::make_shared<Bonus>(BonusDuration::ONE_BATTLE, BonusType::SPELL_SCHOOL_IMMUNITY, BonusSource::SPELL_EFFECT, 0, 0, SpellSchool(ESpellSchool::AIR)));
|
|
|
|
|
|
EXPECT_FALSE(subject->isReceptive(&mechanicsMock, &unitMock));
|
|
|
}
|
|
|
|
|
|
+TEST_P(ElementalConditionTest, NotImmuneIfBonusMismatches)
|
|
|
+{
|
|
|
+ setDefaultExpectations();
|
|
|
+ unitBonuses.addNewBonus(std::make_shared<Bonus>(BonusDuration::ONE_BATTLE, BonusType::SPELL_SCHOOL_IMMUNITY, BonusSource::SPELL_EFFECT, 0, 0, SpellSchool(ESpellSchool::WATER)));
|
|
|
+
|
|
|
+ EXPECT_TRUE(subject->isReceptive(&mechanicsMock, &unitMock));
|
|
|
+}
|
|
|
+
|
|
|
TEST_P(ElementalConditionTest, DependsOnPositivness)
|
|
|
{
|
|
|
setDefaultExpectations();
|
|
|
- unitBonuses.addNewBonus(std::make_shared<Bonus>(BonusDuration::ONE_BATTLE, BonusType::AIR_IMMUNITY, BonusSource::SPELL_EFFECT, 0, 0, 1));
|
|
|
+ unitBonuses.addNewBonus(std::make_shared<Bonus>(BonusDuration::ONE_BATTLE, BonusType::NEGATIVE_EFFECTS_IMMUNITY, BonusSource::SPELL_EFFECT, 0, 0, SpellSchool(ESpellSchool::AIR)));
|
|
|
|
|
|
EXPECT_EQ(isPositive, subject->isReceptive(&mechanicsMock, &unitMock));
|
|
|
}
|
|
@@ -70,8 +80,8 @@ TEST_P(ElementalConditionTest, DependsOnPositivness)
|
|
|
TEST_P(ElementalConditionTest, ImmuneIfBothBonusesPresent)
|
|
|
{
|
|
|
setDefaultExpectations();
|
|
|
- unitBonuses.addNewBonus(std::make_shared<Bonus>(BonusDuration::ONE_BATTLE, BonusType::AIR_IMMUNITY, BonusSource::SPELL_EFFECT, 0, 0, 0));
|
|
|
- unitBonuses.addNewBonus(std::make_shared<Bonus>(BonusDuration::ONE_BATTLE, BonusType::AIR_IMMUNITY, BonusSource::SPELL_EFFECT, 0, 0, 1));
|
|
|
+ unitBonuses.addNewBonus(std::make_shared<Bonus>(BonusDuration::ONE_BATTLE, BonusType::SPELL_SCHOOL_IMMUNITY, BonusSource::SPELL_EFFECT, 0, 0, SpellSchool(ESpellSchool::AIR)));
|
|
|
+ unitBonuses.addNewBonus(std::make_shared<Bonus>(BonusDuration::ONE_BATTLE, BonusType::NEGATIVE_EFFECTS_IMMUNITY, BonusSource::SPELL_EFFECT, 0, 0, SpellSchool(ESpellSchool::AIR)));
|
|
|
|
|
|
EXPECT_FALSE(subject->isReceptive(&mechanicsMock, &unitMock));
|
|
|
}
|