mirror of
				https://github.com/vcmi/vcmi.git
				synced 2025-10-31 00:07:39 +02:00 
			
		
		
		
	
							
								
								
									
										1
									
								
								.github/workflows/github.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.github/workflows/github.yml
									
									
									
									
										vendored
									
									
								
							| @@ -267,6 +267,7 @@ jobs: | ||||
|       env: | ||||
|         HEROES_3_DATA_PASSWORD: ${{ secrets.HEROES_3_DATA_PASSWORD }} | ||||
|       if: ${{ env.HEROES_3_DATA_PASSWORD != '' && matrix.test == 1 }} | ||||
|       continue-on-error: true | ||||
|       run: | | ||||
|         ctest --preset ${{matrix.preset}} | ||||
|  | ||||
|   | ||||
| @@ -194,13 +194,13 @@ const UnitBonusValuesProxy::SelectorsArray * UnitBonusValuesProxy::generateSelec | ||||
| 		minDamage.And(selectorRanged), //MIN_DAMAGE_RANGED, | ||||
| 		maxDamage.And(selectorMelee), //MAX_DAMAGE_MELEE, | ||||
| 		maxDamage.And(selectorRanged), //MAX_DAMAGE_RANGED, | ||||
| 		attack.And(selectorRanged),//ATTACK_MELEE, | ||||
| 		attack.And(selectorMelee),//ATTACK_MELEE, | ||||
| 		attack.And(selectorRanged),//ATTACK_RANGED, | ||||
| 		defence.And(selectorRanged),//DEFENCE_MELEE, | ||||
| 		defence.And(selectorMelee),//DEFENCE_MELEE, | ||||
| 		defence.And(selectorRanged),//DEFENCE_RANGED, | ||||
| 		Selector::type()(BonusType::IN_FRENZY),//IN_FRENZY, | ||||
| 		Selector::type()(BonusType::FORGETFULL),//FORGETFULL, | ||||
| 		Selector::type()(BonusType::HYPNOTIZED),//HYPNOTIZED, | ||||
| 		Selector::type()(BonusType::FORGETFULL),//FORGETFULL, | ||||
| 		Selector::type()(BonusType::FREE_SHOOTING).Or(Selector::type()(BonusType::SIEGE_WEAPON)),//HAS_FREE_SHOOTING, | ||||
| 		Selector::type()(BonusType::STACK_HEALTH),//STACK_HEALTH, | ||||
| 		Selector::type()(BonusType::NONE).And(Selector::source(BonusSource::SPELL_EFFECT, BonusSourceID(SpellID(SpellID::CLONE)))) | ||||
|   | ||||
| @@ -71,6 +71,11 @@ public: | ||||
| 		addNewBonus(std::make_shared<Bonus>(BonusDuration::PERMANENT, BonusType::SIEGE_WEAPON, BonusSource::CREATURE_ABILITY, 1, BonusSourceID())); | ||||
| 	} | ||||
|  | ||||
| 	bool isHypnotized() const override | ||||
| 	{ | ||||
| 		return hasBonusOfType(BonusType::HYPNOTIZED); | ||||
| 	} | ||||
|  | ||||
| 	void redirectBonusesToFake() | ||||
| 	{ | ||||
| 		ON_CALL(*this, getAllBonuses(_, _, _)).WillByDefault(Invoke(&bonusFake, &BonusBearerMock::getAllBonuses)); | ||||
| @@ -262,7 +267,7 @@ TEST_F(AttackableHexesTest, DragonDragonBottomRightHead_BottomRightBreathFromHea | ||||
| 	UnitFake & attacker = addDragon(35, BattleSide::ATTACKER); | ||||
| 	UnitFake & defender = addDragon(attacker.getPosition().cloneInDirection(BattleHex::BOTTOM_RIGHT), BattleSide::DEFENDER); | ||||
| 	UnitFake & next = addRegularMelee(defender.getPosition().cloneInDirection(BattleHex::BOTTOM_RIGHT), BattleSide::DEFENDER); | ||||
| 	 | ||||
|  | ||||
| 	auto attacked = getAttackedUnits(attacker, defender, defender.getPosition()); | ||||
|  | ||||
| 	EXPECT_TRUE(vstd::contains(attacked, &next)); | ||||
|   | ||||
| @@ -228,6 +228,19 @@ TEST_F(UnitStateTest, additionalMeleeAttack) | ||||
| 	EXPECT_EQ(subject.getTotalAttacks(true), 1); | ||||
| } | ||||
|  | ||||
| TEST_F(UnitStateTest, hypnotized) | ||||
| { | ||||
| 	setDefaultExpectations(); | ||||
|  | ||||
| 	{ | ||||
| 		auto bonus = std::make_shared<Bonus>(BonusDuration::PERMANENT, BonusType::HYPNOTIZED, BonusSource::SPELL_EFFECT, 41, BonusSourceID()); | ||||
|  | ||||
| 		bonusMock.addNewBonus(bonus); | ||||
| 	} | ||||
|  | ||||
| 	EXPECT_TRUE(subject.isHypnotized()); | ||||
| } | ||||
|  | ||||
| TEST_F(UnitStateTest, additionalRangedAttack) | ||||
| { | ||||
| 	setDefaultExpectations(); | ||||
| @@ -252,10 +265,16 @@ TEST_F(UnitStateTest, getMinDamage) | ||||
| 		bonusMock.addNewBonus(bonus); | ||||
|  | ||||
| 		bonus = std::make_shared<Bonus>(BonusDuration::PERMANENT, BonusType::CREATURE_DAMAGE, BonusSource::SPELL_EFFECT, -20, BonusSourceID(), BonusCustomSubtype::creatureDamageMin); | ||||
| 		bonus->effectRange = BonusLimitEffect::ONLY_DISTANCE_FIGHT; | ||||
| 		bonusMock.addNewBonus(bonus); | ||||
|  | ||||
| 		bonus = std::make_shared<Bonus>(BonusDuration::PERMANENT, BonusType::CREATURE_DAMAGE, BonusSource::SPELL_EFFECT, -10, BonusSourceID(), BonusCustomSubtype::creatureDamageMin); | ||||
| 		bonus->effectRange = BonusLimitEffect::ONLY_MELEE_FIGHT; | ||||
| 		bonusMock.addNewBonus(bonus); | ||||
|  | ||||
| 	} | ||||
|  | ||||
| 	EXPECT_EQ(subject.getMinDamage(false), 10); | ||||
| 	EXPECT_EQ(subject.getMinDamage(false), 20); | ||||
| 	EXPECT_EQ(subject.getMinDamage(true), 10); | ||||
| } | ||||
|  | ||||
| @@ -268,10 +287,15 @@ TEST_F(UnitStateTest, getMaxDamage) | ||||
| 		bonusMock.addNewBonus(bonus); | ||||
|  | ||||
| 		bonus = std::make_shared<Bonus>(BonusDuration::PERMANENT, BonusType::CREATURE_DAMAGE, BonusSource::SPELL_EFFECT, -20, BonusSourceID(), BonusCustomSubtype::creatureDamageMax); | ||||
| 		bonus->effectRange = BonusLimitEffect::ONLY_DISTANCE_FIGHT; | ||||
| 		bonusMock.addNewBonus(bonus); | ||||
|  | ||||
| 		bonus = std::make_shared<Bonus>(BonusDuration::PERMANENT, BonusType::CREATURE_DAMAGE, BonusSource::SPELL_EFFECT, -10, BonusSourceID(), BonusCustomSubtype::creatureDamageMax); | ||||
| 		bonus->effectRange = BonusLimitEffect::ONLY_MELEE_FIGHT; | ||||
| 		bonusMock.addNewBonus(bonus); | ||||
| 	} | ||||
|  | ||||
| 	EXPECT_EQ(subject.getMaxDamage(false), 10); | ||||
| 	EXPECT_EQ(subject.getMaxDamage(false), 20); | ||||
| 	EXPECT_EQ(subject.getMaxDamage(true), 10); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -40,8 +40,7 @@ TConstBonusListPtr BonusBearerMock::getAllBonuses(const CSelector & selector, co | ||||
|  | ||||
| int64_t BonusBearerMock::getTreeVersion() const | ||||
| { | ||||
| 	int64_t ret = treeVersion; | ||||
| 	return ret << 32; | ||||
| 	return treeVersion; | ||||
| } | ||||
|  | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user