public void GetInheritedChunks_ReturnsDefaultInheritedChunks() { // Arrange var fileSystem = new TestFileSystem(); fileSystem.AddFile(@"x:\myapproot\views\_viewstart.cshtml", "@inject DifferentHelper<TModel> Html"); var host = new MvcRazorHost(fileSystem); var defaultChunks = new Chunk[] { new InjectChunk("MyTestHtmlHelper", "Html"), new UsingChunk { Namespace = "AppNamespace.Model" }, }; var utility = new ChunkInheritanceUtility(host, fileSystem, defaultChunks); // Act var chunks = utility.GetInheritedChunks(@"x:\myapproot\views\home\Index.cshtml"); // Assert Assert.Equal(4, chunks.Count); var injectChunk = Assert.IsType <InjectChunk>(chunks[1]); Assert.Equal("DifferentHelper<TModel>", injectChunk.TypeName); Assert.Equal("Html", injectChunk.MemberName); Assert.Same(defaultChunks[0], chunks[2]); Assert.Same(defaultChunks[1], chunks[3]); }
public void GetInheritedChunks_ReturnsEmptySequenceIfNoGlobalsArePresent() { // Arrange var fileProvider = new TestFileProvider(); fileProvider.AddFile(@"_ViewImports.cs", string.Empty); fileProvider.AddFile(PlatformNormalizer.NormalizePath(@"Views\_Layout.cshtml"), string.Empty); fileProvider.AddFile(PlatformNormalizer.NormalizePath(@"Views\home\_not-viewimports.cshtml"), string.Empty); var cache = new DefaultChunkTreeCache(fileProvider); var host = new MvcRazorHost(cache); var defaultChunks = new Chunk[] { new InjectChunk("MyTestHtmlHelper", "Html"), new UsingChunk { Namespace = "AppNamespace.Model" }, }; var utility = new ChunkInheritanceUtility(host, cache, defaultChunks); // Act var chunkTrees = utility.GetInheritedChunkTrees(PlatformNormalizer.NormalizePath(@"Views\home\Index.cshtml")); // Assert Assert.Empty(chunkTrees); }
public void GetInheritedChunks_ReadsChunksFromGlobalFilesInPath() { // Arrange var fileProvider = new TestFileProvider(); fileProvider.AddFile(@"Views\accounts\_GlobalImport.cshtml", "@using AccountModels"); fileProvider.AddFile(@"Views\Shared\_GlobalImport.cshtml", "@inject SharedHelper Shared"); fileProvider.AddFile(@"Views\home\_GlobalImport.cshtml", "@using MyNamespace"); fileProvider.AddFile(@"Views\_GlobalImport.cshtml", @"@inject MyHelper<TModel> Helper @inherits MyBaseType @{ Layout = ""test.cshtml""; } "); var defaultChunks = new Chunk[] { new InjectChunk("MyTestHtmlHelper", "Html"), new UsingChunk { Namespace = "AppNamespace.Model" }, }; var cache = new DefaultCodeTreeCache(fileProvider); var host = new MvcRazorHost(cache); var utility = new ChunkInheritanceUtility(host, cache, defaultChunks); // Act var codeTrees = utility.GetInheritedCodeTrees(@"Views\home\Index.cshtml"); // Assert Assert.Equal(2, codeTrees.Count); var viewStartChunks = codeTrees[0].Chunks; Assert.Equal(3, viewStartChunks.Count); Assert.IsType <LiteralChunk>(viewStartChunks[0]); var usingChunk = Assert.IsType <UsingChunk>(viewStartChunks[1]); Assert.Equal("MyNamespace", usingChunk.Namespace); Assert.IsType <LiteralChunk>(viewStartChunks[2]); viewStartChunks = codeTrees[1].Chunks; Assert.Equal(5, viewStartChunks.Count); Assert.IsType <LiteralChunk>(viewStartChunks[0]); var injectChunk = Assert.IsType <InjectChunk>(viewStartChunks[1]); Assert.Equal("MyHelper<TModel>", injectChunk.TypeName); Assert.Equal("Helper", injectChunk.MemberName); var setBaseTypeChunk = Assert.IsType <SetBaseTypeChunk>(viewStartChunks[2]); Assert.Equal("MyBaseType", setBaseTypeChunk.TypeName); Assert.IsType <StatementChunk>(viewStartChunks[3]); Assert.IsType <LiteralChunk>(viewStartChunks[4]); }
public void MergeChunks_VisitsChunksPriorToMerging() { // Arrange var codeTree = new CodeTree(); codeTree.Chunks.Add(new LiteralChunk()); codeTree.Chunks.Add(new ExpressionBlockChunk()); codeTree.Chunks.Add(new ExpressionBlockChunk()); var merger = new Mock <IChunkMerger>(); var mockSequence = new MockSequence(); merger.InSequence(mockSequence) .Setup(m => m.VisitChunk(It.IsAny <LiteralChunk>())) .Verifiable(); merger.InSequence(mockSequence) .Setup(m => m.Merge(codeTree, It.IsAny <LiteralChunk>())) .Verifiable(); var inheritedChunks = new List <Chunk> { new CodeAttributeChunk(), new LiteralChunk() }; var utility = new ChunkInheritanceUtility(codeTree, inheritedChunks, "dynamic"); // Act utility.ChunkMergers[typeof(LiteralChunk)] = merger.Object; utility.MergeInheritedChunks(inheritedChunks); // Assert merger.Verify(); }
public void MergeInheritedChunks_MergesDefaultInheritedChunks() { // Arrange var fileProvider = new TestFileProvider(); fileProvider.AddFile(@"/Views/_ViewImports.cshtml", "@inject DifferentHelper<TModel> Html"); var cache = new DefaultChunkTreeCache(fileProvider); using (var host = new MvcRazorHost(cache)) { var defaultChunks = new Chunk[] { new InjectChunk("MyTestHtmlHelper", "Html"), new UsingChunk { Namespace = "AppNamespace.Model" }, }; var inheritedChunkTrees = new ChunkTree[] { new ChunkTree { Children = new Chunk[] { new UsingChunk { Namespace = "InheritedNamespace" }, new LiteralChunk { Text = "some text" } } }, new ChunkTree { Children = new Chunk[] { new UsingChunk { Namespace = "AppNamespace.Model" }, } } }; var utility = new ChunkInheritanceUtility(host, cache, defaultChunks); var chunkTree = new ChunkTree(); // Act utility.MergeInheritedChunkTrees(chunkTree, inheritedChunkTrees, "dynamic"); // Assert Assert.Collection(chunkTree.Children, chunk => Assert.Same(defaultChunks[1], chunk), chunk => Assert.Same(inheritedChunkTrees[0].Children[0], chunk), chunk => Assert.Same(defaultChunks[0], chunk)); } }
public void MergeInheritedChunks_MergesDefaultInheritedChunks() { // Arrange var fileProvider = new TestFileProvider(); fileProvider.AddFile(PlatformNormalizer.NormalizePath(@"Views\_ViewImports.cshtml"), "@inject DifferentHelper<TModel> Html"); var cache = new DefaultChunkTreeCache(fileProvider); var host = new MvcRazorHost(cache); var defaultChunks = new Chunk[] { new InjectChunk("MyTestHtmlHelper", "Html"), new UsingChunk { Namespace = "AppNamespace.Model" }, }; var inheritedChunkTrees = new ChunkTree[] { new ChunkTree { Chunks = new Chunk[] { new UsingChunk { Namespace = "InheritedNamespace" }, new LiteralChunk { Text = "some text" } } }, new ChunkTree { Chunks = new Chunk[] { new UsingChunk { Namespace = "AppNamespace.Model" }, } } }; var utility = new ChunkInheritanceUtility(host, cache, defaultChunks); var chunkTree = new ChunkTree(); // Act utility.MergeInheritedChunkTrees(chunkTree, inheritedChunkTrees, "dynamic"); // Assert Assert.Equal(3, chunkTree.Chunks.Count); Assert.Same(inheritedChunkTrees[0].Chunks[0], chunkTree.Chunks[0]); Assert.Same(inheritedChunkTrees[1].Chunks[0], chunkTree.Chunks[1]); Assert.Same(defaultChunks[0], chunkTree.Chunks[2]); }
public void GetInheritedChunks_ReadsChunksFromGlobalFilesInPath() { // Arrange var fileProvider = new TestFileProvider(); fileProvider.AddFile(@"Views\accounts\_GlobalImport.cshtml", "@using AccountModels"); fileProvider.AddFile(@"Views\Shared\_GlobalImport.cshtml", "@inject SharedHelper Shared"); fileProvider.AddFile(@"Views\home\_GlobalImport.cshtml", "@using MyNamespace"); fileProvider.AddFile(@"Views\_GlobalImport.cshtml", @"@inject MyHelper<TModel> Helper @inherits MyBaseType @{ Layout = ""test.cshtml""; } "); var defaultChunks = new Chunk[] { new InjectChunk("MyTestHtmlHelper", "Html"), new UsingChunk { Namespace = "AppNamespace.Model" }, }; var cache = new DefaultCodeTreeCache(fileProvider); var host = new MvcRazorHost(cache); var utility = new ChunkInheritanceUtility(host, cache, defaultChunks); // Act var codeTrees = utility.GetInheritedCodeTrees(@"Views\home\Index.cshtml"); // Assert Assert.Equal(2, codeTrees.Count); var viewStartChunks = codeTrees[0].Chunks; Assert.Equal(3, viewStartChunks.Count); Assert.IsType<LiteralChunk>(viewStartChunks[0]); var usingChunk = Assert.IsType<UsingChunk>(viewStartChunks[1]); Assert.Equal("MyNamespace", usingChunk.Namespace); Assert.IsType<LiteralChunk>(viewStartChunks[2]); viewStartChunks = codeTrees[1].Chunks; Assert.Equal(5, viewStartChunks.Count); Assert.IsType<LiteralChunk>(viewStartChunks[0]); var injectChunk = Assert.IsType<InjectChunk>(viewStartChunks[1]); Assert.Equal("MyHelper<TModel>", injectChunk.TypeName); Assert.Equal("Helper", injectChunk.MemberName); var setBaseTypeChunk = Assert.IsType<SetBaseTypeChunk>(viewStartChunks[2]); Assert.Equal("MyBaseType", setBaseTypeChunk.TypeName); Assert.IsType<StatementChunk>(viewStartChunks[3]); Assert.IsType<LiteralChunk>(viewStartChunks[4]); }
public void GetInheritedChunks_ReturnsEmptySequenceIfNoViewStartsArePresent() { // Arrange var fileSystem = new TestFileSystem(); fileSystem.AddFile(@"x:\myapproot\_viewstart.cs", string.Empty); fileSystem.AddFile(@"x:\myapproot\views\_Layout.cshtml", string.Empty); fileSystem.AddFile(@"x:\myapproot\views\home\_not-viewstart.cshtml", string.Empty); var host = new MvcRazorHost(fileSystem); var utility = new ChunkInheritanceUtility(host, fileSystem, new Chunk[0]); // Act var chunks = utility.GetInheritedChunks(@"x:\myapproot\views\home\Index.cshtml"); // Assert Assert.Empty(chunks); }
public void GetInheritedChunks_ReadsChunksFromViewStartsInPath() { // Arrange var fileSystem = new TestFileSystem(); fileSystem.AddFile(@"x:\myapproot\views\accounts\_viewstart.cshtml", "@using AccountModels"); fileSystem.AddFile(@"x:\myapproot\views\Shared\_viewstart.cshtml", "@inject SharedHelper Shared"); fileSystem.AddFile(@"x:\myapproot\views\home\_viewstart.cshtml", "@using MyNamespace"); fileSystem.AddFile(@"x:\myapproot\views\_viewstart.cshtml", @"@inject MyHelper<TModel> Helper @inherits MyBaseType @{ Layout = ""test.cshtml""; } "); var host = new MvcRazorHost(fileSystem); var utility = new ChunkInheritanceUtility(host, fileSystem, new Chunk[0]); // Act var chunks = utility.GetInheritedChunks(@"x:\myapproot\views\home\Index.cshtml"); // Assert Assert.Equal(8, chunks.Count); Assert.IsType <LiteralChunk>(chunks[0]); var usingChunk = Assert.IsType <UsingChunk>(chunks[1]); Assert.Equal("MyNamespace", usingChunk.Namespace); Assert.IsType <LiteralChunk>(chunks[2]); Assert.IsType <LiteralChunk>(chunks[3]); var injectChunk = Assert.IsType <InjectChunk>(chunks[4]); Assert.Equal("MyHelper<TModel>", injectChunk.TypeName); Assert.Equal("Helper", injectChunk.MemberName); var setBaseTypeChunk = Assert.IsType <SetBaseTypeChunk>(chunks[5]); Assert.Equal("MyBaseType", setBaseTypeChunk.TypeName); Assert.IsType <StatementChunk>(chunks[6]); Assert.IsType <LiteralChunk>(chunks[7]); }
public void GetInheritedChunks_ReturnsEmptySequenceIfNoGlobalsArePresent() { // Arrange var fileProvider = new TestFileProvider(); fileProvider.AddFile(@"_GlobalImport.cs", string.Empty); fileProvider.AddFile(@"Views\_Layout.cshtml", string.Empty); fileProvider.AddFile(@"Views\home\_not-globalimport.cshtml", string.Empty); var cache = new DefaultCodeTreeCache(fileProvider); var host = new MvcRazorHost(cache); var defaultChunks = new Chunk[] { new InjectChunk("MyTestHtmlHelper", "Html"), new UsingChunk { Namespace = "AppNamespace.Model" }, }; var utility = new ChunkInheritanceUtility(host, cache, defaultChunks); // Act var codeTrees = utility.GetInheritedCodeTrees(@"Views\home\Index.cshtml"); // Assert Assert.Empty(codeTrees); }
public void GetInheritedChunks_ReturnsEmptySequenceIfNoViewStartsArePresent() { // Arrange var fileProvider = new TestFileProvider(); fileProvider.AddFile(@"_ViewStart.cs", string.Empty); fileProvider.AddFile(@"Views\_Layout.cshtml", string.Empty); fileProvider.AddFile(@"Views\home\_not-viewstart.cshtml", string.Empty); var host = new MvcRazorHost(fileProvider); var defaultChunks = new Chunk[] { new InjectChunk("MyTestHtmlHelper", "Html"), new UsingChunk { Namespace = "AppNamespace.Model" }, }; var utility = new ChunkInheritanceUtility(host, fileProvider, defaultChunks); // Act var codeTrees = utility.GetInheritedCodeTrees(@"Views\home\Index.cshtml"); // Assert Assert.Empty(codeTrees); }
public void GetInheritedChunks_ReadsChunksFromGlobalFilesInPath() { // Arrange var fileProvider = new TestFileProvider(); fileProvider.AddFile(PlatformNormalizer.NormalizePath(@"Views\accounts\_ViewImports.cshtml"), "@using AccountModels"); fileProvider.AddFile(PlatformNormalizer.NormalizePath(@"Views\Shared\_ViewImports.cshtml"), "@inject SharedHelper Shared"); fileProvider.AddFile(PlatformNormalizer.NormalizePath(@"Views\home\_ViewImports.cshtml"), "@using MyNamespace"); fileProvider.AddFile(PlatformNormalizer.NormalizePath(@"Views\_ViewImports.cshtml"), @"@inject MyHelper<TModel> Helper @inherits MyBaseType @{ Layout = ""test.cshtml""; } "); var defaultChunks = new Chunk[] { new InjectChunk("MyTestHtmlHelper", "Html"), new UsingChunk { Namespace = "AppNamespace.Model" }, }; var cache = new DefaultChunkTreeCache(fileProvider); var host = new MvcRazorHost(cache); var utility = new ChunkInheritanceUtility(host, cache, defaultChunks); // Act var chunkTrees = utility.GetInheritedChunkTrees(PlatformNormalizer.NormalizePath(@"Views\home\Index.cshtml")); // Assert Assert.Collection(chunkTrees, chunkTree => { var viewImportsPath = PlatformNormalizer.NormalizePath(@"Views\home\_ViewImports.cshtml"); Assert.Collection(chunkTree.Chunks, chunk => { Assert.IsType <LiteralChunk>(chunk); Assert.Equal(viewImportsPath, chunk.Start.FilePath); }, chunk => { var usingChunk = Assert.IsType <UsingChunk>(chunk); Assert.Equal("MyNamespace", usingChunk.Namespace); Assert.Equal(viewImportsPath, chunk.Start.FilePath); }, chunk => { Assert.IsType <LiteralChunk>(chunk); Assert.Equal(viewImportsPath, chunk.Start.FilePath); }); }, chunkTree => { var viewImportsPath = PlatformNormalizer.NormalizePath(@"Views\_ViewImports.cshtml"); Assert.Collection(chunkTree.Chunks, chunk => { Assert.IsType <LiteralChunk>(chunk); Assert.Equal(viewImportsPath, chunk.Start.FilePath); }, chunk => { var injectChunk = Assert.IsType <InjectChunk>(chunk); Assert.Equal("MyHelper<TModel>", injectChunk.TypeName); Assert.Equal("Helper", injectChunk.MemberName); Assert.Equal(viewImportsPath, chunk.Start.FilePath); }, chunk => { Assert.IsType <LiteralChunk>(chunk); Assert.Equal(viewImportsPath, chunk.Start.FilePath); }, chunk => { var setBaseTypeChunk = Assert.IsType <SetBaseTypeChunk>(chunk); Assert.Equal("MyBaseType", setBaseTypeChunk.TypeName); Assert.Equal(viewImportsPath, chunk.Start.FilePath); }, chunk => { Assert.IsType <LiteralChunk>(chunk); Assert.Equal(viewImportsPath, chunk.Start.FilePath); }, chunk => { Assert.IsType <StatementChunk>(chunk); Assert.Equal(viewImportsPath, chunk.Start.FilePath); }, chunk => { Assert.IsType <LiteralChunk>(chunk); Assert.Equal(viewImportsPath, chunk.Start.FilePath); }); }); }
public void MergeInheritedChunks_MergesDefaultInheritedChunks() { // Arrange var fileProvider = new TestFileProvider(); fileProvider.AddFile(@"Views\_ViewImports.cshtml", "@inject DifferentHelper<TModel> Html"); var cache = new DefaultChunkTreeCache(fileProvider); var host = new MvcRazorHost(cache); var defaultChunks = new Chunk[] { new InjectChunk("MyTestHtmlHelper", "Html"), new UsingChunk { Namespace = "AppNamespace.Model" }, }; var inheritedChunkTrees = new ChunkTree[] { new ChunkTree { Chunks = new Chunk[] { new UsingChunk { Namespace = "InheritedNamespace" }, new LiteralChunk { Text = "some text" } } }, new ChunkTree { Chunks = new Chunk[] { new UsingChunk { Namespace = "AppNamespace.Model" }, } } }; var utility = new ChunkInheritanceUtility(host, cache, defaultChunks); var chunkTree = new ChunkTree(); // Act utility.MergeInheritedChunkTrees(chunkTree, inheritedChunkTrees, "dynamic"); // Assert Assert.Equal(3, chunkTree.Chunks.Count); Assert.Same(inheritedChunkTrees[0].Chunks[0], chunkTree.Chunks[0]); Assert.Same(inheritedChunkTrees[1].Chunks[0], chunkTree.Chunks[1]); Assert.Same(defaultChunks[0], chunkTree.Chunks[2]); }
public void GetInheritedChunks_ReadsChunksFromGlobalFilesInPath() { // Arrange var fileProvider = new TestFileProvider(); fileProvider.AddFile(PlatformNormalizer.NormalizePath(@"Views\accounts\_ViewImports.cshtml"), "@using AccountModels"); fileProvider.AddFile(PlatformNormalizer.NormalizePath(@"Views\Shared\_ViewImports.cshtml"), "@inject SharedHelper Shared"); fileProvider.AddFile(PlatformNormalizer.NormalizePath(@"Views\home\_ViewImports.cshtml"), "@using MyNamespace"); fileProvider.AddFile(PlatformNormalizer.NormalizePath(@"Views\_ViewImports.cshtml"), @"@inject MyHelper<TModel> Helper @inherits MyBaseType @{ Layout = ""test.cshtml""; } "); var defaultChunks = new Chunk[] { new InjectChunk("MyTestHtmlHelper", "Html"), new UsingChunk { Namespace = "AppNamespace.Model" }, }; var cache = new DefaultChunkTreeCache(fileProvider); var host = new MvcRazorHost(cache); var utility = new ChunkInheritanceUtility(host, cache, defaultChunks); // Act var chunkTrees = utility.GetInheritedChunkTrees(PlatformNormalizer.NormalizePath(@"Views\home\Index.cshtml")); // Assert Assert.Collection(chunkTrees, chunkTree => { var viewImportsPath = PlatformNormalizer.NormalizePath(@"Views\home\_ViewImports.cshtml"); Assert.Collection(chunkTree.Chunks, chunk => { Assert.IsType<LiteralChunk>(chunk); Assert.Equal(viewImportsPath, chunk.Start.FilePath); }, chunk => { var usingChunk = Assert.IsType<UsingChunk>(chunk); Assert.Equal("MyNamespace", usingChunk.Namespace); Assert.Equal(viewImportsPath, chunk.Start.FilePath); }, chunk => { Assert.IsType<LiteralChunk>(chunk); Assert.Equal(viewImportsPath, chunk.Start.FilePath); }); }, chunkTree => { var viewImportsPath = PlatformNormalizer.NormalizePath(@"Views\_ViewImports.cshtml"); Assert.Collection(chunkTree.Chunks, chunk => { Assert.IsType<LiteralChunk>(chunk); Assert.Equal(viewImportsPath, chunk.Start.FilePath); }, chunk => { var injectChunk = Assert.IsType<InjectChunk>(chunk); Assert.Equal("MyHelper<TModel>", injectChunk.TypeName); Assert.Equal("Helper", injectChunk.MemberName); Assert.Equal(viewImportsPath, chunk.Start.FilePath); }, chunk => { Assert.IsType<LiteralChunk>(chunk); Assert.Equal(viewImportsPath, chunk.Start.FilePath); }, chunk => { var setBaseTypeChunk = Assert.IsType<SetBaseTypeChunk>(chunk); Assert.Equal("MyBaseType", setBaseTypeChunk.TypeName); Assert.Equal(viewImportsPath, chunk.Start.FilePath); }, chunk => { Assert.IsType<LiteralChunk>(chunk); Assert.Equal(viewImportsPath, chunk.Start.FilePath); }, chunk => { Assert.IsType<StatementChunk>(chunk); Assert.Equal(viewImportsPath, chunk.Start.FilePath); }, chunk => { Assert.IsType<LiteralChunk>(chunk); Assert.Equal(viewImportsPath, chunk.Start.FilePath); }); }); }
public void GetInheritedChunks_ReturnsEmptySequenceIfNoGlobalsArePresent() { // Arrange var fileProvider = new TestFileProvider(); fileProvider.AddFile(@"/_ViewImports.cs", string.Empty); fileProvider.AddFile(@"/Views/_Layout.cshtml", string.Empty); fileProvider.AddFile(@"/Views/home/_not-viewimports.cshtml", string.Empty); var cache = new DefaultChunkTreeCache(fileProvider); using (var host = new MvcRazorHost(cache)) { var defaultChunks = new Chunk[] { new InjectChunk("MyTestHtmlHelper", "Html"), new UsingChunk { Namespace = "AppNamespace.Model" }, }; var utility = new ChunkInheritanceUtility(host, cache, defaultChunks); // Act var chunkTrees = utility.GetInheritedChunkTreeResults(PlatformNormalizer.NormalizePath(@"Views\home\Index.cshtml")); // Assert Assert.Empty(chunkTrees); } }