From d2816d6d0312b0c62e480c8e0500827b12980c47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Standa=20Luke=C5=A1?= Date: Sun, 25 Feb 2024 18:05:26 +0100 Subject: [PATCH] Fix culture in literal tests For some reason dotnet prefixes PM/AM with a different space on different systems. This replaces `en` culture with sv culture in the two problematic and fixes some issues with passing the culture into the DotvvmTestHelper --- src/Framework/Testing/ControlTestHelper.cs | 6 +- src/Framework/Testing/DotvvmTestHelper.cs | 30 ++++-- src/Tests/ControlTests/SimpleControlTests.cs | 92 ++++++++++--------- ...olTests.Literal_ClientServerRendering.html | 14 +-- .../Runtime/DotvvmControlRenderedHtmlTests.cs | 4 +- 5 files changed, 84 insertions(+), 62 deletions(-) diff --git a/src/Framework/Testing/ControlTestHelper.cs b/src/Framework/Testing/ControlTestHelper.cs index 2655c0f84f..13e1fad9b3 100644 --- a/src/Framework/Testing/ControlTestHelper.cs +++ b/src/Framework/Testing/ControlTestHelper.cs @@ -115,13 +115,13 @@ private TestDotvvmRequestContext PreparePage( CultureInfo? culture = null ) { - CultureInfo.CurrentCulture = culture ?? new CultureInfo("en-US"); - CultureInfo.CurrentUICulture = culture ?? new CultureInfo("en-US"); + CultureInfo.CurrentCulture = CultureInfo.CurrentUICulture = + culture ?? new CultureInfo("en-US"); Configuration.Freeze(); fileName = (fileName ?? "testpage") + ".dothtml"; var (_, controlBuilder) = CompilePage(markup, fileName, markupFiles); - return PrepareRequest(fileName, user: user); + return PrepareRequest(fileName, user: user, culture: culture); } public async Task RunPage( diff --git a/src/Framework/Testing/DotvvmTestHelper.cs b/src/Framework/Testing/DotvvmTestHelper.cs index 818897e46d..6d5999d6fb 100644 --- a/src/Framework/Testing/DotvvmTestHelper.cs +++ b/src/Framework/Testing/DotvvmTestHelper.cs @@ -4,7 +4,7 @@ using System.Linq; using System.Security; using System.Text; -using System.Threading; +using System.Threading.Tasks; using DotVVM.Framework.Compilation.ControlTree; using DotVVM.Framework.Compilation.ControlTree.Resolved; using DotVVM.Framework.Compilation.Parser.Dothtml.Parser; @@ -190,19 +190,35 @@ public static void EnsureCompiledAssemblyCache() public static void RunInCulture(CultureInfo cultureInfo, Action action) { - var originalCulture = Thread.CurrentThread.CurrentCulture; - var originalUICulture = Thread.CurrentThread.CurrentUICulture; + var originalCulture = CultureInfo.CurrentCulture; + var originalUICulture = CultureInfo.CurrentUICulture; - Thread.CurrentThread.CurrentCulture = cultureInfo; - Thread.CurrentThread.CurrentUICulture = cultureInfo; + CultureInfo.CurrentCulture = cultureInfo; + CultureInfo.CurrentUICulture = cultureInfo; try { action(); } finally { - Thread.CurrentThread.CurrentCulture = originalCulture; - Thread.CurrentThread.CurrentUICulture = originalUICulture; + CultureInfo.CurrentCulture = originalCulture; + CultureInfo.CurrentUICulture = originalUICulture; + } + } + public static async Task RunInCultureAsync(CultureInfo cultureInfo, Func action) + { + var originalCulture = CultureInfo.CurrentCulture; + var originalUICulture = CultureInfo.CurrentUICulture; + + CultureInfo.CurrentCulture = CultureInfo.CurrentUICulture = cultureInfo; + try + { + await action(); + } + finally + { + CultureInfo.CurrentCulture = originalCulture; + CultureInfo.CurrentUICulture = originalUICulture; } } diff --git a/src/Tests/ControlTests/SimpleControlTests.cs b/src/Tests/ControlTests/SimpleControlTests.cs index a18106d882..4d97b6fd7d 100644 --- a/src/Tests/ControlTests/SimpleControlTests.cs +++ b/src/Tests/ControlTests/SimpleControlTests.cs @@ -70,49 +70,55 @@ public async Task RouteLink() [TestMethod] public async Task Literal_ClientServerRendering() { - var r = await cth.RunPage(typeof(BasicTestViewModel), @" - - - {{value: Integer}} - {{value: Float}} - {{value: DateTime}} - {{value: NullableString}} - - - - {{value: Integer}} - {{value: Float}} - {{value: DateTime}} - {{value: NullableString}} - - - - - - - - - - - - - - - - - - - - - - - - - - " - ); - - check.CheckString(r.FormattedHtml, fileExtension: "html"); + await DotvvmTestHelper.RunInCultureAsync(new CultureInfo("sv"), async () => { + await Task.Delay(1); + Assert.AreEqual("sv", CultureInfo.CurrentCulture.Name); + var r = await cth.RunPage(typeof(BasicTestViewModel), """ + + {{resource: System.Globalization.CultureInfo.CurrentCulture.Name}} + + {{value: Integer}} + {{value: Float}} + {{value: DateTime}} + {{value: NullableString}} + + + + {{value: Integer}} + {{value: Float}} + {{value: DateTime}} + {{value: NullableString}} + + + + + + + + + + + + + + + + + + + + + + + + + + """, + culture: new CultureInfo("sv") + ); + Assert.AreEqual("sv", CultureInfo.CurrentCulture.Name); + check.CheckString(r.FormattedHtml, fileExtension: "html"); + }); } [TestMethod] diff --git a/src/Tests/ControlTests/testoutputs/SimpleControlTests.Literal_ClientServerRendering.html b/src/Tests/ControlTests/testoutputs/SimpleControlTests.Literal_ClientServerRendering.html index e206ab2c59..69863b52a5 100644 --- a/src/Tests/ControlTests/testoutputs/SimpleControlTests.Literal_ClientServerRendering.html +++ b/src/Tests/ControlTests/testoutputs/SimpleControlTests.Literal_ClientServerRendering.html @@ -2,11 +2,11 @@ - - + sv + - 10000000 0.11111 8/11/2020 4:01:44 PM + 10000000 0,11111 2020-08-11 16:01:44 @@ -19,8 +19,8 @@ 10000000 - 0.11111 - 8/11/2020 4:01:44 PM + 0,11111 + 2020-08-11 16:01:44 @@ -33,8 +33,8 @@ 989680 - 11.11% - Tuesday + 11,11 % + tisdag diff --git a/src/Tests/Runtime/DotvvmControlRenderedHtmlTests.cs b/src/Tests/Runtime/DotvvmControlRenderedHtmlTests.cs index 838c2182fb..18fc676565 100644 --- a/src/Tests/Runtime/DotvvmControlRenderedHtmlTests.cs +++ b/src/Tests/Runtime/DotvvmControlRenderedHtmlTests.cs @@ -197,7 +197,7 @@ public void MarkupControl_WrapperTagAndNoWrapperTagDirective() [TestMethod] public void Literal_DateTimeToBrowserLocalTime_RenderOnServer() { - DotvvmTestHelper.RunInCulture(new CultureInfo("en-US"), () => + DotvvmTestHelper.RunInCulture(new CultureInfo("sv"), () => { var vm = new LiteralDateTimeViewModel(); var control = $@"@viewModel {vm.GetType().FullName} @@ -207,7 +207,7 @@ public void Literal_DateTimeToBrowserLocalTime_RenderOnServer() var context = CreateContext(vm); var html = InvokeLifecycleAndRender(dotvvmBuilder.BuildView(context), context); - Assert.AreEqual(@"1/2/2021 3:04:05 AM1/2/2021 3:04:05 AM", html); + Assert.AreEqual(@"2021-01-02 03:04:052021-01-02 03:04:05", html); }); }