Add test that entity prototypes don't use LocIds for name/description (#38234)

* Add test that entity prototypes don't use LocIds for name/description

* Fix violation
This commit is contained in:
Tayrtahn
2025-06-10 20:47:04 -04:00
committed by GitHub
parent 4a34759514
commit 3dbb8905b5
3 changed files with 51 additions and 2 deletions

View File

@@ -0,0 +1,50 @@
using Robust.Shared.Localization;
using Robust.Shared.Prototypes;
namespace Content.IntegrationTests.Tests.Localization;
public sealed class EntityPrototypeLocalizationTest
{
/// <summary>
/// An explanation of why LocIds should not be used for entity prototype names/descriptions.
/// Appended to the error message when the test is failed.
/// </summary>
private const string NoLocIdExplanation = "Entity prototypes should not use LocIds for names/descriptions, as localization IDs are automated for entity prototypes. See https://docs.spacestation14.com/en/ss14-by-example/fluent-and-localization.html#localizing-prototypes for more information.";
/// <summary>
/// Checks that no entity prototypes have a LocId as their name or description.
/// See <see href="https://docs.spacestation14.com/en/ss14-by-example/fluent-and-localization.html#localizing-prototypes"/> for why this is important.
/// </summary>
[Test]
public async Task TestNoManualEntityLocStrings()
{
await using var pair = await PoolManager.GetServerClient();
var server = pair.Server;
var protoMan = server.ProtoMan;
var locMan = server.ResolveDependency<ILocalizationManager>();
var protos = protoMan.EnumeratePrototypes<EntityPrototype>();
Assert.Multiple(() =>
{
foreach (var proto in protos)
{
// Check name
if (!string.IsNullOrEmpty(proto.SetName))
{
Assert.That(locMan.HasString(proto.SetName), Is.False,
$"Entity prototype {proto.ID} has a LocId ({proto.SetName}) as a name. {NoLocIdExplanation}");
}
// Check description
if (!string.IsNullOrEmpty(proto.SetDesc))
{
Assert.That(locMan.HasString(proto.SetDesc), Is.False,
$"Entity prototype {proto.ID} has a LocId ({proto.SetDesc}) as a description. {NoLocIdExplanation}");
}
}
});
await pair.CleanReturnAsync();
}
}

View File

@@ -1 +0,0 @@
action-name-mapping-erase = Erase Entity

View File

@@ -28,7 +28,7 @@
- type: entity - type: entity
parent: BaseMappingAction parent: BaseMappingAction
id: ActionMappingEraser id: ActionMappingEraser
name: action-name-mapping-erase name: Erase Entity
components: components:
- type: Action - type: Action
icon: Interface/VerbIcons/delete.svg.192dpi.png icon: Interface/VerbIcons/delete.svg.192dpi.png