Remove usage of NotFoundProjectItem
We're making this type internal in Razor, using a mock here is fine. Also renamed some types with a generic name. The actual 'default' RazorProject class lives in Razor and is internal.
This commit is contained in:
parent
8f52507e9d
commit
b2d95ffb21
|
|
@ -158,7 +158,7 @@ namespace Microsoft.Extensions.DependencyInjection
|
|||
//
|
||||
// Razor compilation infrastructure
|
||||
//
|
||||
services.TryAddSingleton<RazorProject, DefaultRazorProject>();
|
||||
services.TryAddSingleton<RazorProject, FileProviderRazorProject>();
|
||||
services.TryAddSingleton<RazorTemplateEngine, MvcRazorTemplateEngine>();
|
||||
services.TryAddSingleton<RazorCompiler>();
|
||||
services.TryAddSingleton<LazyMetadataReferenceFeature>();
|
||||
|
|
|
|||
|
|
@ -9,18 +9,17 @@ using Microsoft.Extensions.FileProviders;
|
|||
|
||||
namespace Microsoft.AspNetCore.Mvc.Razor.Internal
|
||||
{
|
||||
public class DefaultRazorProject : RazorProject
|
||||
public class FileProviderRazorProject : RazorProject
|
||||
{
|
||||
private const string RazorFileExtension = ".cshtml";
|
||||
private readonly IFileProvider _provider;
|
||||
|
||||
public DefaultRazorProject(IRazorViewEngineFileProviderAccessor accessor)
|
||||
public FileProviderRazorProject(IRazorViewEngineFileProviderAccessor accessor)
|
||||
: this(accessor.FileProvider)
|
||||
{
|
||||
}
|
||||
|
||||
// Internal for unit testing
|
||||
internal DefaultRazorProject(IFileProvider provider)
|
||||
public FileProviderRazorProject(IFileProvider provider)
|
||||
{
|
||||
_provider = provider;
|
||||
}
|
||||
|
|
@ -29,7 +28,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Internal
|
|||
{
|
||||
path = NormalizeAndEnsureValidPath(path);
|
||||
var fileInfo = _provider.GetFileInfo(path);
|
||||
return new DefaultRazorProjectItem(fileInfo, basePath: string.Empty, path: path);
|
||||
return new FileProviderRazorProjectItem(fileInfo, basePath: string.Empty, path: path);
|
||||
}
|
||||
|
||||
public override IEnumerable<RazorProjectItem> EnumerateItems(string path)
|
||||
|
|
@ -56,7 +55,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Internal
|
|||
}
|
||||
else if (string.Equals(RazorFileExtension, Path.GetExtension(file.Name), StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
yield return new DefaultRazorProjectItem(file, basePath, prefix + "/" + file.Name);
|
||||
yield return new FileProviderRazorProjectItem(file, basePath, prefix + "/" + file.Name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -7,9 +7,9 @@ using Microsoft.Extensions.FileProviders;
|
|||
|
||||
namespace Microsoft.AspNetCore.Mvc.Razor.Internal
|
||||
{
|
||||
public class DefaultRazorProjectItem : RazorProjectItem
|
||||
public class FileProviderRazorProjectItem : RazorProjectItem
|
||||
{
|
||||
public DefaultRazorProjectItem(IFileInfo fileInfo, string basePath, string path)
|
||||
public FileProviderRazorProjectItem(IFileInfo fileInfo, string basePath, string path)
|
||||
{
|
||||
FileInfo = fileInfo;
|
||||
BasePath = basePath;
|
||||
|
|
@ -48,10 +48,18 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Internal
|
|||
public void GetOrAdd_ReturnsFileNotFoundResult_IfFileIsNotFoundInFileSystem()
|
||||
{
|
||||
// Arrange
|
||||
var item = new Mock<RazorProjectItem>();
|
||||
item
|
||||
.SetupGet(i => i.Path)
|
||||
.Returns("/path");
|
||||
item
|
||||
.SetupGet(i => i.Exists)
|
||||
.Returns(false);
|
||||
|
||||
var fileProvider = new TestFileProvider();
|
||||
var cache = new CompilerCache(fileProvider);
|
||||
var compilerCacheContext = new CompilerCacheContext(
|
||||
new NotFoundProjectItem("", "/path"),
|
||||
item.Object,
|
||||
Enumerable.Empty<RazorProjectItem>(),
|
||||
_ => throw new Exception("Shouldn't be called."));
|
||||
|
||||
|
|
@ -113,10 +121,20 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Internal
|
|||
// Arrange
|
||||
var fileProvider = new TestFileProvider();
|
||||
var fileInfo = fileProvider.AddFile(ViewPath, "some content");
|
||||
|
||||
var foundItem = new FileProviderRazorProjectItem(fileInfo, "", ViewPath);
|
||||
|
||||
var notFoundItem = new Mock<RazorProjectItem>();
|
||||
notFoundItem
|
||||
.SetupGet(i => i.Path)
|
||||
.Returns(ViewPath);
|
||||
notFoundItem
|
||||
.SetupGet(i => i.Exists)
|
||||
.Returns(false);
|
||||
|
||||
var cache = new CompilerCache(fileProvider);
|
||||
var expected = new CompilationResult(typeof(TestView));
|
||||
var projectItem = new DefaultRazorProjectItem(fileInfo, "", ViewPath);
|
||||
var cacheContext = new CompilerCacheContext(projectItem, Enumerable.Empty<RazorProjectItem>(), _ => expected);
|
||||
var cacheContext = new CompilerCacheContext(foundItem, Enumerable.Empty<RazorProjectItem>(), _ => expected);
|
||||
|
||||
// Act 1
|
||||
var result1 = cache.GetOrAdd(ViewPath, _ => cacheContext);
|
||||
|
|
@ -419,7 +437,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Internal
|
|||
{
|
||||
return cache.GetOrAdd("/Views/Home/Index.cshtml", path =>
|
||||
{
|
||||
var projectItem = new DefaultRazorProjectItem(new TestFileInfo(), "", path);
|
||||
var projectItem = new FileProviderRazorProjectItem(new TestFileInfo(), "", path);
|
||||
return new CompilerCacheContext(projectItem, Enumerable.Empty<RazorProjectItem>(), compile1);
|
||||
});
|
||||
});
|
||||
|
|
@ -429,7 +447,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Internal
|
|||
// Event 4
|
||||
return cache.GetOrAdd("/Views/Home/About.cshtml", path =>
|
||||
{
|
||||
var projectItem = new DefaultRazorProjectItem(new TestFileInfo(), "", path);
|
||||
var projectItem = new FileProviderRazorProjectItem(new TestFileInfo(), "", path);
|
||||
return new CompilerCacheContext(projectItem, Enumerable.Empty<RazorProjectItem>(), compile2);
|
||||
});
|
||||
});
|
||||
|
|
@ -472,7 +490,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Internal
|
|||
{
|
||||
return cache.GetOrAdd(ViewPath, path =>
|
||||
{
|
||||
var projectItem = new DefaultRazorProjectItem(new TestFileInfo(), "", path);
|
||||
var projectItem = new FileProviderRazorProjectItem(new TestFileInfo(), "", path);
|
||||
return new CompilerCacheContext(projectItem, Enumerable.Empty<RazorProjectItem>(), compile);
|
||||
});
|
||||
});
|
||||
|
|
@ -607,7 +625,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Internal
|
|||
private CompilerCacheContext ThrowsIfCalled(string path, Exception exception)
|
||||
{
|
||||
exception = exception ?? new Exception("Shouldn't be called");
|
||||
var projectItem = new DefaultRazorProjectItem(new TestFileInfo(), "", path);
|
||||
var projectItem = new FileProviderRazorProjectItem(new TestFileInfo(), "", path);
|
||||
|
||||
return new CompilerCacheContext(
|
||||
projectItem,
|
||||
|
|
@ -622,12 +640,12 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Internal
|
|||
|
||||
private CompilerCacheContext CreateCacheContext(CompilationResult compile, string path = ViewPath)
|
||||
{
|
||||
var projectItem = new DefaultRazorProjectItem(new TestFileInfo(), "", path);
|
||||
var projectItem = new FileProviderRazorProjectItem(new TestFileInfo(), "", path);
|
||||
|
||||
var imports = new List<RazorProjectItem>();
|
||||
foreach (var importFilePath in _viewImportsPath)
|
||||
{
|
||||
var importProjectItem = new DefaultRazorProjectItem(new TestFileInfo(), "", importFilePath);
|
||||
var importProjectItem = new FileProviderRazorProjectItem(new TestFileInfo(), "", importFilePath);
|
||||
|
||||
imports.Add(importProjectItem);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Internal
|
|||
return new RazorCompiler(
|
||||
Mock.Of<ICompilationService>(),
|
||||
compilerCacheProvider.Object,
|
||||
new MvcRazorTemplateEngine(RazorEngine.Create(), new DefaultRazorProject(new TestFileProvider())));
|
||||
new MvcRazorTemplateEngine(RazorEngine.Create(), new FileProviderRazorProject(new TestFileProvider())));
|
||||
}
|
||||
|
||||
private class TestRazorPage : RazorPage
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ using Xunit;
|
|||
|
||||
namespace Microsoft.AspNetCore.Mvc.Razor.Internal
|
||||
{
|
||||
public class DefaultRazorProjectTest
|
||||
public class FileProviderRazorProjectTest
|
||||
{
|
||||
[Fact]
|
||||
public void EnumerateFiles_ReturnsEmptySequenceIfNoCshtmlFilesArePresent()
|
||||
|
|
@ -18,7 +18,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Internal
|
|||
var file2 = fileProvider.AddFile("File2.js", "content");
|
||||
fileProvider.AddDirectoryContent("/", new IFileInfo[] { file1, file2 });
|
||||
|
||||
var razorProject = new DefaultRazorProject(fileProvider);
|
||||
var razorProject = new FileProviderRazorProject(fileProvider);
|
||||
|
||||
// Act
|
||||
var razorFiles = razorProject.EnumerateItems("/");
|
||||
|
|
@ -37,7 +37,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Internal
|
|||
var file3 = fileProvider.AddFile("File3.cshtml", "content");
|
||||
fileProvider.AddDirectoryContent("/", new IFileInfo[] { file1, file2, file3 });
|
||||
|
||||
var razorProject = new DefaultRazorProject(fileProvider);
|
||||
var razorProject = new FileProviderRazorProject(fileProvider);
|
||||
|
||||
// Act
|
||||
var razorFiles = razorProject.EnumerateItems("/");
|
||||
|
|
@ -75,7 +75,8 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Internal
|
|||
var file5 = fileProvider.AddFile("Level1-Dir2/File5.cshtml", "content");
|
||||
fileProvider.AddDirectoryContent("/Level1-Dir2", new IFileInfo[] { file5 });
|
||||
fileProvider.AddDirectoryContent("/Level1/Level2", new IFileInfo[0]);
|
||||
var razorProject = new DefaultRazorProject(fileProvider);
|
||||
|
||||
var razorProject = new FileProviderRazorProject(fileProvider);
|
||||
|
||||
// Act
|
||||
var razorFiles = razorProject.EnumerateItems("/");
|
||||
|
|
@ -115,7 +116,8 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Internal
|
|||
var file5 = fileProvider.AddFile("Level1-Dir2/File5.cshtml", "content");
|
||||
fileProvider.AddDirectoryContent("/Level1-Dir2", new IFileInfo[] { file5 });
|
||||
fileProvider.AddDirectoryContent("/Level1/Level2", new IFileInfo[0]);
|
||||
var razorProject = new DefaultRazorProject(fileProvider);
|
||||
|
||||
var razorProject = new FileProviderRazorProject(fileProvider);
|
||||
|
||||
// Act
|
||||
var razorFiles = razorProject.EnumerateItems("/Level1-Dir1");
|
||||
|
|
@ -21,7 +21,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Internal
|
|||
var razorEngine = RazorEngine.Create();
|
||||
var fileProvider = new TestFileProvider();
|
||||
fileProvider.AddFile(viewPath, "<span name=\"@(User.Id\">");
|
||||
var razorProject = new DefaultRazorProject(fileProvider);
|
||||
var razorProject = new FileProviderRazorProject(fileProvider);
|
||||
|
||||
var templateEngine = new MvcRazorTemplateEngine(razorEngine, razorProject);
|
||||
var compiler = new RazorCompiler(
|
||||
|
|
@ -56,7 +56,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Internal
|
|||
var fileProvider = new TestFileProvider();
|
||||
var file = fileProvider.AddFile(viewPath, "<span name=\"@(User.Id\">");
|
||||
file.PhysicalPath = physicalPath;
|
||||
var razorProject = new DefaultRazorProject(fileProvider);
|
||||
var razorProject = new FileProviderRazorProject(fileProvider);
|
||||
|
||||
var templateEngine = new MvcRazorTemplateEngine(razorEngine, razorProject);
|
||||
var compiler = new RazorCompiler(
|
||||
|
|
@ -90,7 +90,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Internal
|
|||
var razorEngine = RazorEngine.Create();
|
||||
var fileProvider = new TestFileProvider();
|
||||
fileProvider.AddFile(viewPath, fileContent);
|
||||
var razorProject = new DefaultRazorProject(fileProvider);
|
||||
var razorProject = new FileProviderRazorProject(fileProvider);
|
||||
|
||||
var templateEngine = new MvcRazorTemplateEngine(razorEngine, razorProject);
|
||||
var compiler = new RazorCompiler(
|
||||
|
|
@ -122,7 +122,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Internal
|
|||
fileProvider.AddFile(viewPath, fileContent);
|
||||
var importsFile = fileProvider.AddFile("/Views/_MyImports.cshtml", importsContent);
|
||||
importsFile.PhysicalPath = importsFilePath;
|
||||
var razorProject = new DefaultRazorProject(fileProvider);
|
||||
var razorProject = new FileProviderRazorProject(fileProvider);
|
||||
|
||||
var templateEngine = new MvcRazorTemplateEngine(razorEngine, razorProject)
|
||||
{
|
||||
|
|
@ -186,7 +186,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Internal
|
|||
var compiler = new RazorCompiler(
|
||||
Mock.Of<ICompilationService>(),
|
||||
GetCompilerCacheProvider(fileProvider),
|
||||
new MvcRazorTemplateEngine(RazorEngine.Create(), new DefaultRazorProject(fileProvider)));
|
||||
new MvcRazorTemplateEngine(RazorEngine.Create(), new FileProviderRazorProject(fileProvider)));
|
||||
|
||||
// Act
|
||||
var result = compiler.GetCompilationFailedResult(codeDocument, diagnostics);
|
||||
|
|
|
|||
|
|
@ -901,7 +901,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Test
|
|||
.Returns(new RazorPageFactoryResult(() => viewStart, new IChangeToken[0]));
|
||||
|
||||
var fileProvider = new TestFileProvider();
|
||||
var razorProject = new DefaultRazorProject(fileProvider);
|
||||
var razorProject = new FileProviderRazorProject(fileProvider);
|
||||
var viewEngine = CreateViewEngine(pageFactory.Object, razorProject: razorProject);
|
||||
var context = GetActionContext(_controllerTestContext);
|
||||
|
||||
|
|
@ -1349,7 +1349,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Test
|
|||
Mock.Of<IRazorPageActivator>(),
|
||||
new HtmlTestEncoder(),
|
||||
GetOptionsAccessor(expanders: null),
|
||||
new DefaultRazorProject(new TestFileProvider()),
|
||||
new FileProviderRazorProject(new TestFileProvider()),
|
||||
loggerFactory);
|
||||
|
||||
// Act
|
||||
|
|
@ -1772,7 +1772,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Test
|
|||
pageFactory = pageFactory ?? Mock.Of<IRazorPageFactoryProvider>();
|
||||
if (razorProject == null)
|
||||
{
|
||||
razorProject = new DefaultRazorProject(new TestFileProvider());
|
||||
razorProject = new FileProviderRazorProject(new TestFileProvider());
|
||||
}
|
||||
return new TestableRazorViewEngine(pageFactory, GetOptionsAccessor(expanders), razorProject);
|
||||
}
|
||||
|
|
@ -1873,7 +1873,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Test
|
|||
public TestableRazorViewEngine(
|
||||
IRazorPageFactoryProvider pageFactory,
|
||||
IOptions<RazorViewEngineOptions> optionsAccessor)
|
||||
: this(pageFactory, optionsAccessor, new DefaultRazorProject(new TestFileProvider()))
|
||||
: this(pageFactory, optionsAccessor, new FileProviderRazorProject(new TestFileProvider()))
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -347,7 +347,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure
|
|||
Content = content,
|
||||
};
|
||||
|
||||
return new DefaultRazorProjectItem(testFileInfo, basePath, path);
|
||||
return new FileProviderRazorProjectItem(testFileInfo, basePath, path);
|
||||
}
|
||||
|
||||
private class TestPageApplicationModelProvider : IPageApplicationModelProvider
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ using Microsoft.AspNetCore.Mvc.Infrastructure;
|
|||
using Microsoft.AspNetCore.Mvc.ModelBinding;
|
||||
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
|
||||
using Microsoft.AspNetCore.Mvc.Razor;
|
||||
using Microsoft.AspNetCore.Mvc.Razor.Internal;
|
||||
using Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure;
|
||||
using Microsoft.AspNetCore.Mvc.ViewFeatures;
|
||||
using Microsoft.AspNetCore.Mvc.ViewFeatures.Internal;
|
||||
|
|
@ -175,7 +176,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
|||
fileProvider.AddFile("/Home/Path1/_ViewStart.cshtml", "content1");
|
||||
fileProvider.AddFile("/_ViewStart.cshtml", "content2");
|
||||
|
||||
var defaultRazorProject = new TestRazorProject(fileProvider);
|
||||
var defaultRazorProject = new FileProviderRazorProject(fileProvider);
|
||||
|
||||
var invokerProvider = CreateInvokerProvider(
|
||||
loader.Object,
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ using Moq;
|
|||
|
||||
namespace Microsoft.AspNetCore.Mvc.RazorPages
|
||||
{
|
||||
public class TestRazorProject : DefaultRazorProject
|
||||
public class TestRazorProject : FileProviderRazorProject
|
||||
{
|
||||
public TestRazorProject(IFileProvider fileProvider)
|
||||
:base(GetAccessor(fileProvider))
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ using Microsoft.AspNetCore.Razor.Language;
|
|||
|
||||
namespace RazorPageExecutionInstrumentationWebSite
|
||||
{
|
||||
public class TestRazorProject : DefaultRazorProject
|
||||
public class TestRazorProject : FileProviderRazorProject
|
||||
{
|
||||
public TestRazorProject(IRazorViewEngineFileProviderAccessor fileProviderAccessor)
|
||||
: base(fileProviderAccessor)
|
||||
|
|
@ -17,13 +17,13 @@ namespace RazorPageExecutionInstrumentationWebSite
|
|||
|
||||
public override RazorProjectItem GetItem(string path)
|
||||
{
|
||||
var item = (DefaultRazorProjectItem)base.GetItem(path);
|
||||
var item = (FileProviderRazorProjectItem)base.GetItem(path);
|
||||
return new TestRazorProjectItem(item);
|
||||
}
|
||||
|
||||
private class TestRazorProjectItem : DefaultRazorProjectItem
|
||||
private class TestRazorProjectItem : FileProviderRazorProjectItem
|
||||
{
|
||||
public TestRazorProjectItem(DefaultRazorProjectItem projectItem)
|
||||
public TestRazorProjectItem(FileProviderRazorProjectItem projectItem)
|
||||
: base(projectItem.FileInfo, projectItem.BasePath, projectItem.Path)
|
||||
{
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue