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
COMMENT | 3/31/2021 6:42:26 PM | John Smith | Mitigation statements reviewed. Recommend for closure and approval |
APPDESIGN | 10/22/2020 6:58:56 PM | Li Jet | Some 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,
APPDESIGN | 10/22/2020 6:58:56 PM | Li Jet | Some 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