From d12d29b595ebebec056e5fa53a468868593c718a Mon Sep 17 00:00:00 2001 From: whiskhub <173548087+whiskhub@users.noreply.github.com> Date: Wed, 20 Aug 2025 18:02:48 +0200 Subject: [PATCH 1/5] Allow empty string for PrimaryLanguageOverride to unset value Fixes https://github.com/microsoft/WindowsAppSDK/issues/5335 --- .../src/ApplicationLanguages.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/src/ApplicationLanguages.cpp b/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/src/ApplicationLanguages.cpp index 892a3ab55a..604eebc95c 100644 --- a/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/src/ApplicationLanguages.cpp +++ b/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/src/ApplicationLanguages.cpp @@ -41,7 +41,7 @@ namespace winrt::Microsoft::Windows::Globalization::implementation void ApplicationLanguages::PrimaryLanguageOverride(hstring const& language) { - bool isValidLanguageTag = IsWellFormedTag(language.c_str()); + bool isValidLanguageTag = language.empty() || IsWellFormedTag(language.c_str()); THROW_HR_IF_MSG(E_INVALIDARG, !isValidLanguageTag, "The parameter is incorrect"); From 7881142da5308416403f0473926b764a66544601 Mon Sep 17 00:00:00 2001 From: whiskhub <173548087+whiskhub@users.noreply.github.com> Date: Wed, 20 Aug 2025 18:13:33 +0200 Subject: [PATCH 2/5] Add unit test to verify PrimaryLanguageOverride unset behavior --- .../TestCommon/CommonTestCode.cs | 19 +++++++++++++++++++ .../unittests/UnitTest.cs | 16 ++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/TestCommon/CommonTestCode.cs b/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/TestCommon/CommonTestCode.cs index ee9ce0b7c7..3ae2eca55d 100644 --- a/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/TestCommon/CommonTestCode.cs +++ b/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/TestCommon/CommonTestCode.cs @@ -585,4 +585,23 @@ public static void NoResourceFileWithContextTest() Verify.IsNull(resourceCandidate); } } + + public class ApplicationLanguagesTest + { + public static void PrimaryLanguageOverrideAcceptsEmptyStringTest() + { + ApplicationLanguages.PrimaryLanguageOverride = "fr-FR"; + ApplicationLanguages.PrimaryLanguageOverride = ""; + + Verify.AreEqual(ApplicationLanguages.PrimaryLanguageOverride, ""); + } + + public static void PrimaryLanguageOverrideAcceptsNullStringTest() + { + ApplicationLanguages.PrimaryLanguageOverride = "fr-FR"; + ApplicationLanguages.PrimaryLanguageOverride = null; + + Verify.AreEqual(ApplicationLanguages.PrimaryLanguageOverride, ""); // C# projection of null HSTRING is empty string + } + } } diff --git a/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/unittests/UnitTest.cs b/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/unittests/UnitTest.cs index b234aea5a7..7bd568439d 100644 --- a/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/unittests/UnitTest.cs +++ b/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/unittests/UnitTest.cs @@ -165,4 +165,20 @@ public void NoResourceFileWithContextTest() CommonTestCode.ResourceContextTest.NoResourceFileWithContextTest(); } } + + [TestClass] + public class ApplicationLanguagesTest + { + [TestMethod] + public void PrimaryLanguageOverrideAcceptsEmptyStringTest() + { + CommonTestCode.ApplicationLanguagesTest.PrimaryLanguageOverrideAcceptsEmptyStringTest(); + } + + [TestMethod] + public void PrimaryLanguageOverrideAcceptsNullStringTest() + { + CommonTestCode.ApplicationLanguagesTest.PrimaryLanguageOverrideAcceptsNullStringTest(); + } + } } From 076d803039aad58723998bb94cbaa216031efd52 Mon Sep 17 00:00:00 2001 From: whiskhub <173548087+whiskhub@users.noreply.github.com> Date: Fri, 26 Sep 2025 19:09:16 +0200 Subject: [PATCH 3/5] Add test to verify OS value is properly set --- .../TestCommon/CommonTestCode.cs | 9 +++++++++ .../unittests/UnitTest.cs | 6 ++++++ 2 files changed, 15 insertions(+) diff --git a/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/TestCommon/CommonTestCode.cs b/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/TestCommon/CommonTestCode.cs index 3ae2eca55d..b2bee0303f 100644 --- a/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/TestCommon/CommonTestCode.cs +++ b/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/TestCommon/CommonTestCode.cs @@ -603,5 +603,14 @@ public static void PrimaryLanguageOverrideAcceptsNullStringTest() Verify.AreEqual(ApplicationLanguages.PrimaryLanguageOverride, ""); // C# projection of null HSTRING is empty string } + + public static void PrimaryLanguageOverrideSetsWindowsValueTest() + { + ApplicationLanguages.PrimaryLanguageOverride = "fr-FR"; + Verify.AreEqual(Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride, "fr-FR"); + + ApplicationLanguages.PrimaryLanguageOverride = null; + Verify.AreEqual(Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride, ""); // C# projection of null HSTRING is empty string + } } } diff --git a/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/unittests/UnitTest.cs b/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/unittests/UnitTest.cs index 7bd568439d..4bda9b9fcf 100644 --- a/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/unittests/UnitTest.cs +++ b/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/unittests/UnitTest.cs @@ -180,5 +180,11 @@ public void PrimaryLanguageOverrideAcceptsNullStringTest() { CommonTestCode.ApplicationLanguagesTest.PrimaryLanguageOverrideAcceptsNullStringTest(); } + + [TestMethod] + public void PrimaryLanguageOverrideSetsWindowsValueTest() + { + CommonTestCode.ApplicationLanguagesTest.PrimaryLanguageOverrideSetsWindowsValueTest(); + } } } From fd9e16d4fff9f61d031ec93fcd206845832f3a38 Mon Sep 17 00:00:00 2001 From: whiskhub <173548087+whiskhub@users.noreply.github.com> Date: Fri, 26 Sep 2025 23:36:01 +0200 Subject: [PATCH 4/5] Move packaged-only tests --- .../TestCommon/CommonTestCode.cs | 9 --------- .../unittests/UnitTest.cs | 6 +++++- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/TestCommon/CommonTestCode.cs b/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/TestCommon/CommonTestCode.cs index b2bee0303f..3ae2eca55d 100644 --- a/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/TestCommon/CommonTestCode.cs +++ b/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/TestCommon/CommonTestCode.cs @@ -603,14 +603,5 @@ public static void PrimaryLanguageOverrideAcceptsNullStringTest() Verify.AreEqual(ApplicationLanguages.PrimaryLanguageOverride, ""); // C# projection of null HSTRING is empty string } - - public static void PrimaryLanguageOverrideSetsWindowsValueTest() - { - ApplicationLanguages.PrimaryLanguageOverride = "fr-FR"; - Verify.AreEqual(Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride, "fr-FR"); - - ApplicationLanguages.PrimaryLanguageOverride = null; - Verify.AreEqual(Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride, ""); // C# projection of null HSTRING is empty string - } } } diff --git a/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/unittests/UnitTest.cs b/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/unittests/UnitTest.cs index 4bda9b9fcf..6dbd85dce0 100644 --- a/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/unittests/UnitTest.cs +++ b/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/unittests/UnitTest.cs @@ -184,7 +184,11 @@ public void PrimaryLanguageOverrideAcceptsNullStringTest() [TestMethod] public void PrimaryLanguageOverrideSetsWindowsValueTest() { - CommonTestCode.ApplicationLanguagesTest.PrimaryLanguageOverrideSetsWindowsValueTest(); + ApplicationLanguages.PrimaryLanguageOverride = "fr-FR"; + Verify.AreEqual(Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride, "fr-FR"); + + ApplicationLanguages.PrimaryLanguageOverride = null; + Verify.AreEqual(Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride, ""); // C# projection of null HSTRING is empty string } } } From 13520296ac7ab709ec8cff3dc4e97ff6d021647c Mon Sep 17 00:00:00 2001 From: whiskhub <173548087+whiskhub@users.noreply.github.com> Date: Tue, 30 Sep 2025 21:16:36 +0200 Subject: [PATCH 5/5] Fix namespace usings --- .../TestCommon/CommonTestCode.cs | 2 ++ .../unittests/UnitTest.cs | 1 + 2 files changed, 3 insertions(+) diff --git a/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/TestCommon/CommonTestCode.cs b/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/TestCommon/CommonTestCode.cs index 3ae2eca55d..b5991fd3ab 100644 --- a/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/TestCommon/CommonTestCode.cs +++ b/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/TestCommon/CommonTestCode.cs @@ -5,6 +5,7 @@ using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using Microsoft.Windows.ApplicationModel.Resources; +using Microsoft.Windows.Globalization; #else using System; using System.ComponentModel; @@ -18,6 +19,7 @@ using WEX.TestExecution; using WEX.TestExecution.Markup; using Microsoft.Windows.ApplicationModel.Resources; +using Microsoft.Windows.Globalization; #endif namespace CommonTestCode diff --git a/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/unittests/UnitTest.cs b/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/unittests/UnitTest.cs index 6dbd85dce0..528a55c93f 100644 --- a/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/unittests/UnitTest.cs +++ b/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/unittests/UnitTest.cs @@ -3,6 +3,7 @@ using System; using Microsoft.Windows.ApplicationModel.Resources; +using Microsoft.Windows.Globalization; using WEX.Common.Managed; using WEX.Logging.Interop; using WEX.TestExecution;