From 06591801193c0647d0a86cae1c5ff44db368bbaa Mon Sep 17 00:00:00 2001 From: Ajay Bhargav Baaskaran Date: Fri, 28 Jun 2019 11:02:55 -0700 Subject: [PATCH] Do case insensitive comparison in DefaultRazorProjectFileSystem.GetItem (dotnet/aspnetcore-tooling#709) \n\nCommit migrated from https://github.com/dotnet/aspnetcore-tooling/commit/ff305c700f72e199c9a41ee43fdc21e7dfa7020c --- .../src/DefaultRazorProjectFileSystem.cs | 2 +- .../test/DefaultRazorProjectFileSystemTest.cs | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/DefaultRazorProjectFileSystem.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/DefaultRazorProjectFileSystem.cs index 889c8cdb75..c80f43307b 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/DefaultRazorProjectFileSystem.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/DefaultRazorProjectFileSystem.cs @@ -50,7 +50,7 @@ namespace Microsoft.AspNetCore.Razor.Language var absolutePath = NormalizeAndEnsureValidPath(path); var file = new FileInfo(absolutePath); - if (!absolutePath.StartsWith(absoluteBasePath)) + if (!absolutePath.StartsWith(absoluteBasePath, StringComparison.OrdinalIgnoreCase)) { throw new InvalidOperationException($"The file '{absolutePath}' is not a descendent of the base path '{absoluteBasePath}'."); } diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/test/DefaultRazorProjectFileSystemTest.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/test/DefaultRazorProjectFileSystemTest.cs index 6c92f7ddb7..a22bb737fa 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/test/DefaultRazorProjectFileSystemTest.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/test/DefaultRazorProjectFileSystemTest.cs @@ -5,6 +5,7 @@ using System; using System.IO; using System.Linq; using Microsoft.AspNetCore.Testing; +using Microsoft.AspNetCore.Testing.xunit; using Xunit; namespace Microsoft.AspNetCore.Razor.Language @@ -258,6 +259,26 @@ namespace Microsoft.AspNetCore.Razor.Language Assert.Equal(Path.Combine("Views", "About", "About.cshtml"), item.RelativePhysicalPath); } + [ConditionalFact] + [OSSkipCondition(OperatingSystems.Linux, SkipReason = "This test does not makes sense for case sensitive Operating Systems.")] + public void GetItem_MismatchedCase_ReturnsFileFromDisk() + { + // Arrange + var filePath = "/Views/About/About.cshtml"; + var lowerCaseTestFolder = TestFolder.ToLower(); + var fileSystem = new DefaultRazorProjectFileSystem(lowerCaseTestFolder); + + // Act + var item = fileSystem.GetItem(filePath, fileKind: null); + + // Assert + Assert.True(item.Exists); + Assert.Equal(filePath, item.FilePath); + Assert.Equal("/", item.BasePath); + Assert.Equal(Path.Combine(lowerCaseTestFolder, "Views", "About", "About.cshtml"), item.PhysicalPath); + Assert.Equal(Path.Combine("Views", "About", "About.cshtml"), item.RelativePhysicalPath); + } + [Fact] public void GetItem_ReturnsNotFoundResult() {