From b520c9c15ef61f6e84c83d4a297449c87f6a74fa Mon Sep 17 00:00:00 2001 From: Ajay Bhargav Baaskaran Date: Tue, 26 Apr 2016 12:33:33 -0700 Subject: [PATCH] Fix: Newline at the end of text tag in code block is rendered as markup --- .../Parser/HtmlMarkupParser.Block.cs | 4 +++- .../Parser/CSharp/CSharpToMarkupSwitchTest.cs | 6 ++---- .../Parser/Html/HtmlDocumentTest.cs | 20 +++++++++++++++++++ .../Output/CodeBlockWithTextElement.cs | 6 ++---- 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/Microsoft.AspNetCore.Razor/Parser/HtmlMarkupParser.Block.cs b/src/Microsoft.AspNetCore.Razor/Parser/HtmlMarkupParser.Block.cs index 5792fbde85..e91f129e3e 100644 --- a/src/Microsoft.AspNetCore.Razor/Parser/HtmlMarkupParser.Block.cs +++ b/src/Microsoft.AspNetCore.Razor/Parser/HtmlMarkupParser.Block.cs @@ -1118,7 +1118,9 @@ namespace Microsoft.AspNetCore.Razor.Parser } } - if (!EndOfFile && CurrentSymbol.Type == HtmlSymbolType.NewLine) + if (!EndOfFile && + At(HtmlSymbolType.NewLine) && + Context.LastSpan.Kind != SpanKind.Transition) { AcceptAndMoveNext(); } diff --git a/test/Microsoft.AspNetCore.Razor.Test/Parser/CSharp/CSharpToMarkupSwitchTest.cs b/test/Microsoft.AspNetCore.Razor.Test/Parser/CSharp/CSharpToMarkupSwitchTest.cs index de1cf3cb40..32bccf471a 100644 --- a/test/Microsoft.AspNetCore.Razor.Test/Parser/CSharp/CSharpToMarkupSwitchTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Test/Parser/CSharp/CSharpToMarkupSwitchTest.cs @@ -685,10 +685,8 @@ namespace Microsoft.AspNetCore.Razor.Test.Parser.CSharp Factory.Code("p").AsImplicitExpression(CSharpCodeParser.DefaultKeywords).Accepts(AcceptedCharacters.NonWhiteSpace) ), new MarkupTagBlock( - Factory.MarkupTransition("").Accepts(AcceptedCharacters.None)), - Factory.Markup(Environment.NewLine).Accepts(AcceptedCharacters.None) - ), - Factory.Code($" }}{Environment.NewLine} if(!false) {{{Environment.NewLine}").AsStatement(), + Factory.MarkupTransition("").Accepts(AcceptedCharacters.None))), + Factory.Code($"{Environment.NewLine} }}{Environment.NewLine} if(!false) {{{Environment.NewLine}").AsStatement(), new MarkupBlock( Factory.Markup(" "), new MarkupTagBlock( diff --git a/test/Microsoft.AspNetCore.Razor.Test/Parser/Html/HtmlDocumentTest.cs b/test/Microsoft.AspNetCore.Razor.Test/Parser/Html/HtmlDocumentTest.cs index 9d763b1cd6..1cd8f1a76c 100644 --- a/test/Microsoft.AspNetCore.Razor.Test/Parser/Html/HtmlDocumentTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Test/Parser/Html/HtmlDocumentTest.cs @@ -320,6 +320,26 @@ namespace Microsoft.AspNetCore.Razor.Test.Parser.Html BlockFactory.MarkupTagBlock(""))); } + [Fact] + public void ParseDocumentDoesNotRenderExtraNewlineAtTheEndTextTagInVerbatimBlock() + { + ParseDocumentTest("@{Blah\r\n\r\n}", + new MarkupBlock( + Factory.EmptyHtml(), + new StatementBlock( + Factory.CodeTransition(), + Factory.MetaCode("{").Accepts(AcceptedCharacters.None), + new MarkupBlock( + new MarkupTagBlock( + Factory.MarkupTransition("")), + Factory.Markup("Blah").Accepts(AcceptedCharacters.None), + new MarkupTagBlock( + Factory.MarkupTransition(""))), + Factory.Code("\r\n\r\n").AsStatement(), + Factory.MetaCode("}").Accepts(AcceptedCharacters.None)), + BlockFactory.MarkupTagBlock(""))); + } + [Fact] public void ParseDocumentDoesNotIgnoreNewLineAtTheEndOfMarkupBlock() { diff --git a/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/CodeBlockWithTextElement.cs b/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/CodeBlockWithTextElement.cs index 30b57a0f13..5097644ecf 100644 --- a/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/CodeBlockWithTextElement.cs +++ b/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/CodeBlockWithTextElement.cs @@ -49,10 +49,8 @@ namespace TestOutput #line default #line hidden Instrumentation.EndContext(); - Instrumentation.BeginContext(80, 2, true); - WriteLiteral("\r\n"); - Instrumentation.EndContext(); -#line 4 "CodeBlockWithTextElement.cshtml" +#line 3 "CodeBlockWithTextElement.cshtml" + #line default #line hidden