diff options
Diffstat (limited to 'tests/Agent.Core.Tests/LocaleCatalogTests.cs')
| -rw-r--r-- | tests/Agent.Core.Tests/LocaleCatalogTests.cs | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/tests/Agent.Core.Tests/LocaleCatalogTests.cs b/tests/Agent.Core.Tests/LocaleCatalogTests.cs new file mode 100644 index 0000000..e5b6085 --- /dev/null +++ b/tests/Agent.Core.Tests/LocaleCatalogTests.cs @@ -0,0 +1,54 @@ +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<string, object?> { ["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<LocaleException>(() => 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<LocaleException>(() => 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<LocaleException>(() => LocaleCatalog.Load(directory.Path, "ja")); + } +} |
