Differential D2808 Diff 13586 binaries/data/mods/public/simulation/components/tests/test_Resistance.js
Changeset View
Changeset View
Standalone View
Standalone View
binaries/data/mods/public/simulation/components/tests/test_Resistance.js
Engine.LoadHelperScript("Attacking.js"); | Engine.LoadHelperScript("Attacking.js"); | ||||
Engine.LoadHelperScript("Player.js"); | Engine.LoadHelperScript("Player.js"); | ||||
Engine.LoadHelperScript("ValueModification.js"); | Engine.LoadHelperScript("ValueModification.js"); | ||||
Engine.LoadComponentScript("interfaces/Capturable.js"); | Engine.LoadComponentScript("interfaces/Capturable.js"); | ||||
Engine.LoadComponentScript("interfaces/Foundation.js"); | Engine.LoadComponentScript("interfaces/Foundation.js"); | ||||
Engine.LoadComponentScript("interfaces/Health.js"); | Engine.LoadComponentScript("interfaces/Health.js"); | ||||
Engine.LoadComponentScript("interfaces/Looter.js"); | Engine.LoadComponentScript("interfaces/Looter.js"); | ||||
Engine.LoadComponentScript("interfaces/ModifiersManager.js"); | Engine.LoadComponentScript("interfaces/ModifiersManager.js"); | ||||
Engine.LoadComponentScript("interfaces/PlayerManager.js"); | Engine.LoadComponentScript("interfaces/PlayerManager.js"); | ||||
Engine.LoadComponentScript("interfaces/Promotion.js"); | Engine.LoadComponentScript("interfaces/Promotion.js"); | ||||
Engine.LoadComponentScript("interfaces/Resistance.js"); | Engine.LoadComponentScript("interfaces/Resistance.js"); | ||||
Engine.LoadComponentScript("interfaces/StatisticsTracker.js"); | Engine.LoadComponentScript("interfaces/StatisticsTracker.js"); | ||||
Engine.LoadComponentScript("interfaces/StatusEffectsReceiver.js"); | |||||
Engine.LoadComponentScript("Resistance.js"); | Engine.LoadComponentScript("Resistance.js"); | ||||
class testResistance | class testResistance | ||||
{ | { | ||||
constructor() | constructor() | ||||
{ | { | ||||
this.cmpResistance = null; | this.cmpResistance = null; | ||||
this.PlayerID = 1; | this.PlayerID = 1; | ||||
this.EnemyID = 2; | this.EnemyID = 2; | ||||
this.EntityID = 3; | this.EntityID = 3; | ||||
this.AttackerID = 4; | this.AttackerID = 4; | ||||
} | } | ||||
Reset(schema = {}) | Reset(schema = {}) | ||||
{ | { | ||||
this.cmpResistance = ConstructComponent(this.EntityID, "Resistance", schema); | this.cmpResistance = ConstructComponent(this.EntityID, "Resistance", schema); | ||||
DeleteMock(this.EntityID, IID_Health); | |||||
DeleteMock(this.EntityID, IID_Capturable); | DeleteMock(this.EntityID, IID_Capturable); | ||||
DeleteMock(this.EntityID, IID_Health); | |||||
DeleteMock(this.EntityID, IID_Identity); | DeleteMock(this.EntityID, IID_Identity); | ||||
DeleteMock(this.EntityID, IID_StatusEffectsReceiver); | |||||
bb: Should be alphabetical | |||||
} | } | ||||
TestInvulnerability() | TestInvulnerability() | ||||
{ | { | ||||
this.Reset(); | this.Reset(); | ||||
let damage = 5; | let damage = 5; | ||||
let attackData = { "Damage": { "Name": damage } }; | let attackData = { "Damage": { "Name": damage } }; | ||||
▲ Show 20 Lines • Show All 103 Lines • ▼ Show 20 Lines | let cmpCapturable = AddMock(this.EntityID, IID_Capturable, { | ||||
} | } | ||||
}); | }); | ||||
let spy = new Spy(cmpCapturable, "Capture"); | let spy = new Spy(cmpCapturable, "Capture"); | ||||
Attacking.HandleAttackEffects(this.EntityID, "Test", attackData, this.AttackerID, this.EnemyID); | Attacking.HandleAttackEffects(this.EntityID, "Test", attackData, this.AttackerID, this.EnemyID); | ||||
TS_ASSERT_EQUALS(spy._called, 1); | TS_ASSERT_EQUALS(spy._called, 1); | ||||
} | } | ||||
TestStatusEffectsResistancesApplies() | |||||
{ | |||||
// Test duration reduction. | |||||
let durationFactor = 0.5; | |||||
let statusName = "statusName"; | |||||
this.Reset({ | |||||
"Entity": { | |||||
"ApplyStatus": { | |||||
[statusName]: { | |||||
"Duration": durationFactor | |||||
} | |||||
} | |||||
} | |||||
}); | |||||
let duration = 10; | |||||
let attackData = { | |||||
"ApplyStatus": { | |||||
[statusName]: { | |||||
"Duration": duration | |||||
} | |||||
} | |||||
}; | |||||
let cmpStatusEffectsReceiver = AddMock(this.EntityID, IID_StatusEffectsReceiver, { | |||||
"ApplyStatus": (effectData, __, ___) => { | |||||
TS_ASSERT_EQUALS(effectData[statusName].Duration, duration * durationFactor); | |||||
return { "inflictedStatuses": Object.keys(effectData) }; | |||||
} | |||||
}); | |||||
let spy = new Spy(cmpStatusEffectsReceiver, "ApplyStatus"); | |||||
Attacking.HandleAttackEffects(this.EntityID, "Test", attackData, this.AttackerID, this.EnemyID); | |||||
TS_ASSERT_EQUALS(spy._called, 1); | |||||
// Test blocking. | |||||
this.Reset({ | |||||
"Entity": { | |||||
"ApplyStatus": { | |||||
[statusName]: { | |||||
"BlockChance": "1" | |||||
} | |||||
} | |||||
} | |||||
}); | |||||
cmpStatusEffectsReceiver = AddMock(this.EntityID, IID_StatusEffectsReceiver, { | |||||
"ApplyStatus": (effectData, __, ___) => { | |||||
TS_ASSERT_UNEVAL_EQUALS(effectData, {}); | |||||
return { "inflictedStatuses": Object.keys(effectData) }; | |||||
} | |||||
}); | |||||
spy = new Spy(cmpStatusEffectsReceiver, "ApplyStatus"); | |||||
Done Inline ActionsShouldn't we spy too? bb: Shouldn't we spy too? | |||||
Attacking.HandleAttackEffects(this.EntityID, "Test", attackData, this.AttackerID, this.EnemyID); | |||||
TS_ASSERT_EQUALS(spy._called, 1); | |||||
// Test multiple resistances. | |||||
let reducedStatusName = "reducedStatus"; | |||||
let blockedStatusName = "blockedStatus"; | |||||
this.Reset({ | |||||
"Entity": { | |||||
"ApplyStatus": { | |||||
[reducedStatusName]: { | |||||
"Duration": durationFactor | |||||
}, | |||||
[blockedStatusName]: { | |||||
"BlockChance": "1" | |||||
} | |||||
} | |||||
} | |||||
}); | |||||
attackData = { | |||||
"ApplyStatus": { | |||||
[reducedStatusName]: { | |||||
"Duration": duration | |||||
}, | |||||
[blockedStatusName]: { | |||||
"Duration": duration | |||||
} | |||||
} | |||||
}; | |||||
cmpStatusEffectsReceiver = AddMock(this.EntityID, IID_StatusEffectsReceiver, { | |||||
"ApplyStatus": (effectData, __, ___) => { | |||||
TS_ASSERT_EQUALS(effectData[reducedStatusName].Duration, duration * durationFactor); | |||||
TS_ASSERT_UNEVAL_EQUALS(Object.keys(effectData), [reducedStatusName]); | |||||
return { "inflictedStatuses": Object.keys(effectData) }; | |||||
} | |||||
}); | |||||
spy = new Spy(cmpStatusEffectsReceiver, "ApplyStatus"); | |||||
Attacking.HandleAttackEffects(this.EntityID, "Test", attackData, this.AttackerID, this.EnemyID); | |||||
TS_ASSERT_EQUALS(spy._called, 1); | |||||
} | |||||
TestResistanceAndBonus() | TestResistanceAndBonus() | ||||
{ | { | ||||
let resistanceValue = 2; | let resistanceValue = 2; | ||||
let damageType = "Name"; | let damageType = "Name"; | ||||
this.Reset({ | this.Reset({ | ||||
"Entity": { | "Entity": { | ||||
"Damage": { | "Damage": { | ||||
[damageType]: resistanceValue | [damageType]: resistanceValue | ||||
▲ Show 20 Lines • Show All 82 Lines • ▼ Show 20 Lines | class testResistance | ||||
} | } | ||||
} | } | ||||
let cmp = new testResistance(); | let cmp = new testResistance(); | ||||
cmp.TestInvulnerability(); | cmp.TestInvulnerability(); | ||||
cmp.TestBonus(); | cmp.TestBonus(); | ||||
cmp.TestDamageResistanceApplies(); | cmp.TestDamageResistanceApplies(); | ||||
cmp.TestCaptureResistanceApplies(); | cmp.TestCaptureResistanceApplies(); | ||||
cmp.TestStatusEffectsResistancesApplies(); | |||||
cmp.TestResistanceAndBonus(); | cmp.TestResistanceAndBonus(); | ||||
cmp.TestMultipleEffects(); | cmp.TestMultipleEffects(); |
Wildfire Games · Phabricator
Should be alphabetical