lightweight variant (#1)
Reviewed-on: #1 Co-authored-by: Aleksandr Neychev <alexnejchev73@gmail.com>
This commit was merged in pull request #1.
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
using System.Globalization;
|
||||
using CursorLang.Core.Models;
|
||||
|
||||
namespace CursorLang.Core.Tests.Models;
|
||||
|
||||
public sealed class KeyboardLayoutTests
|
||||
{
|
||||
[Theory]
|
||||
[InlineData(0x0409, "EN")]
|
||||
[InlineData(0x0419, "RU")]
|
||||
[InlineData(0x040C, "FR")]
|
||||
[InlineData(0x0407, "DE")]
|
||||
public void The_short_name_comes_from_the_language_code(int localeId, string expected)
|
||||
{
|
||||
KeyboardLayout layout = KeyboardLayout.FromLocaleId(localeId);
|
||||
|
||||
Assert.Equal(expected, layout.ShortName);
|
||||
Assert.Equal(localeId, layout.LocaleId);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void The_full_name_joins_the_short_name_and_the_native_language_name()
|
||||
{
|
||||
KeyboardLayout layout = KeyboardLayout.FromLocaleId(0x0419);
|
||||
|
||||
Assert.Equal($"RU — {new CultureInfo(0x0419).NativeName}", layout.DisplayName);
|
||||
}
|
||||
|
||||
// A layout may belong to a language the system does not know — that is not an error
|
||||
[Fact]
|
||||
public void An_unknown_locale_is_shown_by_its_own_code()
|
||||
{
|
||||
int unknown = FindUnknownLocaleId();
|
||||
|
||||
KeyboardLayout layout = KeyboardLayout.FromLocaleId(unknown);
|
||||
|
||||
string expected = $"0x{unknown:X4}";
|
||||
Assert.Equal(expected, layout.ShortName);
|
||||
Assert.Equal(expected, layout.DisplayName);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Layouts_of_the_same_locale_are_equal()
|
||||
{
|
||||
Assert.Equal(KeyboardLayout.FromLocaleId(0x0409), KeyboardLayout.FromLocaleId(0x0409));
|
||||
Assert.NotEqual(KeyboardLayout.FromLocaleId(0x0409), KeyboardLayout.FromLocaleId(0x0419));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void A_layout_can_also_be_built_directly()
|
||||
{
|
||||
var layout = new KeyboardLayout(1, "XX", "XX — language");
|
||||
|
||||
Assert.Equal(1, layout.LocaleId);
|
||||
Assert.Equal("XX", layout.ShortName);
|
||||
Assert.Equal("XX — language", layout.DisplayName);
|
||||
}
|
||||
|
||||
// An identifier with no culture behind it in Windows
|
||||
private static int FindUnknownLocaleId()
|
||||
{
|
||||
for (int candidate = 0x1000; candidate <= 0xFFFF; candidate++)
|
||||
{
|
||||
try
|
||||
{
|
||||
_ = new CultureInfo(candidate);
|
||||
}
|
||||
catch (CultureNotFoundException)
|
||||
{
|
||||
return candidate;
|
||||
}
|
||||
}
|
||||
|
||||
throw new InvalidOperationException("The system knows every locale identifier");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user