From 35edc299d746df103e32c4dffeeec9d69f49c1de Mon Sep 17 00:00:00 2001 From: Pranav K Date: Mon, 13 Feb 2017 12:03:10 -0800 Subject: [PATCH] Fix test failures Fixes #5794 --- .../ModelDirective.cs | 8 +-- .../RazorPage.cs | 24 --------- .../RazorPageBase.cs | 51 +++++++++++++++---- .../Page.cs | 17 ------- .../ViewComponentTagHelperPassTest.cs | 6 +-- 5 files changed, 49 insertions(+), 57 deletions(-) diff --git a/src/Microsoft.AspNetCore.Mvc.Razor.Host/ModelDirective.cs b/src/Microsoft.AspNetCore.Mvc.Razor.Host/ModelDirective.cs index 416c809eb0..f19417836e 100644 --- a/src/Microsoft.AspNetCore.Mvc.Razor.Host/ModelDirective.cs +++ b/src/Microsoft.AspNetCore.Mvc.Razor.Host/ModelDirective.cs @@ -68,20 +68,20 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Host var visitor = new Visitor(); var modelType = GetModelType(irDocument, visitor); - var baseType = visitor.Class.BaseType; + var baseType = visitor.Class?.BaseType?.Replace("", "<" + modelType + ">"); for (var i = visitor.InheritsDirectives.Count - 1; i >= 0; i--) { var directive = visitor.InheritsDirectives[i]; var tokens = directive.Tokens.ToArray(); if (tokens.Length >= 1) { - baseType = tokens[0].Content; + baseType = tokens[0].Content.Replace("", "<" + modelType + ">"); + tokens[0].Content = baseType; break; } } - visitor.Class.BaseType = baseType.Replace("", "<" + modelType + ">"); - + visitor.Class.BaseType = baseType; return irDocument; } } diff --git a/src/Microsoft.AspNetCore.Mvc.Razor/RazorPage.cs b/src/Microsoft.AspNetCore.Mvc.Razor/RazorPage.cs index 6196e64b51..9cb1efae46 100644 --- a/src/Microsoft.AspNetCore.Mvc.Razor/RazorPage.cs +++ b/src/Microsoft.AspNetCore.Mvc.Razor/RazorPage.cs @@ -5,11 +5,8 @@ using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; -using System.Security.Claims; -using System.Text.Encodings.Web; using System.Threading.Tasks; using Microsoft.AspNetCore.Html; -using Microsoft.AspNetCore.Mvc.Razor.Internal; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Mvc.ViewFeatures; @@ -30,35 +27,14 @@ namespace Microsoft.AspNetCore.Mvc.Razor /// public RazorPage() { - } - /// - /// Gets the to use when this - /// handles non- C# expressions. - /// - [RazorInject] - public HtmlEncoder HtmlEncoder { get; set; } - - /// - /// Gets or sets a instance used to instrument the page execution. - /// - [RazorInject] - public DiagnosticSource DiagnosticSource { get; set; } - - /// - /// Gets the of the current logged in user. - /// - public virtual ClaimsPrincipal User => Context?.User; - /// /// Gets the from the . /// /// Returns null if is null. public ITempDataDictionary TempData => ViewContext?.TempData; - protected override HtmlEncoder Encoder => HtmlEncoder; - /// /// Format an error message about using an indexer when the tag helper property is null. /// diff --git a/src/Microsoft.AspNetCore.Mvc.Razor/RazorPageBase.cs b/src/Microsoft.AspNetCore.Mvc.Razor/RazorPageBase.cs index 89255284bc..c3495910a3 100644 --- a/src/Microsoft.AspNetCore.Mvc.Razor/RazorPageBase.cs +++ b/src/Microsoft.AspNetCore.Mvc.Razor/RazorPageBase.cs @@ -5,11 +5,13 @@ using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; +using System.Security.Claims; using System.Text.Encodings.Web; using System.Threading.Tasks; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Html; using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc.Razor.Internal; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Mvc.Routing; using Microsoft.AspNetCore.Mvc.ViewFeatures.Internal; @@ -82,7 +84,23 @@ namespace Microsoft.AspNetCore.Mvc.Razor /// public IDictionary PreviousSectionWriters { get; set; } - protected virtual HtmlEncoder Encoder { get; set; } + /// + /// Gets or sets a instance used to instrument the page execution. + /// + [RazorInject] + public DiagnosticSource DiagnosticSource { get; set; } + + /// + /// Gets the to use when this + /// handles non- C# expressions. + /// + [RazorInject] + public HtmlEncoder HtmlEncoder { get; set; } + + /// + /// Gets the of the current logged in user. + /// + public virtual ClaimsPrincipal User => Context?.User; protected Stack TagHelperScopes { get; } = new Stack(); @@ -143,12 +161,12 @@ namespace Microsoft.AspNetCore.Mvc.Razor public void StartTagHelperWritingScope(HtmlEncoder encoder) { var buffer = new ViewBuffer(BufferScope, Path, ViewBuffer.TagHelperPageSize); - TagHelperScopes.Push(new TagHelperScopeInfo(buffer, Encoder, ViewContext.Writer)); + TagHelperScopes.Push(new TagHelperScopeInfo(buffer, HtmlEncoder, ViewContext.Writer)); // If passed an HtmlEncoder, override the property. if (encoder != null) { - Encoder = encoder; + HtmlEncoder = encoder; } // We need to replace the ViewContext's Writer to ensure that all content (including content written @@ -162,6 +180,11 @@ namespace Microsoft.AspNetCore.Mvc.Razor /// The buffered . public TagHelperContent EndTagHelperWritingScope() { + if (TagHelperScopes.Count == 0) + { + throw new InvalidOperationException(Resources.RazorPage_ThereIsNoActiveWritingScopeToEnd); + } + var scopeInfo = TagHelperScopes.Pop(); // Get the content written during the current scope. @@ -169,7 +192,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor tagHelperContent.AppendHtml(scopeInfo.Buffer); // Restore previous scope. - Encoder = scopeInfo.Encoder; + HtmlEncoder = scopeInfo.HtmlEncoder; ViewContext.Writer = scopeInfo.Writer; return tagHelperContent; @@ -187,6 +210,11 @@ namespace Microsoft.AspNetCore.Mvc.Razor /// public void BeginWriteTagHelperAttribute() { + if (_pageWriter != null) + { + throw new InvalidOperationException(Resources.RazorPage_NestingAttributeWritingScopesNotSupported); + } + _pageWriter = ViewContext.Writer; if (_valueBuffer == null) @@ -210,6 +238,11 @@ namespace Microsoft.AspNetCore.Mvc.Razor /// public string EndWriteTagHelperAttribute() { + if (_pageWriter == null) + { + throw new InvalidOperationException(Resources.RazorPage_ThereIsNoActiveWritingScopeToEnd); + } + var content = _valueBuffer.ToString(); _valueBuffer.GetStringBuilder().Clear(); @@ -290,7 +323,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor throw new ArgumentNullException(nameof(writer)); } - WriteTo(writer, Encoder, value); + WriteTo(writer, HtmlEncoder, value); } /// @@ -366,7 +399,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor throw new ArgumentNullException(nameof(writer)); } - WriteTo(writer, Encoder, value); + WriteTo(writer, HtmlEncoder, value); } private static void WriteTo(TextWriter writer, HtmlEncoder encoder, string value) @@ -643,7 +676,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor if (TagHelperScopes.Count > 0) { throw new InvalidOperationException( - "Resources.FormatRazorPage_CannotFlushWhileInAWritingScope(nameof(FlushAsync), Path))"); + Resources.FormatRazorPage_CannotFlushWhileInAWritingScope(nameof(FlushAsync), Path)); } // Calls to Flush are allowed if the page does not specify a Layout or if it is executing a section in the @@ -790,13 +823,13 @@ namespace Microsoft.AspNetCore.Mvc.Razor public TagHelperScopeInfo(ViewBuffer buffer, HtmlEncoder encoder, TextWriter writer) { Buffer = buffer; - Encoder = encoder; + HtmlEncoder = encoder; Writer = writer; } public ViewBuffer Buffer { get; } - public HtmlEncoder Encoder { get; } + public HtmlEncoder HtmlEncoder { get; } public TextWriter Writer { get; } } diff --git a/src/Microsoft.AspNetCore.Mvc.RazorPages/Page.cs b/src/Microsoft.AspNetCore.Mvc.RazorPages/Page.cs index 488fd0ac70..062c52c9b2 100644 --- a/src/Microsoft.AspNetCore.Mvc.RazorPages/Page.cs +++ b/src/Microsoft.AspNetCore.Mvc.RazorPages/Page.cs @@ -26,23 +26,6 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages /// public PageContext PageContext { get; set; } - /// - /// Gets or sets a instance used to instrument the page execution. - /// - [RazorInject] - public DiagnosticSource DiagnosticSource { get; set; } - - /// - /// Gets the to use when this - /// handles non- C# expressions. - /// - [RazorInject] - public HtmlEncoder HtmlEncoder - { - get { return Encoder; } - set { Encoder = value; } - } - public PageArgumentBinder Binder { get diff --git a/test/Microsoft.AspNetCore.Mvc.Razor.Host.Test/ViewComponentTagHelperPassTest.cs b/test/Microsoft.AspNetCore.Mvc.Razor.Host.Test/ViewComponentTagHelperPassTest.cs index 375dde326e..66298712d3 100644 --- a/test/Microsoft.AspNetCore.Mvc.Razor.Host.Test/ViewComponentTagHelperPassTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Razor.Host.Test/ViewComponentTagHelperPassTest.cs @@ -97,7 +97,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Host var irDocument = CreateIRDocument(engine, codeDocument); - var expectedVCTHName = "AspNetCore.Generated_test.__Generated__TagCloudViewComponentTagHelper"; + var expectedVCTHName = "AspNetCore.test_cshtml.__Generated__TagCloudViewComponentTagHelper"; // Act pass.Execute(codeDocument, irDocument); @@ -179,7 +179,7 @@ public class __Generated__TagCloudViewComponentTagHelper : Microsoft.AspNetCore. var irDocument = CreateIRDocument(engine, codeDocument); - var expectedVCTHName = "AspNetCore.Generated_test.__Generated__TagCloudViewComponentTagHelper"; + var expectedVCTHName = "AspNetCore.test_cshtml.__Generated__TagCloudViewComponentTagHelper"; // Act pass.Execute(codeDocument, irDocument); @@ -268,7 +268,7 @@ public class __Generated__TagCloudViewComponentTagHelper : Microsoft.AspNetCore. var irDocument = CreateIRDocument(engine, codeDocument); var expectedTagHelperName = "PTestTagHelper"; - var expectedVCTHName = "AspNetCore.Generated_test.__Generated__TagCloudViewComponentTagHelper"; + var expectedVCTHName = "AspNetCore.test_cshtml.__Generated__TagCloudViewComponentTagHelper"; // Act pass.Execute(codeDocument, irDocument);