123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- /*
- * CUnitStateMagicTest.cpp, part of VCMI engine
- *
- * Authors: listed in file AUTHORS in main folder
- *
- * License: GNU General Public License v2.0 or later
- * Full text of license available in license.txt file, in main folder
- *
- */
- #include "StdInc.h"
- #include "mock/mock_BonusBearer.h"
- #include "mock/mock_spells_Spell.h"
- #include "mock/mock_UnitInfo.h"
- #include "mock/mock_UnitEnvironment.h"
- #include "../../lib/battle/CUnitState.h"
- #include "../../lib/CCreatureHandler.h"
- class UnitStateMagicTest : public ::testing::Test
- {
- public:
- UnitInfoMock infoMock;
- UnitEnvironmentMock envMock;
- BonusBearerMock bonusMock;
- ::testing::StrictMock<spells::SpellMock> spellMock;
- battle::CUnitStateDetached subject;
- const int32_t DEFAULT_AMOUNT = 100;
- const int32_t DEFAULT_SPELL_INDEX = 42000000; //could be anything but should be far out of spellhandler bounds
- const int32_t DEFAULT_SCHOOL_LEVEL = 2;
- UnitStateMagicTest()
- :infoMock(),
- envMock(),
- bonusMock(),
- spellMock(),
- subject(&infoMock, &bonusMock)
- {
- }
- void setDefaultExpectations()
- {
- using namespace testing;
- EXPECT_CALL(infoMock, unitBaseAmount()).WillRepeatedly(Return(DEFAULT_AMOUNT));
- EXPECT_CALL(spellMock, getId()).WillRepeatedly(Return(SpellID(DEFAULT_SPELL_INDEX)));
- EXPECT_CALL(spellMock, getIndex()).WillRepeatedly(Return(DEFAULT_SPELL_INDEX));
- }
- void initUnit()
- {
- subject.localInit(&envMock);
- }
- void makeNormalCaster()
- {
- bonusMock.addNewBonus(std::make_shared<Bonus>(BonusDuration::PERMANENT, BonusType::SPELLCASTER, BonusSource::CREATURE_ABILITY, DEFAULT_SCHOOL_LEVEL, BonusSourceID(), BonusSubtypeID(SpellID(DEFAULT_SPELL_INDEX))));
- }
- };
- TEST_F(UnitStateMagicTest, initialNormal)
- {
- setDefaultExpectations();
- bonusMock.addNewBonus(std::make_shared<Bonus>(BonusDuration::PERMANENT, BonusType::CASTS, BonusSource::CREATURE_ABILITY, 567, BonusSourceID()));
- initUnit();
- EXPECT_TRUE(subject.canCast());
- EXPECT_TRUE(subject.isCaster());
- EXPECT_EQ(subject.casts.total(), 567);
- EXPECT_EQ(subject.casts.available(), 567);
- }
- TEST_F(UnitStateMagicTest, schoolLevelByDefault)
- {
- setDefaultExpectations();
- initUnit();
- EXPECT_EQ(subject.getSpellSchoolLevel(&spellMock, nullptr), 0);
- }
- TEST_F(UnitStateMagicTest, schoolLevelForNormalCaster)
- {
- setDefaultExpectations();
- initUnit();
- makeNormalCaster();
- EXPECT_EQ(subject.getSpellSchoolLevel(&spellMock, nullptr), DEFAULT_SCHOOL_LEVEL);
- }
- TEST_F(UnitStateMagicTest, effectLevelForNormalCaster)
- {
- setDefaultExpectations();
- initUnit();
- makeNormalCaster();
- EXPECT_EQ(subject.getEffectLevel(&spellMock), DEFAULT_SCHOOL_LEVEL);
- }
- TEST_F(UnitStateMagicTest, spellBonus)
- {
- setDefaultExpectations();
- initUnit();
- makeNormalCaster();
- EXPECT_EQ(subject.getSpellBonus(&spellMock, 12345, &subject), 12345);
- }
- TEST_F(UnitStateMagicTest, specificSpellBonus)
- {
- setDefaultExpectations();
- initUnit();
- makeNormalCaster();
- EXPECT_EQ(subject.getSpecificSpellBonus(&spellMock, 12345), 12345);
- }
- TEST_F(UnitStateMagicTest, effectPower)
- {
- setDefaultExpectations();
- initUnit();
- const int32_t EFFECT_POWER = 12 * 100;
- bonusMock.addNewBonus(std::make_shared<Bonus>(BonusDuration::PERMANENT, BonusType::CREATURE_SPELL_POWER, BonusSource::CREATURE_ABILITY, EFFECT_POWER, BonusSourceID()));
- makeNormalCaster();
- EXPECT_EQ(subject.getEffectPower(&spellMock), 12 * DEFAULT_AMOUNT);
- }
- TEST_F(UnitStateMagicTest, enchantPowerByDefault)
- {
- setDefaultExpectations();
- initUnit();
- makeNormalCaster();
- EXPECT_EQ(subject.getEnchantPower(&spellMock), 3);
- }
- TEST_F(UnitStateMagicTest, enchantPower)
- {
- setDefaultExpectations();
- initUnit();
- const int32_t ENCHANT_POWER = 42;
- bonusMock.addNewBonus(std::make_shared<Bonus>(BonusDuration::PERMANENT, BonusType::CREATURE_ENCHANT_POWER, BonusSource::CREATURE_ABILITY, ENCHANT_POWER, BonusSourceID()));
- makeNormalCaster();
- EXPECT_EQ(subject.getEnchantPower(&spellMock), ENCHANT_POWER);
- }
- TEST_F(UnitStateMagicTest, effectValueByDefault)
- {
- setDefaultExpectations();
- initUnit();
- makeNormalCaster();
- EXPECT_EQ(subject.getEffectValue(&spellMock), 0);
- }
- TEST_F(UnitStateMagicTest, effectValue)
- {
- setDefaultExpectations();
- initUnit();
- const int32_t EFFECT_VALUE = 456;
- bonusMock.addNewBonus(std::make_shared<Bonus>(BonusDuration::PERMANENT, BonusType::SPECIFIC_SPELL_POWER, BonusSource::CREATURE_ABILITY, EFFECT_VALUE, BonusSourceID(), BonusSubtypeID(SpellID(DEFAULT_SPELL_INDEX))));
- makeNormalCaster();
- EXPECT_EQ(subject.getEffectValue(&spellMock), EFFECT_VALUE * DEFAULT_AMOUNT);
- }
- TEST_F(UnitStateMagicTest, getOwner)
- {
- using namespace testing;
- setDefaultExpectations();
- initUnit();
- PlayerColor player(123);
- PlayerColor otherPlayer(124);
- EXPECT_CALL(infoMock, unitOwner()).WillRepeatedly(Return(player));
- ON_CALL(envMock, unitEffectiveOwner(Eq(&subject))).WillByDefault(Return(otherPlayer));
- EXPECT_CALL(envMock, unitEffectiveOwner(_));
- EXPECT_EQ(subject.getCasterOwner(), otherPlayer);
- }
- TEST_F(UnitStateMagicTest, spendMana)
- {
- setDefaultExpectations();
- bonusMock.addNewBonus(std::make_shared<Bonus>(BonusDuration::PERMANENT, BonusType::CASTS, BonusSource::CREATURE_ABILITY, 1, BonusSourceID()));
- initUnit();
- EXPECT_TRUE(subject.canCast());
- subject.spendMana(nullptr, 1);
- EXPECT_FALSE(subject.canCast());
- }
- //TODO:getCasterName
- //TODO:getCastDescription
- //TODO:spendMana
|