Skip to content

Commit

Permalink
New InputLanguage tests for supplemental languages that have transien…
Browse files Browse the repository at this point in the history
…t LANGID values.
  • Loading branch information
DJm00n committed Mar 31, 2023
1 parent 97a4359 commit 77de3f4
Showing 1 changed file with 73 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.

using System.Diagnostics;
using System.Globalization;
using System.Reflection;
using System.Text;
using Xunit;
using static Interop;

Expand Down Expand Up @@ -134,6 +136,32 @@ public void InputLanguage_InputLanguageLayoutId_Expected(int langId, int device,
VerifyInputLanguage(language);
}

public static IEnumerable<object[]> SupplementalInputLanguages_TestData()
{
yield return new object[] { "ff-Adlm", "00140C00", "ADLaM" };
yield return new object[] { "got-Goth", "000C0C00", "Gothic" };
yield return new object[] { "jv-Java", "00110C00", "Javanese" };
yield return new object[] { "nqo", "00090C00", "N’Ko" };
yield return new object[] { "zgh-Tfng", "0000105F", "Tifinagh (Basic)" };
}

[Theory]
[MemberData(nameof(SupplementalInputLanguages_TestData))]
public void InputLanguage_FromCulture_SupplementalInputLanguages_Expected(string languageTag, string layoutId, string layoutName)
{
InstallUserLanguage(languageTag);

var culture = new CultureInfo(languageTag);
InputLanguage language = InputLanguage.FromCulture(culture);
Assert.NotNull(language);
Assert.Equal(languageTag, language.Culture.Name);
Assert.Equal(layoutId, language.LayoutId);
Assert.Equal(layoutName, language.LayoutName);
VerifyInputLanguage(language);

UninstallUserLanguage(languageTag);
}

[Theory]
[InlineData(0x0000)]
[InlineData(0x007f)]
Expand Down Expand Up @@ -162,5 +190,50 @@ private static void VerifyInputLanguage(InputLanguage language)
Assert.NotEqual(SR.UnknownInputLanguageLayout, language.LayoutName);
Assert.DoesNotContain('\0', language.LayoutName);
}

private void InstallUserLanguage(string languageTag)
{
var ps1File = Path.Combine(
Directory.GetCurrentDirectory(),
$"install-language-{languageTag}.ps1");

var sb = new StringBuilder();
sb.AppendLine("$list = Get-WinUserLanguageList");
sb.AppendLine($"$list.Add(\"{languageTag}\")");
sb.AppendLine("Set-WinUserLanguageList $list -force");
File.WriteAllText(ps1File, sb.ToString());

using (var process = new Process())
{
process.StartInfo.FileName = "powershell.exe";
process.StartInfo.Arguments = $"-NoProfile -ExecutionPolicy ByPass -File \"{ps1File}\"";

process.Start();
process.WaitForExit();
}
}

private void UninstallUserLanguage(string languageTag)
{
var ps1File = Path.Combine(
Directory.GetCurrentDirectory(),
$"uninstall-language-{languageTag}.ps1");

var sb = new StringBuilder();
sb.AppendLine("$list = Get-WinUserLanguageList");
sb.AppendLine($"$item = $list | Where-Object {{$_.LanguageTag -like \"{languageTag}\"}}");
sb.AppendLine("$list.Remove($item)");
sb.AppendLine("Set-WinUserLanguageList $list -force");
File.WriteAllText(ps1File, sb.ToString());

using (var process = new Process())
{
process.StartInfo.FileName = "powershell.exe";
process.StartInfo.Arguments = $"-NoProfile -ExecutionPolicy ByPass -File \"{ps1File}\"";

process.Start();
process.WaitForExit();
}
}
}
}

0 comments on commit 77de3f4

Please sign in to comment.