diff --git a/src/System.Windows.Forms/tests/UnitTests/System/Windows/Forms/InputLanguageTests.cs b/src/System.Windows.Forms/tests/UnitTests/System/Windows/Forms/InputLanguageTests.cs index b66fb70ef82..abc53b88204 100644 --- a/src/System.Windows.Forms/tests/UnitTests/System/Windows/Forms/InputLanguageTests.cs +++ b/src/System.Windows.Forms/tests/UnitTests/System/Windows/Forms/InputLanguageTests.cs @@ -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] @@ -113,19 +115,41 @@ public void InputLanguage_GetHashCode_Invoke_RemainsSameAcrossCalls() public static IEnumerable 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(() => 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) @@ -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); }