Index: binaries/data/mods/public/simulation/components/tests/test_Promotion.js =================================================================== --- binaries/data/mods/public/simulation/components/tests/test_Promotion.js +++ binaries/data/mods/public/simulation/components/tests/test_Promotion.js @@ -1,19 +1,20 @@ Engine.LoadComponentScript("interfaces/Health.js"); Engine.LoadComponentScript("interfaces/Promotion.js"); +Engine.LoadComponentScript("interfaces/Timer.js"); Engine.LoadComponentScript("interfaces/UnitAI.js"); Engine.LoadComponentScript("Promotion.js"); +Engine.LoadComponentScript("Timer.js"); + +let cmpPromotion; +const ENT_ID = 60; -(function testMultipleXPIncrease() -{ let ApplyValueModificationsToEntity = (_, val) => val; Engine.RegisterGlobal("ApplyValueModificationsToEntity", ApplyValueModificationsToEntity); Engine.RegisterGlobal("ApplyValueModificationsToTemplate", ApplyValueModificationsToEntity); -let QueryOwnerInterface = () => ({ "GetPlayerID": () => 2 }); +let QueryOwnerInterface = () => ({ "GetPlayerID": () => 1 }); Engine.RegisterGlobal("QueryOwnerInterface", QueryOwnerInterface); -const ENT_ID = 60; - let entTemplates = { "60": "template_b", "61": "template_f", @@ -36,42 +37,67 @@ }), }); -let cmpPromotion = ConstructComponent(ENT_ID, "Promotion", { - "Entity": "template_b", - "RequiredXp": 1000 -}); - let ChangeEntityTemplate = function(ent, template) { - cmpPromotion = ConstructComponent(ent + 1, "Promotion", { - "Entity": entTemplates[ent + 1], + let newEnt = ent + 1; + cmpPromotion = ConstructComponent(newEnt, "Promotion", { + "Entity": entTemplates[newEnt], "RequiredXp": 1000 }); - return ent + 1; + return newEnt; }; Engine.RegisterGlobal("ChangeEntityTemplate", ChangeEntityTemplate); -TS_ASSERT_EQUALS(cmpPromotion.GetCurrentXp(), 0); -cmpPromotion.IncreaseXp(200); -TS_ASSERT_EQUALS(cmpPromotion.GetCurrentXp(), 200); -cmpPromotion.IncreaseXp(800); - -TS_ASSERT_EQUALS(cmpPromotion.entity, 61); -TS_ASSERT_EQUALS(cmpPromotion.GetCurrentXp(), 0); -TS_ASSERT_EQUALS(cmpPromotion.GetRequiredXp(), 1000); -cmpPromotion.IncreaseXp(4200); -TS_ASSERT_EQUALS(cmpPromotion.entity, 62); -TS_ASSERT_EQUALS(cmpPromotion.template.Entity, "end"); -TS_ASSERT_EQUALS(cmpPromotion.GetCurrentXp(), 200); - -cmpPromotion = ConstructComponent(ENT_ID, "Promotion", { - "Entity": "template_b", - "RequiredXp": 1000 -}); +(function testMultipleXPIncrease() +{ + cmpPromotion = ConstructComponent(ENT_ID, "Promotion", { + "Entity": "template_b", + "RequiredXp": 1000 + }); -let cmpHealth = AddMock(ENT_ID, IID_Health, { - "GetHitpoints": () => 0, -}); + TS_ASSERT_EQUALS(cmpPromotion.GetCurrentXp(), 0); + cmpPromotion.IncreaseXp(200); + TS_ASSERT_EQUALS(cmpPromotion.GetCurrentXp(), 200); + cmpPromotion.IncreaseXp(800); + + TS_ASSERT_EQUALS(cmpPromotion.entity, 61); + TS_ASSERT_EQUALS(cmpPromotion.GetCurrentXp(), 0); + TS_ASSERT_EQUALS(cmpPromotion.GetRequiredXp(), 1000); + cmpPromotion.IncreaseXp(4200); + TS_ASSERT_EQUALS(cmpPromotion.entity, 62); + TS_ASSERT_EQUALS(cmpPromotion.template.Entity, "end"); + TS_ASSERT_EQUALS(cmpPromotion.GetCurrentXp(), 200); + + cmpPromotion = ConstructComponent(ENT_ID, "Promotion", { + "Entity": "template_b", + "RequiredXp": 1000 + }); + + let cmpHealth = AddMock(ENT_ID, IID_Health, { + "GetHitpoints": () => 0, + }); + + cmpPromotion.IncreaseXp(1000); + TS_ASSERT_EQUALS(cmpPromotion.entity, ENT_ID); + TS_ASSERT_EQUALS(cmpPromotion.GetCurrentXp(), 0); + + DeleteMock(ENT_ID, IID_Health); +})(); -cmpPromotion.IncreaseXp(1000); +(function testExperienceTrickle() +{ + let cmpTimer = ConstructComponent(SYSTEM_ENTITY, "Timer", {}); + cmpPromotion = ConstructComponent(ENT_ID, "Promotion", { + "Entity": "template_b", + "RequiredXp": "100", + "TrickleRate": "10" + }); + TS_ASSERT_EQUALS(cmpPromotion.GetCurrentXp(), 0); + cmpTimer.OnUpdate({ "turnLength": 1 }); + TS_ASSERT_EQUALS(cmpPromotion.GetCurrentXp(), 10); + cmpTimer.OnUpdate({ "turnLength": 2 }); + TS_ASSERT_EQUALS(cmpPromotion.GetCurrentXp(), 30); + cmpTimer.OnUpdate({ "turnLength": 8 }); + TS_ASSERT_EQUALS(cmpPromotion.GetCurrentXp(), 10); + TS_ASSERT_EQUALS(cmpPromotion.entity, 61); })();