using Agent.Core.Localization; namespace Agent.Core.Tests; public sealed class LocaleCatalogTests { [Fact] public void MissingSelectedKeyFallsBackToEnglish() { using var directory = new TestDirectory(); directory.File("en.json", """{"hello":"Hello {name}","only_en":"fallback"}"""); directory.File("ja.json", """{"hello":"こんにちは {name}"}"""); LocaleCatalog catalog = LocaleCatalog.Load(directory.Path, "ja"); Assert.Equal("fallback", catalog.Get("only_en")); Assert.Equal("こんにちは Codex", catalog.Format("hello", new Dictionary { ["name"] = "Codex" })); } [Fact] public void AdditionalLocaleLoadsWithoutCodeChange() { using var directory = new TestDirectory(); directory.File("en.json", """{"hello":"Hello"}"""); directory.File("zh-CN.json", """{"hello":"你好"}"""); Assert.Equal("你好", LocaleCatalog.Load(directory.Path, "zh-CN").Get("hello")); } [Theory] [InlineData("{broken")] [InlineData("[]")] public void MalformedLocaleIsFatal(string json) { using var directory = new TestDirectory(); directory.File("en.json", json); Assert.Throws(() => LocaleCatalog.Load(directory.Path, "en")); } [Fact] public void UnknownKeyIsFatal() { using var directory = new TestDirectory(); directory.File("en.json", """{"known":"value"}"""); directory.File("ja.json", """{"known":"値","unknown":"x"}"""); Assert.Throws(() => LocaleCatalog.Load(directory.Path, "ja")); } [Fact] public void PlaceholderMismatchIsFatal() { using var directory = new TestDirectory(); directory.File("en.json", """{"hello":"Hello {name}"}"""); directory.File("ja.json", """{"hello":"こんにちは {user}"}"""); Assert.Throws(() => LocaleCatalog.Load(directory.Path, "ja")); } }