1
0
forked from 0ad/0ad

Add unit tests to the EntityLimits component.

Differential Revision: https://code.wildfiregames.com/D970
This was SVN commit r20329.
This commit is contained in:
fatherbushido 2017-10-23 06:27:00 +00:00
parent 6590f301c2
commit 32812f0974

View File

@ -0,0 +1,157 @@
Engine.LoadComponentScript("interfaces/BuildRestrictions.js");
Engine.LoadComponentScript("interfaces/EntityLimits.js");
Engine.LoadComponentScript("interfaces/Foundation.js");
Engine.LoadComponentScript("interfaces/TrainingRestrictions.js");
Engine.LoadComponentScript("interfaces/Player.js");
Engine.LoadComponentScript("EntityLimits.js");
let template ={
"Limits": {
"Tower": 5,
"Wonder": 1,
"Hero": 2,
"Champion": 1
},
"LimitChangers": {
"Tower": { "Monument": 1 }
},
"LimitRemovers": {
"Tower": { "RequiredTechs": { "_string": "TechA" } },
"Hero": { "RequiredClasses": { "_string": "Aegis" } }
}
};
AddMock(10, IID_Player, {
"GetPlayerID": id => 1
});
AddMock(SYSTEM_ENTITY, IID_GuiInterface, {
"PushNotification": () => {}
});
let cmpEntityLimits = ConstructComponent(10, "EntityLimits", template);
// Test getters
TS_ASSERT_UNEVAL_EQUALS(cmpEntityLimits.GetCounts(), { "Tower": 0, "Wonder": 0, "Hero": 0, "Champion": 0 });
TS_ASSERT_UNEVAL_EQUALS(cmpEntityLimits.GetLimits(), { "Tower": 5, "Wonder": 1, "Hero": 2, "Champion": 1 });
TS_ASSERT_UNEVAL_EQUALS(cmpEntityLimits.GetLimitChangers(), { "Tower": { "Monument": 1 } });
// Test training restrictions
TS_ASSERT(cmpEntityLimits.AllowedToTrain("Hero"));
TS_ASSERT(cmpEntityLimits.AllowedToTrain("Hero", 1));
TS_ASSERT(cmpEntityLimits.AllowedToTrain("Hero", 2));
for (let ent = 60; ent < 63; ++ent)
{
AddMock(ent, IID_TrainingRestrictions, {
"GetCategory": () => "Hero"
});
}
cmpEntityLimits.OnGlobalOwnershipChanged({ "entity": 60, "from": -1, "to": 1 });
cmpEntityLimits.OnGlobalOwnershipChanged({ "entity": 61, "from": 2, "to": 1 });
TS_ASSERT_UNEVAL_EQUALS(cmpEntityLimits.GetCounts(), { "Tower": 0, "Wonder": 0, "Hero": 2, "Champion": 0 });
TS_ASSERT(cmpEntityLimits.AllowedToTrain("Hero"));
TS_ASSERT(!cmpEntityLimits.AllowedToTrain("Hero", 1));
// Restrictions can be enforced
cmpEntityLimits.OnGlobalOwnershipChanged({ "entity": 62, "from": -1, "to": 1 });
TS_ASSERT_UNEVAL_EQUALS(cmpEntityLimits.GetCounts(), { "Tower": 0, "Wonder": 0, "Hero": 3, "Champion": 0 });
for (let ent = 60; ent < 63; ++ent)
cmpEntityLimits.OnGlobalOwnershipChanged({ "entity": ent, "from": 1, "to": -1 });
TS_ASSERT_UNEVAL_EQUALS(cmpEntityLimits.GetCounts(), { "Tower": 0, "Wonder": 0, "Hero": 0, "Champion": 0 });
// Test building restrictions
AddMock(70, IID_BuildRestrictions, {
"GetCategory": () => "Wonder"
});
cmpEntityLimits.OnGlobalOwnershipChanged({ "entity": 70, "from": 3, "to": 1 });
TS_ASSERT_UNEVAL_EQUALS(cmpEntityLimits.GetCounts(), { "Tower": 0, "Wonder": 1, "Hero": 0, "Champion": 0 });
TS_ASSERT_UNEVAL_EQUALS(cmpEntityLimits.GetLimits(), { "Tower": 5, "Wonder": 1, "Hero": 2, "Champion": 1 });
// AllowedToBuild is used after foundation placement, which are meant to be replaced
TS_ASSERT(cmpEntityLimits.AllowedToBuild("Wonder"));
cmpEntityLimits.OnGlobalOwnershipChanged({ "entity": 70, "from": 1, "to": -1 });
// Test limit changers
AddMock(80, IID_Identity, {
"GetClassesList": () => ["Monument"]
});
AddMock(81, IID_Identity, {
"GetClassesList": () => ["Monument"]
});
cmpEntityLimits.OnGlobalOwnershipChanged({ "entity": 80, "from": -1, "to": 1 });
TS_ASSERT_UNEVAL_EQUALS(cmpEntityLimits.GetCounts(), { "Tower": 0, "Wonder": 0, "Hero": 0, "Champion": 0 });
TS_ASSERT_UNEVAL_EQUALS(cmpEntityLimits.GetLimits(), { "Tower": 5 + 1, "Wonder": 1, "Hero": 2, "Champion": 1 });
cmpEntityLimits.OnGlobalOwnershipChanged({ "entity": 81, "from": 1, "to": -1 });
TS_ASSERT_UNEVAL_EQUALS(cmpEntityLimits.GetCounts(), { "Tower": 0, "Wonder": 0, "Hero": 0, "Champion": 0 });
TS_ASSERT_UNEVAL_EQUALS(cmpEntityLimits.GetLimits(), { "Tower": 5, "Wonder": 1, "Hero": 2, "Champion": 1 });
// Foundations don't change limits
AddMock(81, IID_Foundation, {});
cmpEntityLimits.OnGlobalOwnershipChanged({ "entity": 81, "from": -1, "to": 1 });
TS_ASSERT_UNEVAL_EQUALS(cmpEntityLimits.GetCounts(), { "Tower": 0, "Wonder": 0, "Hero": 0, "Champion": 0 });
TS_ASSERT_UNEVAL_EQUALS(cmpEntityLimits.GetLimits(), { "Tower": 5, "Wonder": 1, "Hero": 2, "Champion": 1 });
cmpEntityLimits.OnGlobalOwnershipChanged({ "entity": 81, "from": 1, "to": -1 });
// Test limit removers by classes
AddMock(90, IID_Identity, {
"GetClassesList": () => ["Aegis"]
});
cmpEntityLimits.OnGlobalOwnershipChanged({ "entity": 90, "from": -1, "to": 1 });
TS_ASSERT_UNEVAL_EQUALS(cmpEntityLimits.GetLimits(), { "Tower": 5, "Wonder": 1, "Hero": undefined, "Champion": 1 });
TS_ASSERT_UNEVAL_EQUALS(cmpEntityLimits.GetCounts(), { "Tower": 0, "Wonder": 0, "Hero": 0, "Champion": 0 });
AddMock(91, IID_TrainingRestrictions, {
"GetCategory": () => "Hero"
});
cmpEntityLimits.OnGlobalOwnershipChanged({ "entity": 91, "from": -1, "to": 1 });
TS_ASSERT_UNEVAL_EQUALS(cmpEntityLimits.GetLimits(), { "Tower": 5, "Wonder": 1, "Hero": undefined, "Champion": 1 });
TS_ASSERT_UNEVAL_EQUALS(cmpEntityLimits.GetCounts(), { "Tower": 0, "Wonder": 0, "Hero": 1, "Champion": 0 });
cmpEntityLimits.OnGlobalOwnershipChanged({ "entity": 90, "from": 1, "to": -1 });
TS_ASSERT_UNEVAL_EQUALS(cmpEntityLimits.GetLimits(), { "Tower": 5, "Wonder": 1, "Hero": 2, "Champion": 1 });
TS_ASSERT_UNEVAL_EQUALS(cmpEntityLimits.GetCounts(), { "Tower": 0, "Wonder": 0, "Hero": 1, "Champion": 0 });
// Edge case
AddMock(92, IID_TrainingRestrictions, {
"GetCategory": () => "Hero"
});
AddMock(92, IID_Identity, {
"GetClassesList": () => ["Aegis"]
});
cmpEntityLimits.OnGlobalOwnershipChanged({ "entity": 92, "from": -1, "to": 1 });
TS_ASSERT_UNEVAL_EQUALS(cmpEntityLimits.GetLimits(), { "Tower": 5, "Wonder": 1, "Hero": undefined, "Champion": 1 });
TS_ASSERT(cmpEntityLimits.AllowedToTrain("Hero", 157));
TS_ASSERT_UNEVAL_EQUALS(cmpEntityLimits.GetCounts(), { "Tower": 0, "Wonder": 0, "Hero": 2, "Champion": 0 });
cmpEntityLimits.OnGlobalOwnershipChanged({ "entity": 91, "from": 1, "to": -1 });
cmpEntityLimits.OnGlobalOwnershipChanged({ "entity": 92, "from": 1, "to": -1 });
TS_ASSERT_UNEVAL_EQUALS(cmpEntityLimits.GetLimits(), { "Tower": 5, "Wonder": 1, "Hero": 2, "Champion": 1 });
TS_ASSERT_UNEVAL_EQUALS(cmpEntityLimits.GetCounts(), { "Tower": 0, "Wonder": 0, "Hero": 0, "Champion": 0 });
// Test limit removers by tech
cmpEntityLimits.UpdateLimitsFromTech("TechB");
TS_ASSERT_UNEVAL_EQUALS(cmpEntityLimits.GetLimits(), { "Tower": 5, "Wonder": 1, "Hero": 2, "Champion": 1 });
cmpEntityLimits.UpdateLimitsFromTech("TechA");
TS_ASSERT_UNEVAL_EQUALS(cmpEntityLimits.GetLimits(), { "Tower": undefined, "Wonder": 1, "Hero": 2, "Champion": 1 });
cmpEntityLimits.UpdateLimitsFromTech("TechA");
TS_ASSERT_UNEVAL_EQUALS(cmpEntityLimits.GetLimits(), { "Tower": undefined, "Wonder": 1, "Hero": 2, "Champion": 1 });