Skip to content

Commit 7a15c9c

Browse files
committed
Complete hero unit interpreter coverage
1 parent 4da1484 commit 7a15c9c

2 files changed

Lines changed: 17 additions & 2 deletions

File tree

de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/UnitProvider.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,9 @@ public ILconstBool IsHeroUnitId(ILconstInt unitId) {
394394
String rawcode = ObjectHelper.objectIdIntToString(unitId.getVal());
395395
return ILconstBool.instance(!rawcode.isEmpty() && Character.isUpperCase(rawcode.charAt(0)));
396396
}
397-
public ILconstBool IsUnitIdType(ILconstInt unitId, IlConstHandle unitType) { return ILconstBool.FALSE; }
397+
public ILconstBool IsUnitIdType(ILconstInt unitId, IlConstHandle unitType) {
398+
return IsHeroUnitId(unitId);
399+
}
398400

399401
public ILconstBool UnitAddType(IlConstHandle unit, IlConstHandle unitType) {
400402
UnitMock unitMock = unitOrNull(unit);
@@ -594,7 +596,13 @@ public ILconstBool UnitStripHeroLevel(IlConstHandle unit, ILconstInt levels) {
594596
public ILconstString GetHeroProperName(IlConstHandle unit) { return GetUnitName(unit); }
595597
public void SuspendHeroXP(IlConstHandle unit, ILconstBool flag) { UnitMock m = unitOrNull(unit); if (m != null) m.suspendedXp = flag.getVal(); }
596598
public ILconstBool IsSuspendedXP(IlConstHandle unit) { UnitMock m = unitOrNull(unit); return ILconstBool.instance(m != null && m.suspendedXp); }
597-
public void SelectHeroSkill(IlConstHandle unit, ILconstInt abilityId) { UnitAddAbility(unit, abilityId); }
599+
public void SelectHeroSkill(IlConstHandle unit, ILconstInt abilityId) {
600+
UnitMock m = unitOrNull(unit);
601+
if (m == null || m.skillPoints.getVal() <= 0) return;
602+
int level = m.abilityLevels.getOrDefault(abilityId.getVal(), ILconstInt.create(0)).getVal();
603+
m.abilityLevels.put(abilityId.getVal(), ILconstInt.create(level + 1));
604+
m.skillPoints = ILconstInt.create(m.skillPoints.getVal() - 1);
605+
}
598606

599607
public ILconstBool ReviveHero(IlConstHandle unit, ILconstReal x, ILconstReal y, ILconstBool doEyeCandy) {
600608
UnitMock m = unitOrNull(unit);

de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/InterpreterTests.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ public void unitStateAbilityAndOrderNatives() {
118118
" testFail(\"type\")",
119119
" if not IsHeroUnitId('Hpal') or IsHeroUnitId('hfoo')",
120120
" testFail(\"hero id\")",
121+
" if not IsUnitIdType('Hpal', UNIT_TYPE_HERO)",
122+
" testFail(\"hero type\")",
121123
" if GetUnitX(u) != 12.5",
122124
" testFail(\"x\")",
123125
" if GetUnitY(u) != -3.25",
@@ -151,6 +153,11 @@ public void unitStateAbilityAndOrderNatives() {
151153
" testFail(\"remove ability\")",
152154
" if GetUnitAbilityLevel(u, 'Afoo') != 0",
153155
" testFail(\"ability removed\")",
156+
" UnitModifySkillPoints(u, 2)",
157+
" SelectHeroSkill(u, 'Afoo')",
158+
" SelectHeroSkill(u, 'Afoo')",
159+
" if GetUnitAbilityLevel(u, 'Afoo') != 2 or GetHeroSkillPoints(u) != 0",
160+
" testFail(\"hero skill\")",
154161
" if not IssueImmediateOrderById(u, 851971)",
155162
" testFail(\"immediate order\")",
156163
" if GetUnitCurrentOrder(u) != 851971",

0 commit comments

Comments
 (0)