From 72c934b84d581f5bf13a7e10e6c041ef22a4cb50 Mon Sep 17 00:00:00 2001 From: Ajay Bhargav Baaskaran Date: Fri, 20 Mar 2015 18:01:34 -0700 Subject: [PATCH] added another test --- .../RazorViewTest.cs | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/test/Microsoft.AspNet.Mvc.Razor.Test/RazorViewTest.cs b/test/Microsoft.AspNet.Mvc.Razor.Test/RazorViewTest.cs index 81cdf05daf..535e558894 100644 --- a/test/Microsoft.AspNet.Mvc.Razor.Test/RazorViewTest.cs +++ b/test/Microsoft.AspNet.Mvc.Razor.Test/RazorViewTest.cs @@ -455,6 +455,57 @@ public async Task RenderAsync_ThrowsIfSectionsWereDefinedButNotRendered() Assert.Equal("The following sections have been defined but have not been rendered: 'head, foot'.", ex.Message); } + [Fact] + public async Task RenderAsync_WithNestedSections_ThrowsIfSectionsWereDefinedButNotRendered() + { + // Arrange + var htmlEncoder = new HtmlEncoder(); + var page = new TestableRazorPage(v => + { + v.HtmlEncoder = htmlEncoder; + v.Layout = "~/Shared/Layout1.cshtml"; + v.WriteLiteral("BodyContent"); + v.DefineSection("foo", async writer => + { + await writer.WriteLineAsync("foo-content"); + }); + }); + var nestedLayout = new TestableRazorPage(v => + { + v.HtmlEncoder = htmlEncoder; + v.Layout = "~/Shared/Layout2.cshtml"; + v.Write("NestedLayout" + Environment.NewLine); + v.RenderBodyPublic(); + v.DefineSection("foo", async writer => + { + await writer.WriteLineAsync(htmlEncoder.HtmlEncode(v.RenderSection("foo").ToString())); + }); + }); + var baseLayout = new TestableRazorPage(v => + { + v.HtmlEncoder = htmlEncoder; + v.Write("BaseLayout" + Environment.NewLine); + v.RenderBodyPublic(); + }); + + var viewEngine = new Mock(); + viewEngine.Setup(p => p.FindPage(It.IsAny(), "~/Shared/Layout1.cshtml")) + .Returns(new RazorPageResult("~/Shared/Layout1.cshtml", nestedLayout)); + viewEngine.Setup(p => p.FindPage(It.IsAny(), "~/Shared/Layout2.cshtml")) + .Returns(new RazorPageResult("~/Shared/Layout2.cshtml", baseLayout)); + + var view = new RazorView(viewEngine.Object, + Mock.Of(), + CreateViewStartProvider(), + page, + isPartial: false); + var viewContext = CreateViewContext(view); + + // Act and Assert + var ex = await Assert.ThrowsAsync(() => view.RenderAsync(viewContext)); + Assert.Equal("The following sections have been defined but have not been rendered: 'foo'.", ex.Message); + } + [Fact] public async Task RenderAsync_ThrowsIfBodyWasNotRendered() {