From 39e65877785c2738400b85df4f1469dc52986198 Mon Sep 17 00:00:00 2001 From: MarkKharitonov Date: Fri, 14 Oct 2022 18:20:19 -0400 Subject: [PATCH] Make the tests pass on Unix. (#500) Co-authored-by: Kharitonov, Mark --- .../FileSystemCachingStrategyTests.cs | 40 +++++++++++++------ tests/RazorLight.Precompile.Tests/Helper.cs | 2 +- .../PrecompileTestCases.cs | 34 ++++++++-------- .../PrecompileTests.cs | 2 +- .../Render1Tests.cs | 26 +++++------- .../Render2Tests.cs | 19 +++++---- .../Samples/FullMessage.cshtml | 2 +- .../SamplesWithBaseDir/FullMessage.cshtml | 2 +- .../TestWithCulture.cs | 12 ++++++ 9 files changed, 81 insertions(+), 58 deletions(-) create mode 100644 tests/RazorLight.Precompile.Tests/TestWithCulture.cs diff --git a/tests/RazorLight.Precompile.Tests/FileSystemCachingStrategyTests.cs b/tests/RazorLight.Precompile.Tests/FileSystemCachingStrategyTests.cs index a47c7f3..8ed30ee 100644 --- a/tests/RazorLight.Precompile.Tests/FileSystemCachingStrategyTests.cs +++ b/tests/RazorLight.Precompile.Tests/FileSystemCachingStrategyTests.cs @@ -1,5 +1,6 @@ using NUnit.Framework; using RazorLight.Caching; +using System.Runtime.InteropServices; namespace RazorLight.Precompile.Tests { @@ -11,19 +12,34 @@ public class FileSystemCachingStrategyTests SimpleFileCachingStrategy.Instance, }; - private static readonly string[] s_firstSepOptions = { "", "/", "\\" }; - private static readonly string[] s_secondSepOptions = { "/", "\\" }; + private static readonly string[] s_firstSepOptionsWindows = { "", "/", "\\" }; + private static readonly string[] s_secondSepOptionsWindows = { "/", "\\" }; + private static readonly string[] s_firstSepOptionsUnix = { "", "/" }; + private static readonly string[] s_secondSepOptionsUnix = { "/" }; + private static readonly IEnumerable s_sepCombinations = GetSeparatorCombinations(); private static IEnumerable GetSeparatorCombinations() { - foreach (var s11 in s_firstSepOptions) + string[] firstSepOptions, secondSepOptions; + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + firstSepOptions = s_firstSepOptionsWindows; + secondSepOptions = s_secondSepOptionsWindows; + } + else + { + firstSepOptions = s_firstSepOptionsUnix; + secondSepOptions = s_secondSepOptionsUnix; + } + + foreach (var s11 in firstSepOptions) { - foreach (var s12 in s_firstSepOptions) + foreach (var s12 in firstSepOptions) { - foreach (var s21 in s_secondSepOptions) + foreach (var s21 in secondSepOptions) { - foreach (var s22 in s_secondSepOptions) + foreach (var s22 in secondSepOptions) { if (s11 != s12 || s21 != s22) { @@ -38,9 +54,9 @@ private static IEnumerable GetSeparatorCombinations() [TestCaseSource(nameof(s_testCases))] public void DifferentKey(IFileSystemCachingStrategy s) { - var templateFilePath = "Samples\\folder\\MessageItem.cshtml"; - var o1 = s.GetCachedFileInfo("folder\\MessageItem.cshtml", templateFilePath, "X:\\"); - var o2 = s.GetCachedFileInfo("MessageItem.cshtml", templateFilePath, "X:\\"); + var templateFilePath = "Samples/folder/MessageItem.cshtml"; + var o1 = s.GetCachedFileInfo("folder/MessageItem.cshtml", templateFilePath, "X:/"); + var o2 = s.GetCachedFileInfo("MessageItem.cshtml", templateFilePath, "X:/"); Assert.AreNotEqual(o1.AssemblyFilePath, o2.AssemblyFilePath); } @@ -65,12 +81,12 @@ public void EquivalentKeySimpleFileCachingStrategy(string[] sepCombination) private static (string, string) GetAsmFilePaths(IFileSystemCachingStrategy s, string[] sepCombination) { - var templateFilePath = "Samples\\folder\\MessageItem.cshtml"; + var templateFilePath = "Samples/folder/MessageItem.cshtml"; string key1 = $"{sepCombination[0]}folder{sepCombination[1]}MessageItem.cshtml"; string key2 = $"{sepCombination[2]}folder{sepCombination[3]}MessageItem.cshtml"; Assert.AreNotEqual(key1, key2); - var asmFilePath1 = s.GetCachedFileInfo(key1, templateFilePath, "X:\\").AssemblyFilePath; - var asmFilePath2 = s.GetCachedFileInfo(key2, templateFilePath, "X:\\").AssemblyFilePath; + var asmFilePath1 = s.GetCachedFileInfo(key1, templateFilePath, "X:/").AssemblyFilePath; + var asmFilePath2 = s.GetCachedFileInfo(key2, templateFilePath, "X:/").AssemblyFilePath; return (asmFilePath1, asmFilePath2); } } diff --git a/tests/RazorLight.Precompile.Tests/Helper.cs b/tests/RazorLight.Precompile.Tests/Helper.cs index fe04791..3a0d9db 100644 --- a/tests/RazorLight.Precompile.Tests/Helper.cs +++ b/tests/RazorLight.Precompile.Tests/Helper.cs @@ -8,7 +8,7 @@ internal static class Helper public static string RunCommandTrimNewline(params string[] args) { var sb = RunCommand(args); - sb.Replace("\r\n", ""); + sb.Replace(Environment.NewLine, ""); return sb.ToString(); } diff --git a/tests/RazorLight.Precompile.Tests/PrecompileTestCases.cs b/tests/RazorLight.Precompile.Tests/PrecompileTestCases.cs index 9844541..66dccb7 100644 --- a/tests/RazorLight.Precompile.Tests/PrecompileTestCases.cs +++ b/tests/RazorLight.Precompile.Tests/PrecompileTestCases.cs @@ -104,23 +104,23 @@ public static void CleanupDlls(string dir) public static readonly TestCaseData[] TestCases = new TestCaseData[] { - new("Samples\\WorkItemFields.json", AllDefaults) { TestName = AllDefaults.Name }, - new("Samples\\FullMessage.cshtml", AllDefaults) { TestName = AllDefaults.Name }, - new("Samples\\folder\\MessageItem.cshtml", AllDefaults) { TestName = AllDefaults.Name }, - new("Samples\\WorkItemComment.cshtml", AllDefaults) { TestName = AllDefaults.Name }, - new("Samples\\FullMessage.cshtml", WithCache) { TestName = WithCache.Name }, - new("Samples\\folder\\MessageItem.cshtml", WithCache) { TestName = WithCache.Name }, - new("Samples\\FullMessage.cshtml", WithStrategyFileHash) { TestName = WithStrategyFileHash.Name }, - new("Samples\\folder\\MessageItem.cshtml", WithStrategyFileHash) { TestName = WithStrategyFileHash.Name }, - new("Samples\\FullMessage.cshtml", WithStrategySimple) { TestName = WithStrategySimple.Name }, - new("Samples\\folder\\MessageItem.cshtml", WithStrategySimple) { TestName = WithStrategySimple.Name }, - new("Samples\\FullMessage.cshtml", WithCacheAndStrategyFileHash) { TestName = WithCacheAndStrategyFileHash.Name }, - new("Samples\\folder\\MessageItem.cshtml", WithCacheAndStrategySimple) { TestName = WithCacheAndStrategySimple.Name }, - new("SamplesWithBaseDir\\FullMessage.cshtml", WithBase) { TestName = WithBase.Name }, - new("SamplesWithBaseDir\\MessageItem.cshtml", WithBase) { TestName = WithBase.Name }, - new("SamplesWithBaseDir\\FullMessage.cshtml", WithCacheAndBase) { TestName = WithCacheAndBase.Name }, - new("SamplesWithBaseDir\\MessageItem.cshtml", WithCacheAndBase) { TestName = WithCacheAndBase.Name }, - new("SamplesWithBaseDir\\FullMessage.cshtml", WithCacheAndBaseAndStrategySimple) { TestName = WithCacheAndBaseAndStrategySimple.Name }, + new("Samples/WorkItemFields.json", AllDefaults) { TestName = AllDefaults.Name }, + new("Samples/FullMessage.cshtml", AllDefaults) { TestName = AllDefaults.Name }, + new("Samples/folder/MessageItem.cshtml", AllDefaults) { TestName = AllDefaults.Name }, + new("Samples/WorkItemComment.cshtml", AllDefaults) { TestName = AllDefaults.Name }, + new("Samples/FullMessage.cshtml", WithCache) { TestName = WithCache.Name }, + new("Samples/folder/MessageItem.cshtml", WithCache) { TestName = WithCache.Name }, + new("Samples/FullMessage.cshtml", WithStrategyFileHash) { TestName = WithStrategyFileHash.Name }, + new("Samples/folder/MessageItem.cshtml", WithStrategyFileHash) { TestName = WithStrategyFileHash.Name }, + new("Samples/FullMessage.cshtml", WithStrategySimple) { TestName = WithStrategySimple.Name }, + new("Samples/folder/MessageItem.cshtml", WithStrategySimple) { TestName = WithStrategySimple.Name }, + new("Samples/FullMessage.cshtml", WithCacheAndStrategyFileHash) { TestName = WithCacheAndStrategyFileHash.Name }, + new("Samples/folder/MessageItem.cshtml", WithCacheAndStrategySimple) { TestName = WithCacheAndStrategySimple.Name }, + new("SamplesWithBaseDir/FullMessage.cshtml", WithBase) { TestName = WithBase.Name }, + new("SamplesWithBaseDir/MessageItem.cshtml", WithBase) { TestName = WithBase.Name }, + new("SamplesWithBaseDir/FullMessage.cshtml", WithCacheAndBase) { TestName = WithCacheAndBase.Name }, + new("SamplesWithBaseDir/MessageItem.cshtml", WithCacheAndBase) { TestName = WithCacheAndBase.Name }, + new("SamplesWithBaseDir/FullMessage.cshtml", WithCacheAndBaseAndStrategySimple) { TestName = WithCacheAndBaseAndStrategySimple.Name }, }; } } \ No newline at end of file diff --git a/tests/RazorLight.Precompile.Tests/PrecompileTests.cs b/tests/RazorLight.Precompile.Tests/PrecompileTests.cs index 4579c99..1841c3c 100644 --- a/tests/RazorLight.Precompile.Tests/PrecompileTests.cs +++ b/tests/RazorLight.Precompile.Tests/PrecompileTests.cs @@ -3,7 +3,7 @@ namespace RazorLight.Precompile.Tests { - public class PrecompileTests + public class PrecompileTests : TestWithCulture { [TestCaseSource(typeof(PrecompileTestCases), nameof(PrecompileTestCases.TestCases))] public void PrecompileFromScratch(string templateFilePath, TestScenario scenario) diff --git a/tests/RazorLight.Precompile.Tests/Render1Tests.cs b/tests/RazorLight.Precompile.Tests/Render1Tests.cs index b762721..fdd0754 100644 --- a/tests/RazorLight.Precompile.Tests/Render1Tests.cs +++ b/tests/RazorLight.Precompile.Tests/Render1Tests.cs @@ -2,7 +2,7 @@ namespace RazorLight.Precompile.Tests { - public class Render1Tests + public class Render1Tests : TestWithCulture { private static TestCaseData T(string templateFilePath, string? jsonQuery, string expected) => new(templateFilePath, jsonQuery, expected) { TestName = "{m}({0},{1})" }; @@ -22,9 +22,8 @@ private static TestCaseData T(string templateFilePath, string? jsonQuery, string ""resolution:UNRESOLVED"", ""status:OPEN"" ] -} -"), - T("folder\\MessageItem.cshtml", "[0]", @"Issue Id: 123 +}" + Environment.NewLine), + T("folder/MessageItem.cshtml", "[0]", @"Issue Id: 123
src/_sqlutil.async.cs:251
@@ -39,9 +38,8 @@ private static TestCaseData T(string templateFilePath, string? jsonQuery, string First Found Date: 9/9/2021 3:35:49 PM
Found no annotations. - -"), - T("folder\\MessageItem.cshtml", "[1]", @"Issue Id: 987 +" + Environment.NewLine), + T("folder/MessageItem.cshtml", "[1]", @"Issue Id: 987
src/sqlconnectioncontext.cs:35
@@ -62,21 +60,19 @@ private static TestCaseData T(string templateFilePath, string? jsonQuery, string COMMENT3/31/2021 6:42:26 PMJohn SmithMitigation statements reviewed. Recommend for closure and approval APPDESIGN10/22/2020 6:58:56 PMLi JetSome explanation - -"), +" + Environment.NewLine), T("WorkItemComment.cshtml", "[1].annotations[0]", @"Action: APPROVED Created: 3/31/2021 6:44:12 PM User name: Michael Jackson Approved per rationale provided and John Smith' review and approval on 3/30. - -") +" + Environment.NewLine) }; [TestCaseSource(nameof(s_testCases))] public void Render(string templateFilePath, string jsonQuery, string expected) { - templateFilePath = "Samples\\" + templateFilePath; + templateFilePath = "Samples/" + templateFilePath; string precompiledFilePath = Helper.RunCommandTrimNewline("precompile", "-t", templateFilePath); @@ -86,7 +82,7 @@ public void Render(string templateFilePath, string jsonQuery, string expected) "-p", precompiledFilePath, "-m", - "Samples\\FindingsWithSourceCodeInfo.json" + "Samples/FindingsWithSourceCodeInfo.json" }; if (jsonQuery != null) { @@ -100,7 +96,7 @@ public void Render(string templateFilePath, string jsonQuery, string expected) [TestCaseSource(nameof(s_testCases))] public void PrecompileAndRender(string templateFilePath, string jsonQuery, string expected) { - templateFilePath = "Samples\\" + templateFilePath; + templateFilePath = "Samples/" + templateFilePath; var commandLineArgs = new List { @@ -108,7 +104,7 @@ public void PrecompileAndRender(string templateFilePath, string jsonQuery, strin "-t", templateFilePath, "-m", - "Samples\\FindingsWithSourceCodeInfo.json" + "Samples/FindingsWithSourceCodeInfo.json" }; if (jsonQuery != null) { diff --git a/tests/RazorLight.Precompile.Tests/Render2Tests.cs b/tests/RazorLight.Precompile.Tests/Render2Tests.cs index 8492ca9..f685894 100644 --- a/tests/RazorLight.Precompile.Tests/Render2Tests.cs +++ b/tests/RazorLight.Precompile.Tests/Render2Tests.cs @@ -3,12 +3,12 @@ namespace RazorLight.Precompile.Tests { - public class Render2Tests + public class Render2Tests : TestWithCulture { private static TestCaseData T(string templateFilePath, string templateFilePath2, IFileSystemCachingStrategy s, string expected) => new(templateFilePath, templateFilePath2, s, expected) { TestName = "{m}({0},{1},{2})" }; - private const string EXPECTED = @"Count of issues with the source information: 2 + private static readonly string s_expected = @"Count of issues with the source information: 2

Issue Id: 123 @@ -50,13 +50,12 @@ private static TestCaseData T(string templateFilePath, string templateFilePath2, APPDESIGN10/22/2020 6:58:56 PMLi JetSome explanation

- -"; +" + Environment.NewLine; private static readonly TestCaseData[] s_testCases = new TestCaseData[] { - T("FullMessage.cshtml", "folder\\MessageItem.cshtml", FileHashCachingStrategy.Instance, EXPECTED), - T("FullMessage.cshtml", "folder\\MessageItem.cshtml", SimpleFileCachingStrategy.Instance, EXPECTED), + T("FullMessage.cshtml", "folder/MessageItem.cshtml", FileHashCachingStrategy.Instance, s_expected), + T("FullMessage.cshtml", "folder/MessageItem.cshtml", SimpleFileCachingStrategy.Instance, s_expected), }; [SetUp] @@ -86,7 +85,7 @@ public void RenderGlobRecursive(string key, string key2, IFileSystemCachingStrat { Precompile(key, key2, s); - Run(key, expected, "**\\*.dll"); + Run(key, expected, "**/*.dll"); } [TestCaseSource(nameof(s_testCases))] @@ -111,7 +110,7 @@ public void RenderGlobNonRecursive(string key, string key2, IFileSystemCachingSt { Precompile(key, key2, s); - var exc = Assert.Throws(() => Run(key, expected, "Samples\\*.dll")); + var exc = Assert.Throws(() => Run(key, expected, "Samples/*.dll")); Assert.AreEqual("No precompiled template found for the key /folder/MessageItem.cshtml", exc.Message); } @@ -128,7 +127,7 @@ private static void Run(string key, string expected, string precompiledFilePath, "-p", precompiledFilePath, "-m", - "Samples\\FindingsWithSourceCodeInfo.json", + "Samples/FindingsWithSourceCodeInfo.json", "-k", key }; @@ -151,7 +150,7 @@ public void PrecompileAndRender(string templateFilePath, string _, IFileSystemCa "-s", s.Name, "-m", - "Samples\\FindingsWithSourceCodeInfo.json" + "Samples/FindingsWithSourceCodeInfo.json" }; var actual = Helper.RunCommand(commandLineArgs.ToArray()).ToString(); diff --git a/tests/RazorLight.Precompile.Tests/Samples/FullMessage.cshtml b/tests/RazorLight.Precompile.Tests/Samples/FullMessage.cshtml index e070820..122b10e 100644 --- a/tests/RazorLight.Precompile.Tests/Samples/FullMessage.cshtml +++ b/tests/RazorLight.Precompile.Tests/Samples/FullMessage.cshtml @@ -3,6 +3,6 @@ Count of issues with the source information: @Model.Count @foreach (var item in Model) {

- @{await IncludeAsync("folder\\MessageItem.cshtml", item);} + @{await IncludeAsync("folder/MessageItem.cshtml", item);}

} diff --git a/tests/RazorLight.Precompile.Tests/SamplesWithBaseDir/FullMessage.cshtml b/tests/RazorLight.Precompile.Tests/SamplesWithBaseDir/FullMessage.cshtml index 60f47b8..fd8039c 100644 --- a/tests/RazorLight.Precompile.Tests/SamplesWithBaseDir/FullMessage.cshtml +++ b/tests/RazorLight.Precompile.Tests/SamplesWithBaseDir/FullMessage.cshtml @@ -3,6 +3,6 @@ Count of issues with the source information: @Model.Count @foreach (var item in Model) {

- @{await IncludeAsync("SamplesWithBaseDir\\MessageItem.cshtml", item);} + @{await IncludeAsync("SamplesWithBaseDir/MessageItem.cshtml", item);}

} diff --git a/tests/RazorLight.Precompile.Tests/TestWithCulture.cs b/tests/RazorLight.Precompile.Tests/TestWithCulture.cs new file mode 100644 index 0000000..6b50e78 --- /dev/null +++ b/tests/RazorLight.Precompile.Tests/TestWithCulture.cs @@ -0,0 +1,12 @@ +using System.Globalization; + +namespace RazorLight.Precompile.Tests +{ + public class TestWithCulture + { + public TestWithCulture() + { + CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("en-US"); + } + } +} \ No newline at end of file