38 lines
1.3 KiB
C#
38 lines
1.3 KiB
C#
using ClaudeDo.Localization;
|
|
|
|
namespace ClaudeDo.Localization.Tests;
|
|
|
|
public class EnJsonCoverageTests
|
|
{
|
|
private static string LocalesDir()
|
|
{
|
|
var dir = AppContext.BaseDirectory;
|
|
while (dir is not null)
|
|
{
|
|
var candidate = Path.Combine(dir, "src", "ClaudeDo.Localization", "locales");
|
|
if (Directory.Exists(candidate)) return candidate;
|
|
dir = Path.GetDirectoryName(dir);
|
|
}
|
|
throw new DirectoryNotFoundException("Could not locate src/ClaudeDo.Localization/locales");
|
|
}
|
|
|
|
[Fact]
|
|
public void Every_locale_has_same_keys_as_english()
|
|
{
|
|
var store = LocaleStore.Load(LocalesDir());
|
|
Assert.True(store.TryGet("en", out var en));
|
|
var enKeys = en!.Strings.Keys.ToHashSet();
|
|
|
|
foreach (var locale in store.Available)
|
|
{
|
|
var keys = locale.Strings.Keys.ToHashSet();
|
|
var missing = enKeys.Except(keys).OrderBy(k => k).ToList();
|
|
var extra = keys.Except(enKeys).OrderBy(k => k).ToList();
|
|
Assert.True(missing.Count == 0,
|
|
$"Locale '{locale.Code}' missing keys: {string.Join(", ", missing)}");
|
|
Assert.True(extra.Count == 0,
|
|
$"Locale '{locale.Code}' has extra keys not in en.json: {string.Join(", ", extra)}");
|
|
}
|
|
}
|
|
}
|