using Robust.Shared.Prototypes; using Robust.Shared.Localization; using Content.Shared.Language; using System.Linq; using System.Collections.Generic; namespace Content.IntegrationTests.Tests.Traits; /// /// Checks if every language has a valid name, chatname, and description localization string. /// [TestFixture] [TestOf(typeof(LanguagePrototype))] public sealed class LanguageLocalizationTest { [Test] public async Task TestLanguageLocalization() { await using var pair = await PoolManager.GetServerClient(); var server = pair.Server; var locale = server.ResolveDependency(); var proto = server.ResolveDependency(); await server.WaitAssertion(() => { var missingStrings = new List(); foreach (var langProto in proto.EnumeratePrototypes().OrderBy(a => a.ID)) foreach (var locString in new List { $"language-{langProto.ID}-name", $"chat-language-{langProto.ID}-name", $"language-{langProto.ID}-description" }) if (!locale.HasString(locString)) missingStrings.Add($"\"{langProto.ID}\", \"{locString}\""); Assert.That(!missingStrings.Any(), Is.True, $"The following languages are missing localization strings:\n {string.Join("\n ", missingStrings)}"); }); await pair.CleanReturnAsync(); } }