Skip to content

Commit

Permalink
Better testing of InputLanguage.LayoutName
Browse files Browse the repository at this point in the history
  • Loading branch information
DJm00n committed Mar 31, 2023
1 parent f36d272 commit 2e1b71d
Showing 1 changed file with 32 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,12 @@
using System.Globalization;
using System.Reflection;
using Xunit;
using static Interop;

namespace System.Windows.Forms.Tests
{
// NB: doesn't require thread affinity
[UseDefaultXunitCulture(SetUnmanagedUiThreadCulture = true)]
public class InputLanguageTests
{
[Fact]
Expand Down Expand Up @@ -113,19 +115,41 @@ public void InputLanguage_GetHashCode_Invoke_RemainsSameAcrossCalls()

public static IEnumerable<object[]> InputLanguageLayoutId_TestData()
{
yield return new object[] { unchecked((nint)0x0000000000000409), "00000409" }; // US
yield return new object[] { unchecked((nint)0x0000000004090409), "00000409" }; // US
yield return new object[] { unchecked((nint)0x00000000040c0409), "0000040C" }; // French
yield return new object[] { unchecked((nint)0xfffffffff0200409), "00011009" }; // Canadian Multilingual Standard
yield return new object[] { unchecked((nint)0xfffffffff0b42400), "000C0C00" }; // Gothic
yield return new object[] { 0x0409, 0x0000, "en-US", "00000409", "US" };
yield return new object[] { 0x0409, 0x0409, "en-US", "00000409", "US" };
yield return new object[] { 0x0409, 0x040c, "en-US", "0000040C", "French" };
yield return new object[] { 0x0409, 0xf020, "en-US", "00011009", "Canadian Multilingual Standard" };
yield return new object[] { 0x0c0c, 0x1009, "fr-CA", "00001009", "Canadian French" };
yield return new object[] { 0x0c0c, 0xf020, "fr-CA", "00011009", "Canadian Multilingual Standard" };
}

[Theory]
[MemberData(nameof(InputLanguageLayoutId_TestData))]
public void InputLanguage_InputLanguageLayoutId_Expected(IntPtr handle, string layoutId)
public void InputLanguage_InputLanguageLayoutId_Expected(int langId, int device, string languageTag, string layoutId, string layoutName)
{
var language = new InputLanguage(handle);
var language = new InputLanguage(PARAM.FromLowHigh(langId, device));
Assert.Equal(languageTag, language.Culture.Name);
Assert.Equal(layoutId, language.LayoutId);
Assert.Equal(layoutName, language.LayoutName);
VerifyInputLanguage(language);
}

[Theory]
[InlineData(0x0000)]
[InlineData(0xffff)]
public void InputLanguage_Culture_ThrowsArgumentException(int langId)
{
var language = new InputLanguage(PARAM.FromLowHigh(langId, 0x0409));
Assert.ThrowsAny<ArgumentException>(() => language.Culture);
}

[Theory]
[InlineData(0xf000)]
[InlineData(0xffff)]
public void InputLanguage_LayoutName_UnknownExpected(int device)
{
var language = new InputLanguage(PARAM.FromLowHigh(0x0409, device));
Assert.Equal(SR.UnknownInputLanguageLayout, language.LayoutName);
}

private static void VerifyInputLanguage(InputLanguage language)
Expand All @@ -134,6 +158,7 @@ private static void VerifyInputLanguage(InputLanguage language)
Assert.NotNull(language.Culture);
Assert.NotNull(language.LayoutName);
Assert.NotEmpty(language.LayoutName);
Assert.NotEqual(SR.UnknownInputLanguageLayout, language.LayoutName);
Assert.DoesNotContain('\0', language.LayoutName);
}

Expand Down

0 comments on commit 2e1b71d

Please sign in to comment.