From 2469f0d51c15664bcce6e0e0e223b30da8717963 Mon Sep 17 00:00:00 2001 From: Ryan Nowak Date: Wed, 18 Apr 2018 13:47:49 -0400 Subject: [PATCH] Fix line endings on OSX This change makes our baseline system use CRLF for line endings end to end. This isn't needed for correctness, but it helps with quality of life when developing on OSX. This will avoid churn to the baseline files related to line endings when updating. This might only take effect if you nuke the TestFiles directory and check it out again. --- .gitattributes | 5 +++- .../RazorBaselineIntegrationTestBase.cs | 30 ++++++++++++++++--- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/.gitattributes b/.gitattributes index fa4a904c0..6e976cdb3 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,5 @@ # Force LF for package-lock files - not all version of NPM detect line endings. -package-lock.json text eol=lf \ No newline at end of file +package-lock.json text eol=lf + +# Use windows line endings in baselines to minimize churn to baseline files +TestFiles/** text eol=crlf diff --git a/test/Microsoft.AspNetCore.Blazor.Build.Test/RazorBaselineIntegrationTestBase.cs b/test/Microsoft.AspNetCore.Blazor.Build.Test/RazorBaselineIntegrationTestBase.cs index 1eda107ac..511b08694 100644 --- a/test/Microsoft.AspNetCore.Blazor.Build.Test/RazorBaselineIntegrationTestBase.cs +++ b/test/Microsoft.AspNetCore.Blazor.Build.Test/RazorBaselineIntegrationTestBase.cs @@ -56,7 +56,7 @@ protected void AssertDocumentNodeMatchesBaseline(RazorCodeDocument codeDocument) { var baselineFullPath = Path.Combine(TestProjectRoot, baselineFilePath); Directory.CreateDirectory(Path.GetDirectoryName(baselineFullPath)); - File.WriteAllText(baselineFullPath, IntermediateNodeSerializer.Serialize(document)); + WriteBaseline(IntermediateNodeSerializer.Serialize(document), baselineFullPath); return; } @@ -86,13 +86,13 @@ protected void AssertCSharpDocumentMatchesBaseline(RazorCodeDocument codeDocumen { var baselineFullPath = Path.Combine(TestProjectRoot, baselineFilePath); Directory.CreateDirectory(Path.GetDirectoryName(baselineFullPath)); - File.WriteAllText(baselineFullPath, document.GeneratedCode); + WriteBaseline(document.GeneratedCode, baselineFullPath); var baselineDiagnosticsFullPath = Path.Combine(TestProjectRoot, baselineDiagnosticsFilePath); var lines = document.Diagnostics.Select(RazorDiagnosticSerializer.Serialize).ToArray(); if (lines.Any()) { - File.WriteAllLines(baselineDiagnosticsFullPath, lines); + WriteBaseline(lines, baselineDiagnosticsFullPath); } else if (File.Exists(baselineDiagnosticsFullPath)) { @@ -103,7 +103,7 @@ protected void AssertCSharpDocumentMatchesBaseline(RazorCodeDocument codeDocumen var text = SourceMappingsSerializer.Serialize(document, codeDocument.Source); if (!string.IsNullOrEmpty(text)) { - File.WriteAllText(baselineMappingsFullPath, text); + WriteBaseline(text, baselineMappingsFullPath); } else if (File.Exists(baselineMappingsFullPath)) { @@ -175,5 +175,27 @@ private string GetBaselineFilePath(RazorCodeDocument codeDocument, string extens return Path.Combine(DirectoryPath, Path.ChangeExtension(fileName, extension)); } + + + private static void WriteBaseline(string text, string filePath) + { + var lines = text.Split(new char[]{ '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); + WriteBaseline(lines, filePath); + } + + private static void WriteBaseline(string[] lines, string filePath) + { + using (var writer = new StreamWriter(File.Open(filePath, FileMode.Create))) + { + // Force windows-style line endings so that we're consistent. This isn't + // required for correctness, but will prevent churcn when developing on OSX. + writer.NewLine = "\r\n"; + + for (var i = 0; i < lines.Length; i++) + { + writer.WriteLine(lines[i]); + } + } + } } }