diff --git a/binaries/data/mods/public/simulation/components/BuildRestrictions.js b/binaries/data/mods/public/simulation/components/BuildRestrictions.js index 377aed21e1..453cf15407 100644 --- a/binaries/data/mods/public/simulation/components/BuildRestrictions.js +++ b/binaries/data/mods/public/simulation/components/BuildRestrictions.js @@ -151,23 +151,25 @@ BuildRestrictions.prototype.CheckPlacement = function() var ret = cmpObstruction.CheckFoundation(passClassName, false); } - if (ret != "success") + if (ret !== "success") { switch (ret) { - case "fail_error": - case "fail_no_obstruction": - error("CheckPlacement: Error returned from CheckFoundation"); - break; case "fail_obstructs_foundation": result.message = markForTranslation("%(name)s cannot be built on another building or resource"); break; case "fail_terrain_class": // TODO: be more specific and/or list valid terrain? result.message = markForTranslation("%(name)s cannot be built on invalid terrain"); + break; + case "fail_error": + case "fail_no_obstruction": default: - return result; // Fail + error(`CheckPlacement: Error returned from CheckFoundation. Got reason: '${ret}'`); + break; } + + return result; } // Check territory restrictions diff --git a/binaries/data/mods/public/simulation/components/tests/test_BuildRestrictions.js b/binaries/data/mods/public/simulation/components/tests/test_BuildRestrictions.js new file mode 100644 index 0000000000..d623efb9f7 --- /dev/null +++ b/binaries/data/mods/public/simulation/components/tests/test_BuildRestrictions.js @@ -0,0 +1,30 @@ +Engine.LoadComponentScript("interfaces/BuildRestrictions.js"); +Engine.LoadComponentScript("BuildRestrictions.js"); + +{ + const entity = 10; + const QueryOwnerInterface = () => ({ + "GetPlayerID": () => 1, + "IsAI": () => false + }); + Engine.RegisterGlobal("QueryOwnerInterface", QueryOwnerInterface); + const cmpBuildRestrictions = ConstructComponent(entity, "BuildRestrictions", { + "PlacementType": "land" + }); + + AddMock(SYSTEM_ENTITY, IID_RangeManager, { + "GetLosVisibility": (_, __) => "visible", + "GetEntitiesByPlayer": () => [] + }); + + AddMock(entity, IID_Ownership, { + "GetOwner": () => 1 + }); + + AddMock(entity, IID_Obstruction, { + "CheckFoundation": () => "fail_obstructs_foundation" + }); + + const result = cmpBuildRestrictions.CheckPlacement(); + TS_ASSERT_EQUALS(result.success, false); +}