diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/CSharpDirectivesTest.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/CSharpDirectivesTest.cs
index 539b8f4745..56c5eb8548 100644
--- a/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/CSharpDirectivesTest.cs
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/CSharpDirectivesTest.cs
@@ -923,6 +923,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
if (UseBaselineTests && !IsTheory)
{
+ SyntaxTreeVerifier.Verify(result);
AssertSyntaxTreeNodeMatchesBaseline(result);
return;
}
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/CSharpSectionTest.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/CSharpSectionTest.cs
index 3e2fbac20f..a1d686375a 100644
--- a/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/CSharpSectionTest.cs
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/CSharpSectionTest.cs
@@ -9,78 +9,33 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
{
public class CSharpSectionTest : CsHtmlMarkupParserTestBase
{
+ public CSharpSectionTest()
+ {
+ UseBaselineTests = true;
+ }
+
[Fact]
public void ParseSectionBlockCapturesNewlineImmediatelyFollowing()
{
- // Arrange
- var chunkGenerator = new DirectiveChunkGenerator(SectionDirective.Directive);
- chunkGenerator.Diagnostics.Add(
- RazorDiagnosticFactory.CreateParsing_DirectiveExpectsIdentifier(
- new SourceSpan(new SourceLocation(8, 0, 8), contentLength: Environment.NewLine.Length), SectionDirective.Directive.Directive));
-
- // Act & Assert
ParseDocumentTest(
"@section" + Environment.NewLine,
- new[] { SectionDirective.Directive },
- new MarkupBlock(
- Factory.EmptyHtml(),
- new DirectiveBlock(chunkGenerator,
- Factory.CodeTransition(),
- Factory.MetaCode("section").Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Code, string.Empty, CSharpSymbolType.Unknown)
- .AsDirectiveToken(DirectiveTokenDescriptor.CreateToken(DirectiveTokenKind.Member))),
- Factory.Markup(Environment.NewLine)));
+ new[] { SectionDirective.Directive });
}
[Fact]
public void ParseSectionBlockCapturesWhitespaceToEndOfLineInSectionStatementMissingOpenBrace()
{
- // Arrange
- var chunkGenerator = new DirectiveChunkGenerator(SectionDirective.Directive);
- chunkGenerator.Diagnostics.Add(
- RazorDiagnosticFactory.CreateParsing_UnexpectedEOFAfterDirective(
- new SourceSpan(new SourceLocation(25 + Environment.NewLine.Length, 1, 4), contentLength: 1),
- SectionDirective.Directive.Directive,
- "{"));
-
- // Act & Assert
ParseDocumentTest(
"@section Foo " + Environment.NewLine + " ",
- new[] { SectionDirective.Directive },
- new MarkupBlock(
- Factory.EmptyHtml(),
- new DirectiveBlock(chunkGenerator,
- Factory.CodeTransition(),
- Factory.MetaCode("section").Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Code, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.WhiteSpace),
- Factory.Span(SpanKindInternal.Code, "Foo", CSharpSymbolType.Identifier).AsDirectiveToken(SectionDirective.Directive.Tokens[0]),
- Factory.Span(SpanKindInternal.Markup, " " + Environment.NewLine + " ", markup: false).Accepts(AcceptedCharactersInternal.AllWhiteSpace)),
- Factory.EmptyHtml()));
+ new[] { SectionDirective.Directive });
}
[Fact]
public void ParseSectionBlockCapturesWhitespaceToEndOfLineInSectionStatementMissingName()
{
- // Arrange
- var chunkGenerator = new DirectiveChunkGenerator(SectionDirective.Directive);
- chunkGenerator.Diagnostics.Add(
- RazorDiagnosticFactory.CreateParsing_DirectiveExpectsIdentifier(
- new SourceSpan(new SourceLocation(17, 0, 17), contentLength: Environment.NewLine.Length), SectionDirective.Directive.Directive));
-
- // Act & Assert
ParseDocumentTest(
"@section " + Environment.NewLine + " ",
- new[] { SectionDirective.Directive },
- new MarkupBlock(
- Factory.EmptyHtml(),
- new DirectiveBlock(chunkGenerator,
- Factory.CodeTransition(),
- Factory.MetaCode("section").Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Code, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.WhiteSpace),
- Factory
- .Span(SpanKindInternal.Code, string.Empty, CSharpSymbolType.Unknown)
- .AsDirectiveToken(DirectiveTokenDescriptor.CreateToken(DirectiveTokenKind.Member))),
- Factory.Markup(Environment.NewLine + " ")));
+ new[] { SectionDirective.Directive });
}
[Fact]
@@ -88,210 +43,83 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
{
ParseDocumentTest(
"@Section foo",
- new[] { SectionDirective.Directive },
- new MarkupBlock(
- Factory.EmptyHtml(),
- new ExpressionBlock(
- Factory.CodeTransition(),
- Factory.Code("Section")
- .AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
- .Accepts(AcceptedCharactersInternal.NonWhiteSpace)),
- Factory.Markup(" foo")));
+ new[] { SectionDirective.Directive });
}
[Fact]
public void ParseSectionBlockReportsErrorAndTerminatesSectionBlockIfKeywordNotFollowedByIdentifierStartCharacter()
{
- // Arrange
- var chunkGenerator = new DirectiveChunkGenerator(SectionDirective.Directive);
- chunkGenerator.Diagnostics.Add(
- RazorDiagnosticFactory.CreateParsing_DirectiveExpectsIdentifier(
- new SourceSpan(new SourceLocation(9, 0, 9), contentLength: 1), SectionDirective.Directive.Directive));
-
- // Act & Assert
ParseDocumentTest(
"@section 9 {
Foo
}",
- new[] { SectionDirective.Directive },
- new MarkupBlock(
- Factory.EmptyHtml(),
- new DirectiveBlock(chunkGenerator,
- Factory.CodeTransition(),
- Factory.MetaCode("section").Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Code, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.WhiteSpace)),
- Factory.Markup("9 { "),
- new MarkupTagBlock(
- Factory.Markup("")),
- Factory.Markup("Foo"),
- new MarkupTagBlock(
- Factory.Markup("
")),
- Factory.Markup(" }")));
+ new[] { SectionDirective.Directive });
}
[Fact]
public void ParseSectionBlockReportsErrorAndTerminatesSectionBlockIfNameNotFollowedByOpenBrace()
{
- // Arrange
- var chunkGenerator = new DirectiveChunkGenerator(SectionDirective.Directive);
- chunkGenerator.Diagnostics.Add(
- RazorDiagnosticFactory.CreateParsing_UnexpectedDirectiveLiteral(
- new SourceSpan(new SourceLocation(12, 0, 12), contentLength: 1),
- SectionDirective.Directive.Directive,
- "{"));
-
- // Act & Assert
ParseDocumentTest(
"@section foo-bar { Foo
}",
- new[] { SectionDirective.Directive },
- new MarkupBlock(
- Factory.EmptyHtml(),
- new DirectiveBlock(chunkGenerator,
- Factory.CodeTransition(),
- Factory.MetaCode("section").Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Code, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.WhiteSpace),
- Factory.Span(SpanKindInternal.Code, "foo", CSharpSymbolType.Identifier).AsDirectiveToken(SectionDirective.Directive.Tokens[0])),
- Factory.Markup("-bar { "),
- new MarkupTagBlock(
- Factory.Markup("")),
- Factory.Markup("Foo"),
- new MarkupTagBlock(
- Factory.Markup("
")),
- Factory.Markup(" }")));
+ new[] { SectionDirective.Directive });
}
[Fact]
public void ParserOutputsErrorOnNestedSections()
{
- // Arrange
- var erroredChunkGenerator = new DirectiveChunkGenerator(SectionDirective.Directive);
- erroredChunkGenerator.Diagnostics.Add(
- RazorDiagnosticFactory.CreateParsing_DirectiveMustAppearAtStartOfLine(
- new SourceSpan(new SourceLocation(16, 0, 16), contentLength: 7), "section"));
- erroredChunkGenerator.Diagnostics.Add(
- RazorDiagnosticFactory.CreateParsing_SectionsCannotBeNested(
- new SourceSpan(new SourceLocation(15, 0, 15), 8)));
-
- // Act & Assert
ParseDocumentTest(
"@section foo { @section bar { Foo
} }",
- new[] { SectionDirective.Directive },
- new MarkupBlock(
- Factory.EmptyHtml(),
- new DirectiveBlock(new DirectiveChunkGenerator(SectionDirective.Directive),
- Factory.CodeTransition(),
- Factory.MetaCode("section").Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Code, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.WhiteSpace),
- Factory.Span(SpanKindInternal.Code, "foo", CSharpSymbolType.Identifier).AsDirectiveToken(SectionDirective.Directive.Tokens[0]),
- Factory.Span(SpanKindInternal.Markup, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.AllWhiteSpace),
- Factory.MetaCode("{").AutoCompleteWith(null, atEndOfSpan: true).Accepts(AcceptedCharactersInternal.None),
- new MarkupBlock(
- Factory.Markup(" "),
- new DirectiveBlock(erroredChunkGenerator,
- Factory.CodeTransition(),
- Factory.MetaCode("section").Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Code, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.WhiteSpace),
- Factory.Span(SpanKindInternal.Code, "bar", CSharpSymbolType.Identifier).AsDirectiveToken(SectionDirective.Directive.Tokens[0]),
- Factory.Span(SpanKindInternal.Markup, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.AllWhiteSpace),
- Factory.MetaCode("{").AutoCompleteWith(null, atEndOfSpan: true).Accepts(AcceptedCharactersInternal.None),
- new MarkupBlock(
- Factory.Markup(" "),
- new MarkupTagBlock(
- Factory.Markup("")),
- Factory.Markup("Foo"),
- new MarkupTagBlock(
- Factory.Markup("
")),
- Factory.Markup(" ")),
- Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(" ")),
- Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None)),
- Factory.EmptyHtml()));
+ new[] { SectionDirective.Directive });
}
[Fact]
public void ParseSectionBlockHandlesEOFAfterOpenBrace()
{
- // Arrange
- var chunkGenerator = new DirectiveChunkGenerator(SectionDirective.Directive);
- chunkGenerator.Diagnostics.Add(
- RazorDiagnosticFactory.CreateParsing_ExpectedEndOfBlockBeforeEOF(
- new SourceSpan(new SourceLocation(13, 0, 13), contentLength: 1), SectionDirective.Directive.Directive, "}", "{"));
-
- // Act & Assert
ParseDocumentTest(
"@section foo {",
- new[] { SectionDirective.Directive },
- new MarkupBlock(
- Factory.EmptyHtml(),
- new DirectiveBlock(chunkGenerator,
- Factory.CodeTransition(),
- Factory.MetaCode("section").Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Code, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.WhiteSpace),
- Factory.Span(SpanKindInternal.Code, "foo", CSharpSymbolType.Identifier).AsDirectiveToken(SectionDirective.Directive.Tokens[0]),
- Factory.Span(SpanKindInternal.Markup, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.AllWhiteSpace),
- Factory.MetaCode("{").AutoCompleteWith("}", atEndOfSpan: true).Accepts(AcceptedCharactersInternal.None),
- new MarkupBlock(
- Factory.EmptyHtml()))));
+ new[] { SectionDirective.Directive });
}
- [Theory]
- [InlineData(" ")]
- [InlineData("\n")]
- [InlineData(" abc")]
- [InlineData(" \n abc")]
- public void ParseSectionBlockHandlesEOFAfterOpenContent(string postStartBrace)
+ [Fact]
+ public void ParseSectionBlockHandlesEOFAfterOpenContent1()
{
- // Arrange
- var chunkGenerator = new DirectiveChunkGenerator(SectionDirective.Directive);
- chunkGenerator.Diagnostics.Add(
- RazorDiagnosticFactory.CreateParsing_ExpectedEndOfBlockBeforeEOF(
- new SourceSpan(new SourceLocation(13, 0, 13), contentLength: 1), "section", "}", "{"));
-
- // Act & Assert
+
ParseDocumentTest(
- "@section foo {" + postStartBrace,
- new[] { SectionDirective.Directive },
- new MarkupBlock(
- Factory.EmptyHtml(),
- new DirectiveBlock(chunkGenerator,
- Factory.CodeTransition(),
- Factory.MetaCode("section").Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Code, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.WhiteSpace),
- Factory.Span(SpanKindInternal.Code, "foo", CSharpSymbolType.Identifier).AsDirectiveToken(SectionDirective.Directive.Tokens[0]),
- Factory.Span(SpanKindInternal.Markup, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.AllWhiteSpace),
- Factory.MetaCode("{").AutoCompleteWith("}", atEndOfSpan: true).Accepts(AcceptedCharactersInternal.None),
- new MarkupBlock(
- Factory.Markup(postStartBrace)))));
+ "@section foo { ",
+ new[] { SectionDirective.Directive });
+ }
+
+ [Fact]
+ public void ParseSectionBlockHandlesEOFAfterOpenContent2()
+ {
+
+ ParseDocumentTest(
+ "@section foo {\n",
+ new[] { SectionDirective.Directive });
+ }
+
+ [Fact]
+ public void ParseSectionBlockHandlesEOFAfterOpenContent3()
+ {
+
+ ParseDocumentTest(
+ "@section foo {abc",
+ new[] { SectionDirective.Directive });
+ }
+
+ [Fact]
+ public void ParseSectionBlockHandlesEOFAfterOpenContent4()
+ {
+
+ ParseDocumentTest(
+ "@section foo {\n abc",
+ new[] { SectionDirective.Directive });
}
[Fact]
public void ParseSectionBlockHandlesUnterminatedSection()
{
- // Arrange
- var chunkGenerator = new DirectiveChunkGenerator(SectionDirective.Directive);
- chunkGenerator.Diagnostics.Add(
- RazorDiagnosticFactory.CreateParsing_ExpectedEndOfBlockBeforeEOF(
- new SourceSpan(new SourceLocation(13, 0, 13), contentLength: 1), "section", "}", "{"));
-
- // Act & Assert
ParseDocumentTest(
"@section foo { Foo{}
",
- new[] { SectionDirective.Directive },
- new MarkupBlock(
- Factory.EmptyHtml(),
- new DirectiveBlock(chunkGenerator,
- Factory.CodeTransition(),
- Factory.MetaCode("section").Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Code, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.WhiteSpace),
- Factory.Span(SpanKindInternal.Code, "foo", CSharpSymbolType.Identifier).AsDirectiveToken(SectionDirective.Directive.Tokens[0]),
- Factory.Span(SpanKindInternal.Markup, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.AllWhiteSpace),
- Factory.MetaCode("{").AutoCompleteWith("}", atEndOfSpan: true).Accepts(AcceptedCharactersInternal.None),
- new MarkupBlock(
- Factory.Markup(" "),
- new MarkupTagBlock(
- Factory.Markup("")),
- // Need to provide the markup span as fragments, since the parser will split the {} into separate symbols.
- Factory.Markup("Foo", "{", "}"),
- new MarkupTagBlock(
- Factory.Markup("
"))))));
+ new[] { SectionDirective.Directive });
}
[Fact]
@@ -299,10 +127,6 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
{
// Arrange
var newLine = Environment.NewLine;
- var chunkGenerator = new DirectiveChunkGenerator(SectionDirective.Directive);
- chunkGenerator.Diagnostics.Add(
- RazorDiagnosticFactory.CreateParsing_ExpectedEndOfBlockBeforeEOF(
- new SourceSpan(new SourceLocation(13 + newLine.Length, 1, 0), contentLength: 1), "section", "}", "{"));
var spaces = " ";
// Act & Assert
@@ -311,29 +135,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
"@section Test{0}{{{0}{1}@if(true){0}{1}{{{0}{1}{1}Hello World
{0}{1}}}",
newLine,
spaces),
- new[] { SectionDirective.Directive },
- new MarkupBlock(
- Factory.EmptyHtml(),
- new DirectiveBlock(chunkGenerator,
- Factory.CodeTransition(),
- Factory.MetaCode("section").Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Code, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.WhiteSpace),
- Factory.Span(SpanKindInternal.Code, "Test", CSharpSymbolType.Identifier).AsDirectiveToken(SectionDirective.Directive.Tokens[0]),
- Factory.Span(SpanKindInternal.Markup, Environment.NewLine, CSharpSymbolType.NewLine).Accepts(AcceptedCharactersInternal.AllWhiteSpace),
- Factory.MetaCode("{").AutoCompleteWith("}", atEndOfSpan: true).Accepts(AcceptedCharactersInternal.None),
- new MarkupBlock(
- Factory.Markup(newLine),
- new StatementBlock(
- Factory.Code(spaces).AsStatement(),
- Factory.CodeTransition(),
- Factory.Code($"if(true){newLine}{spaces}{{{newLine}").AsStatement(),
- new MarkupBlock(
- Factory.Markup($"{spaces}{spaces}"),
- BlockFactory.MarkupTagBlock("", AcceptedCharactersInternal.None),
- Factory.Markup("Hello World"),
- BlockFactory.MarkupTagBlock("
", AcceptedCharactersInternal.None),
- Factory.Markup(newLine).Accepts(AcceptedCharactersInternal.None)),
- Factory.Code($"{spaces}}}").AsStatement())))));
+ new[] { SectionDirective.Directive });
}
[Fact]
@@ -350,22 +152,12 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
// Act & Assert
ParseDocumentTest(
"@section foo " + Environment.NewLine,
- new[] { SectionDirective.Directive },
- new MarkupBlock(
- Factory.EmptyHtml(),
- new DirectiveBlock(chunkGenerator,
- Factory.CodeTransition(),
- Factory.MetaCode("section").Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Code, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.WhiteSpace),
- Factory.Span(SpanKindInternal.Code, "foo", CSharpSymbolType.Identifier).AsDirectiveToken(SectionDirective.Directive.Tokens[0]),
- Factory.Span(SpanKindInternal.Markup, " " + Environment.NewLine, markup: false).Accepts(AcceptedCharactersInternal.AllWhiteSpace)),
- Factory.EmptyHtml()));
+ new[] { SectionDirective.Directive });
}
[Fact]
public void ParseSectionBlockAcceptsOpenBraceMultipleLinesBelowSectionName()
{
- // Act & Assert
ParseDocumentTest(
"@section foo "
+ Environment.NewLine
@@ -377,239 +169,76 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
+ "{" + Environment.NewLine
+ "Foo
" + Environment.NewLine
+ "}",
- new[] { SectionDirective.Directive },
- new MarkupBlock(
- Factory.EmptyHtml(),
- new DirectiveBlock(new DirectiveChunkGenerator(SectionDirective.Directive),
- Factory.CodeTransition(),
- Factory.MetaCode("section").Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Code, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.WhiteSpace),
- Factory.Span(SpanKindInternal.Code, "foo", CSharpSymbolType.Identifier).AsDirectiveToken(SectionDirective.Directive.Tokens[0]),
- Factory.Span(SpanKindInternal.Markup, " " + string.Format("{0}{0}{0}{0}{0}{0}", Environment.NewLine), markup: false).Accepts(AcceptedCharactersInternal.AllWhiteSpace),
- Factory.MetaCode("{").AutoCompleteWith(null, atEndOfSpan: true).Accepts(AcceptedCharactersInternal.None),
- new MarkupBlock(
- Factory.Markup(Environment.NewLine),
- new MarkupTagBlock(
- Factory.Markup("")),
- Factory.Markup("Foo"),
- new MarkupTagBlock(
- Factory.Markup("
")),
- Factory.Markup(Environment.NewLine)),
- Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None)),
- Factory.EmptyHtml()));
+ new[] { SectionDirective.Directive });
}
[Fact]
public void ParseSectionBlockParsesNamedSectionCorrectly()
{
- // Act & Assert
ParseDocumentTest(
"@section foo { Foo
}",
- new[] { SectionDirective.Directive },
- new MarkupBlock(
- Factory.EmptyHtml(),
- new DirectiveBlock(new DirectiveChunkGenerator(SectionDirective.Directive),
- Factory.CodeTransition(),
- Factory.MetaCode("section").Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Code, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.WhiteSpace),
- Factory.Span(SpanKindInternal.Code, "foo", CSharpSymbolType.Identifier).AsDirectiveToken(SectionDirective.Directive.Tokens[0]),
- Factory.Span(SpanKindInternal.Markup, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.AllWhiteSpace),
- Factory.MetaCode("{").AutoCompleteWith(null, atEndOfSpan: true).Accepts(AcceptedCharactersInternal.None),
- new MarkupBlock(
- Factory.Markup(" "),
- new MarkupTagBlock(
- Factory.Markup("")),
- Factory.Markup("Foo"),
- new MarkupTagBlock(
- Factory.Markup("
")),
- Factory.Markup(" ")),
- Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None)),
- Factory.EmptyHtml()));
+ new[] { SectionDirective.Directive });
}
[Fact]
public void ParseSectionBlockDoesNotRequireSpaceBetweenSectionNameAndOpenBrace()
{
- // Act & Assert
ParseDocumentTest(
"@section foo{ Foo
}",
- new[] { SectionDirective.Directive },
- new MarkupBlock(
- Factory.EmptyHtml(),
- new DirectiveBlock(new DirectiveChunkGenerator(SectionDirective.Directive),
- Factory.CodeTransition(),
- Factory.MetaCode("section").Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Code, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.WhiteSpace),
- Factory.Span(SpanKindInternal.Code, "foo", CSharpSymbolType.Identifier).AsDirectiveToken(SectionDirective.Directive.Tokens[0]),
- Factory.MetaCode("{").AutoCompleteWith(null, atEndOfSpan: true).Accepts(AcceptedCharactersInternal.None),
- new MarkupBlock(
- Factory.Markup(" "),
- new MarkupTagBlock(
- Factory.Markup("")),
- Factory.Markup("Foo"),
- new MarkupTagBlock(
- Factory.Markup("
")),
- Factory.Markup(" ")),
- Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None)),
- Factory.EmptyHtml()));
+ new[] { SectionDirective.Directive });
}
[Fact]
public void ParseSectionBlockBalancesBraces()
{
- // Act & Assert
ParseDocumentTest(
"@section foo { }",
- new[] { SectionDirective.Directive },
- new MarkupBlock(
- Factory.EmptyHtml(),
- new DirectiveBlock(new DirectiveChunkGenerator(SectionDirective.Directive),
- Factory.CodeTransition(),
- Factory.MetaCode("section").Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Code, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.WhiteSpace),
- Factory.Span(SpanKindInternal.Code, "foo", CSharpSymbolType.Identifier).AsDirectiveToken(SectionDirective.Directive.Tokens[0]),
- Factory.Span(SpanKindInternal.Markup, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.AllWhiteSpace),
- Factory.MetaCode("{").AutoCompleteWith(null, atEndOfSpan: true).Accepts(AcceptedCharactersInternal.None),
- new MarkupBlock(
- Factory.Markup(" "),
- new MarkupTagBlock(
- Factory.Markup("")),
- Factory.Markup(" ")),
- Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None)),
- Factory.EmptyHtml()));
+ new[] { SectionDirective.Directive });
}
[Fact]
public void ParseSectionBlockAllowsBracesInCSharpExpression()
{
- // Act & Assert
ParseDocumentTest(
"@section foo { I really want to render a close brace, so here I go: @(\"}\") }",
- new[] { SectionDirective.Directive },
- new MarkupBlock(
- Factory.EmptyHtml(),
- new DirectiveBlock(new DirectiveChunkGenerator(SectionDirective.Directive),
- Factory.CodeTransition(),
- Factory.MetaCode("section").Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Code, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.WhiteSpace),
- Factory.Span(SpanKindInternal.Code, "foo", CSharpSymbolType.Identifier).AsDirectiveToken(SectionDirective.Directive.Tokens[0]),
- Factory.Span(SpanKindInternal.Markup, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.AllWhiteSpace),
- Factory.MetaCode("{").AutoCompleteWith(null, atEndOfSpan: true).Accepts(AcceptedCharactersInternal.None),
- new MarkupBlock(
- Factory.Markup(" I really want to render a close brace, so here I go: "),
- new ExpressionBlock(
- Factory.CodeTransition(),
- Factory.MetaCode("(").Accepts(AcceptedCharactersInternal.None),
- Factory.Code("\"}\"").AsExpression(),
- Factory.MetaCode(")").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(" ")),
- Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None)),
- Factory.EmptyHtml()));
+ new[] { SectionDirective.Directive });
}
[Fact]
public void SectionIsCorrectlyTerminatedWhenCloseBraceImmediatelyFollowsCodeBlock()
{
- // Act & Assert
ParseDocumentTest(
"@section Foo {" + Environment.NewLine
+ "@if(true) {" + Environment.NewLine
+ "}" + Environment.NewLine
+ "}",
- new[] { SectionDirective.Directive },
- new MarkupBlock(
- Factory.EmptyHtml(),
- new DirectiveBlock(new DirectiveChunkGenerator(SectionDirective.Directive),
- Factory.CodeTransition(),
- Factory.MetaCode("section").Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Code, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.WhiteSpace),
- Factory.Span(SpanKindInternal.Code, "Foo", CSharpSymbolType.Identifier).AsDirectiveToken(SectionDirective.Directive.Tokens[0]),
- Factory.Span(SpanKindInternal.Markup, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.AllWhiteSpace),
- Factory.MetaCode("{").AutoCompleteWith(null, atEndOfSpan: true).Accepts(AcceptedCharactersInternal.None),
- new MarkupBlock(
- Factory.Markup(Environment.NewLine),
- new StatementBlock(
- Factory.CodeTransition(),
- Factory.Code($"if(true) {{{Environment.NewLine}}}{Environment.NewLine}").AsStatement()
- )),
- Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None)),
- Factory.EmptyHtml()));
+ new[] { SectionDirective.Directive });
}
[Fact]
public void SectionIsCorrectlyTerminatedWhenCloseBraceImmediatelyFollowsCodeBlockNoWhitespace()
{
- // Act & Assert
ParseDocumentTest(
"@section Foo {" + Environment.NewLine
+ "@if(true) {" + Environment.NewLine
+ "}}",
- new[] { SectionDirective.Directive },
- new MarkupBlock(
- Factory.EmptyHtml(),
- new DirectiveBlock(new DirectiveChunkGenerator(SectionDirective.Directive),
- Factory.CodeTransition(),
- Factory.MetaCode("section").Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Code, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.WhiteSpace),
- Factory.Span(SpanKindInternal.Code, "Foo", CSharpSymbolType.Identifier).AsDirectiveToken(SectionDirective.Directive.Tokens[0]),
- Factory.Span(SpanKindInternal.Markup, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.AllWhiteSpace),
- Factory.MetaCode("{").AutoCompleteWith(null, atEndOfSpan: true).Accepts(AcceptedCharactersInternal.None),
- new MarkupBlock(
- Factory.Markup(Environment.NewLine),
- new StatementBlock(
- Factory.CodeTransition(),
- Factory.Code($"if(true) {{{Environment.NewLine}}}").AsStatement()
- )),
- Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None)),
- Factory.EmptyHtml()));
+ new[] { SectionDirective.Directive });
}
[Fact]
public void ParseSectionBlockCorrectlyTerminatesWhenCloseBraceImmediatelyFollowsMarkup()
{
- // Act & Assert
ParseDocumentTest(
"@section foo {something}",
- new[] { SectionDirective.Directive },
- new MarkupBlock(
- Factory.EmptyHtml(),
- new DirectiveBlock(new DirectiveChunkGenerator(SectionDirective.Directive),
- Factory.CodeTransition(),
- Factory.MetaCode("section").Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Code, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.WhiteSpace),
- Factory.Span(SpanKindInternal.Code, "foo", CSharpSymbolType.Identifier).AsDirectiveToken(SectionDirective.Directive.Tokens[0]),
- Factory.Span(SpanKindInternal.Markup, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.AllWhiteSpace),
- Factory.MetaCode("{").AutoCompleteWith(null, atEndOfSpan: true).Accepts(AcceptedCharactersInternal.None),
- new MarkupBlock(
- Factory.Markup("something")),
- Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None)),
- Factory.EmptyHtml()));
+ new[] { SectionDirective.Directive });
}
[Fact]
public void ParseSectionBlockParsesComment()
{
- // Act & Assert
ParseDocumentTest(
"@section s {}",
- new[] { SectionDirective.Directive },
- new MarkupBlock(
- Factory.EmptyHtml(),
- new DirectiveBlock(new DirectiveChunkGenerator(SectionDirective.Directive),
- Factory.CodeTransition(),
- Factory.MetaCode("section").Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Code, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.WhiteSpace),
- Factory.Span(SpanKindInternal.Code, "s", CSharpSymbolType.Identifier).AsDirectiveToken(SectionDirective.Directive.Tokens[0]),
- Factory.Span(SpanKindInternal.Markup, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.AllWhiteSpace),
- Factory.MetaCode("{").AutoCompleteWith(null, atEndOfSpan: true).Accepts(AcceptedCharactersInternal.None),
- new MarkupBlock(
- BlockFactory.HtmlCommentBlock(" "),
- Factory.EmptyHtml()),
- Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None)),
- Factory.EmptyHtml()));
+ new[] { SectionDirective.Directive });
}
// This was a user reported bug (codeplex #710), the section parser wasn't handling
@@ -617,150 +246,38 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
[Fact]
public void ParseSectionBlockParsesCommentWithDelimiters()
{
- // Act & Assert
ParseDocumentTest(
"@section s {}",
- new[] { SectionDirective.Directive },
- new MarkupBlock(
- Factory.EmptyHtml(),
- new DirectiveBlock(new DirectiveChunkGenerator(SectionDirective.Directive),
- Factory.CodeTransition(),
- Factory.MetaCode("section").Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Code, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.WhiteSpace),
- Factory.Span(SpanKindInternal.Code, "s", CSharpSymbolType.Identifier).AsDirectiveToken(SectionDirective.Directive.Tokens[0]),
- Factory.Span(SpanKindInternal.Markup, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.AllWhiteSpace),
- Factory.MetaCode("{").AutoCompleteWith(null, atEndOfSpan: true).Accepts(AcceptedCharactersInternal.None),
- new MarkupBlock(
- BlockFactory.HtmlCommentBlock(" > \" '"),
- Factory.EmptyHtml()),
- Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None)),
- Factory.EmptyHtml()));
+ new[] { SectionDirective.Directive });
}
[Fact]
public void ParseSectionBlockCommentRecoversFromUnclosedTag()
{
- // Act & Assert
ParseDocumentTest(
"@section s {" + Environment.NewLine + " \" '-->}",
- new[] { SectionDirective.Directive },
- new MarkupBlock(
- Factory.EmptyHtml(),
- new DirectiveBlock(new DirectiveChunkGenerator(SectionDirective.Directive),
- Factory.CodeTransition(),
- Factory.MetaCode("section").Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Code, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.WhiteSpace),
- Factory.Span(SpanKindInternal.Code, "s", CSharpSymbolType.Identifier).AsDirectiveToken(SectionDirective.Directive.Tokens[0]),
- Factory.Span(SpanKindInternal.Markup, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.AllWhiteSpace),
- Factory.MetaCode("{").AutoCompleteWith(null, atEndOfSpan: true).Accepts(AcceptedCharactersInternal.None),
- new MarkupBlock(
- Factory.Markup(Environment.NewLine),
- new MarkupTagBlock(
- Factory.Markup(" \" '"),
- Factory.EmptyHtml()),
- Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None)),
- Factory.EmptyHtml()));
+ new[] { SectionDirective.Directive });
}
[Fact]
public void ParseSectionBlockParsesXmlProcessingInstruction()
{
- // Act & Assert
ParseDocumentTest(
"@section s { xml bleh ?>}",
- new[] { SectionDirective.Directive },
- new MarkupBlock(
- Factory.EmptyHtml(),
- new DirectiveBlock(new DirectiveChunkGenerator(SectionDirective.Directive),
- Factory.CodeTransition(),
- Factory.MetaCode("section").Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Code, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.WhiteSpace),
- Factory.Span(SpanKindInternal.Code, "s", CSharpSymbolType.Identifier).AsDirectiveToken(SectionDirective.Directive.Tokens[0]),
- Factory.Span(SpanKindInternal.Markup, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.AllWhiteSpace),
- Factory.MetaCode("{").AutoCompleteWith(null, atEndOfSpan: true).Accepts(AcceptedCharactersInternal.None),
- new MarkupBlock(
- Factory.Markup(" xml bleh ?>")),
- Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None)),
- Factory.EmptyHtml()));
+ new[] { SectionDirective.Directive });
}
- public static TheoryData SectionWithEscapedTransitionData
+ [Fact]
+ public void ParseSectionBlock_WithDoubleTransition1()
{
- get
- {
- var factory = new SpanFactory();
-
- return new TheoryData
- {
- {
- "@section s {}",
- new MarkupBlock(
- factory.EmptyHtml(),
- new DirectiveBlock(new DirectiveChunkGenerator(SectionDirective.Directive),
- factory.CodeTransition(),
- factory.MetaCode("section").Accepts(AcceptedCharactersInternal.None),
- factory.Span(SpanKindInternal.Code, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.WhiteSpace),
- factory.Span(SpanKindInternal.Code, "s", CSharpSymbolType.Identifier).AsDirectiveToken(SectionDirective.Directive.Tokens[0]),
- factory.Span(SpanKindInternal.Markup, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.AllWhiteSpace),
- factory.MetaCode("{").AutoCompleteWith(null, atEndOfSpan: true).Accepts(AcceptedCharactersInternal.None),
- new MarkupBlock(
- new MarkupTagBlock(
- factory.Markup("(" foo='", 17, 0, 17), new LocationTagged("'", 25, 0, 25)),
- factory.Markup(" foo='").With(SpanChunkGenerator.Null),
- new MarkupBlock(
- factory.Markup("@").With(new LiteralAttributeChunkGenerator(new LocationTagged(string.Empty, 23, 0, 23), new LocationTagged("@", 23, 0, 23))).Accepts(AcceptedCharactersInternal.None),
- factory.Markup("@").With(SpanChunkGenerator.Null).Accepts(AcceptedCharactersInternal.None)),
- factory.Markup("'").With(SpanChunkGenerator.Null)),
- factory.Markup(" />"))),
- factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None)),
- factory.EmptyHtml())
- },
- {
- "@section s {}",
- new MarkupBlock(
- factory.EmptyHtml(),
- new DirectiveBlock(new DirectiveChunkGenerator(SectionDirective.Directive),
- factory.CodeTransition(),
- factory.MetaCode("section").Accepts(AcceptedCharactersInternal.None),
- factory.Span(SpanKindInternal.Code, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.WhiteSpace),
- factory.Span(SpanKindInternal.Code, "s", CSharpSymbolType.Identifier).AsDirectiveToken(SectionDirective.Directive.Tokens[0]),
- factory.Span(SpanKindInternal.Markup, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.AllWhiteSpace),
- factory.MetaCode("{").AutoCompleteWith(null, atEndOfSpan: true).Accepts(AcceptedCharactersInternal.None),
- new MarkupBlock(
- new MarkupTagBlock(
- factory.Markup("(" foo='", 17, 0, 17), new LocationTagged("'", 39, 0, 39)),
- factory.Markup(" foo='").With(SpanChunkGenerator.Null),
- new MarkupBlock(
- new DynamicAttributeBlockChunkGenerator(new LocationTagged(string.Empty, 23, 0, 23), 23, 0, 23),
- new ExpressionBlock(
- factory.CodeTransition(),
- factory.Code("DateTime.Now")
- .AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
- .Accepts(AcceptedCharactersInternal.NonWhiteSpace))),
- new MarkupBlock(
- factory.Markup(" @").With(new LiteralAttributeChunkGenerator(new LocationTagged(" ", 36, 0, 36), new LocationTagged("@", 37, 0, 37))).Accepts(AcceptedCharactersInternal.None),
- factory.Markup("@").With(SpanChunkGenerator.Null).Accepts(AcceptedCharactersInternal.None)),
- factory.Markup("'").With(SpanChunkGenerator.Null)),
- factory.Markup(" />"))),
- factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None)),
- factory.EmptyHtml())
- },
- };
- }
+ ParseDocumentTest("@section s {}", new[] { SectionDirective.Directive });
}
- [Theory]
- [MemberData(nameof(SectionWithEscapedTransitionData))]
- public void ParseSectionBlock_WithDoubleTransition_DoesNotThrow(string input, object expected)
+ [Fact]
+ public void ParseSectionBlock_WithDoubleTransition2()
{
- FixupSpans = true;
-
- ParseDocumentTest(input, new[] { SectionDirective.Directive }, (Block)expected);
+ ParseDocumentTest("@section s {}", new[] { SectionDirective.Directive });
}
+
}
}
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockAcceptsOpenBraceMultipleLinesBelowSectionName.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockAcceptsOpenBraceMultipleLinesBelowSectionName.syntaxtree.txt
new file mode 100644
index 0000000000..0b589fa230
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockAcceptsOpenBraceMultipleLinesBelowSectionName.syntaxtree.txt
@@ -0,0 +1,44 @@
+Markup block - Gen - 46 - (0:0,0)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ Directive block - Gen - 46 - (0:0,0)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
+ CSharpSymbolType.Transition;[@];
+ MetaCode span - Gen - [section] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1
+ CSharpSymbolType.Identifier;[section];
+ Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (8:0,8) - Symbols:1
+ CSharpSymbolType.WhiteSpace;[ ];
+ Code span - Gen - [foo] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (9:0,9) - Symbols:1
+ CSharpSymbolType.Identifier;[foo];
+ Markup span - Gen - [ LFLFLFLFLFLF] - SpanEditHandler;Accepts:AllWhiteSpace - (12:0,12) - Symbols:7
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.NewLine;[LF];
+ CSharpSymbolType.NewLine;[LF];
+ CSharpSymbolType.NewLine;[LF];
+ CSharpSymbolType.NewLine;[LF];
+ CSharpSymbolType.NewLine;[LF];
+ CSharpSymbolType.NewLine;[LF];
+ MetaCode span - Gen - [{] - AutoCompleteEditHandler;Accepts:None,AutoComplete:[];AtEnd - (30:6,0) - Symbols:1
+ CSharpSymbolType.LeftBrace;[{];
+ Markup block - Gen - 14 - (31:6,1)
+ Markup span - Gen - [LF] - SpanEditHandler;Accepts:Any - (31:6,1) - Symbols:1
+ HtmlSymbolType.NewLine;[LF];
+ Tag block - Gen - 3 - (33:7,0)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (33:7,0) - Symbols:3
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [Foo] - SpanEditHandler;Accepts:Any - (36:7,3) - Symbols:1
+ HtmlSymbolType.Text;[Foo];
+ Tag block - Gen - 4 - (39:7,6)
+ Markup span - Gen - [
] - SpanEditHandler;Accepts:Any - (39:7,6) - Symbols:4
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.ForwardSlash;[/];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [LF] - SpanEditHandler;Accepts:Any - (43:7,10) - Symbols:1
+ HtmlSymbolType.NewLine;[LF];
+ MetaCode span - Gen - [}] - SpanEditHandler;Accepts:None - (45:8,0) - Symbols:1
+ CSharpSymbolType.RightBrace;[}];
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (46:8,1) - Symbols:1
+ HtmlSymbolType.Unknown;[];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockAllowsBracesInCSharpExpression.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockAllowsBracesInCSharpExpression.syntaxtree.txt
new file mode 100644
index 0000000000..7629579f45
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockAllowsBracesInCSharpExpression.syntaxtree.txt
@@ -0,0 +1,58 @@
+Markup block - Gen - 76 - (0:0,0)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ Directive block - Gen - 76 - (0:0,0)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
+ CSharpSymbolType.Transition;[@];
+ MetaCode span - Gen - [section] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1
+ CSharpSymbolType.Identifier;[section];
+ Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (8:0,8) - Symbols:1
+ CSharpSymbolType.WhiteSpace;[ ];
+ Code span - Gen - [foo] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (9:0,9) - Symbols:1
+ CSharpSymbolType.Identifier;[foo];
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:AllWhiteSpace - (12:0,12) - Symbols:1
+ CSharpSymbolType.WhiteSpace;[ ];
+ MetaCode span - Gen - [{] - AutoCompleteEditHandler;Accepts:None,AutoComplete:[];AtEnd - (13:0,13) - Symbols:1
+ CSharpSymbolType.LeftBrace;[{];
+ Markup block - Gen - 61 - (14:0,14)
+ Markup span - Gen - [ I really want to render a close brace, so here I go: ] - SpanEditHandler;Accepts:Any - (14:0,14) - Symbols:25
+ HtmlSymbolType.WhiteSpace;[ ];
+ HtmlSymbolType.Text;[I];
+ HtmlSymbolType.WhiteSpace;[ ];
+ HtmlSymbolType.Text;[really];
+ HtmlSymbolType.WhiteSpace;[ ];
+ HtmlSymbolType.Text;[want];
+ HtmlSymbolType.WhiteSpace;[ ];
+ HtmlSymbolType.Text;[to];
+ HtmlSymbolType.WhiteSpace;[ ];
+ HtmlSymbolType.Text;[render];
+ HtmlSymbolType.WhiteSpace;[ ];
+ HtmlSymbolType.Text;[a];
+ HtmlSymbolType.WhiteSpace;[ ];
+ HtmlSymbolType.Text;[close];
+ HtmlSymbolType.WhiteSpace;[ ];
+ HtmlSymbolType.Text;[brace,];
+ HtmlSymbolType.WhiteSpace;[ ];
+ HtmlSymbolType.Text;[so];
+ HtmlSymbolType.WhiteSpace;[ ];
+ HtmlSymbolType.Text;[here];
+ HtmlSymbolType.WhiteSpace;[ ];
+ HtmlSymbolType.Text;[I];
+ HtmlSymbolType.WhiteSpace;[ ];
+ HtmlSymbolType.Text;[go:];
+ HtmlSymbolType.WhiteSpace;[ ];
+ Expression block - Gen - 6 - (68:0,68)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (68:0,68) - Symbols:1
+ CSharpSymbolType.Transition;[@];
+ MetaCode span - Gen - [(] - SpanEditHandler;Accepts:None - (69:0,69) - Symbols:1
+ CSharpSymbolType.LeftParenthesis;[(];
+ Code span - Gen - ["}"] - SpanEditHandler;Accepts:Any - (70:0,70) - Symbols:1
+ CSharpSymbolType.StringLiteral;["}"];
+ MetaCode span - Gen - [)] - SpanEditHandler;Accepts:None - (73:0,73) - Symbols:1
+ CSharpSymbolType.RightParenthesis;[)];
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:Any - (74:0,74) - Symbols:1
+ HtmlSymbolType.WhiteSpace;[ ];
+ MetaCode span - Gen - [}] - SpanEditHandler;Accepts:None - (75:0,75) - Symbols:1
+ CSharpSymbolType.RightBrace;[}];
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (76:0,76) - Symbols:1
+ HtmlSymbolType.Unknown;[];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockBalancesBraces.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockBalancesBraces.syntaxtree.txt
new file mode 100644
index 0000000000..b7d3454670
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockBalancesBraces.syntaxtree.txt
@@ -0,0 +1,48 @@
+Markup block - Gen - 67 - (0:0,0)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ Directive block - Gen - 67 - (0:0,0)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
+ CSharpSymbolType.Transition;[@];
+ MetaCode span - Gen - [section] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1
+ CSharpSymbolType.Identifier;[section];
+ Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (8:0,8) - Symbols:1
+ CSharpSymbolType.WhiteSpace;[ ];
+ Code span - Gen - [foo] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (9:0,9) - Symbols:1
+ CSharpSymbolType.Identifier;[foo];
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:AllWhiteSpace - (12:0,12) - Symbols:1
+ CSharpSymbolType.WhiteSpace;[ ];
+ MetaCode span - Gen - [{] - AutoCompleteEditHandler;Accepts:None,AutoComplete:[];AtEnd - (13:0,13) - Symbols:1
+ CSharpSymbolType.LeftBrace;[{];
+ Markup block - Gen - 52 - (14:0,14)
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:Any - (14:0,14) - Symbols:1
+ HtmlSymbolType.WhiteSpace;[ ];
+ Tag block - Gen - 8 - (15:0,15)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (56:0,56) - Symbols:4
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.ForwardSlash;[/];
+ HtmlSymbolType.Text;[script];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:Any - (65:0,65) - Symbols:1
+ HtmlSymbolType.WhiteSpace;[ ];
+ MetaCode span - Gen - [}] - SpanEditHandler;Accepts:None - (66:0,66) - Symbols:1
+ CSharpSymbolType.RightBrace;[}];
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (67:0,67) - Symbols:1
+ HtmlSymbolType.Unknown;[];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockCapturesNewlineImmediatelyFollowing.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockCapturesNewlineImmediatelyFollowing.syntaxtree.txt
new file mode 100644
index 0000000000..546b239714
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockCapturesNewlineImmediatelyFollowing.syntaxtree.txt
@@ -0,0 +1,12 @@
+Markup block - Gen - 10 - (0:0,0)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ Directive block - Gen - 8 - (0:0,0)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
+ CSharpSymbolType.Transition;[@];
+ MetaCode span - Gen - [section] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1
+ CSharpSymbolType.Identifier;[section];
+ Code span - Gen - [] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (8:0,8) - Symbols:1
+ CSharpSymbolType.Unknown;[];
+ Markup span - Gen - [LF] - SpanEditHandler;Accepts:Any - (8:0,8) - Symbols:1
+ HtmlSymbolType.NewLine;[LF];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockCapturesWhitespaceToEndOfLineInSectionStatementMissingName.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockCapturesWhitespaceToEndOfLineInSectionStatementMissingName.syntaxtree.txt
new file mode 100644
index 0000000000..4590b6fe8b
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockCapturesWhitespaceToEndOfLineInSectionStatementMissingName.syntaxtree.txt
@@ -0,0 +1,15 @@
+Markup block - Gen - 23 - (0:0,0)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ Directive block - Gen - 17 - (0:0,0)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
+ CSharpSymbolType.Transition;[@];
+ MetaCode span - Gen - [section] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1
+ CSharpSymbolType.Identifier;[section];
+ Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (8:0,8) - Symbols:1
+ CSharpSymbolType.WhiteSpace;[ ];
+ Code span - Gen - [] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (17:0,17) - Symbols:1
+ CSharpSymbolType.Unknown;[];
+ Markup span - Gen - [LF ] - SpanEditHandler;Accepts:Any - (17:0,17) - Symbols:2
+ HtmlSymbolType.NewLine;[LF];
+ HtmlSymbolType.WhiteSpace;[ ];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockCapturesWhitespaceToEndOfLineInSectionStatementMissingOpenBrace.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockCapturesWhitespaceToEndOfLineInSectionStatementMissingOpenBrace.syntaxtree.txt
new file mode 100644
index 0000000000..c1f6728eda
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockCapturesWhitespaceToEndOfLineInSectionStatementMissingOpenBrace.syntaxtree.txt
@@ -0,0 +1,18 @@
+Markup block - Gen - 27 - (0:0,0)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ Directive block - Gen - 27 - (0:0,0)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
+ CSharpSymbolType.Transition;[@];
+ MetaCode span - Gen - [section] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1
+ CSharpSymbolType.Identifier;[section];
+ Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (8:0,8) - Symbols:1
+ CSharpSymbolType.WhiteSpace;[ ];
+ Code span - Gen - [Foo] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (9:0,9) - Symbols:1
+ CSharpSymbolType.Identifier;[Foo];
+ Markup span - Gen - [ LF ] - SpanEditHandler;Accepts:AllWhiteSpace - (12:0,12) - Symbols:3
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.NewLine;[LF];
+ CSharpSymbolType.WhiteSpace;[ ];
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (27:1,4) - Symbols:1
+ HtmlSymbolType.Unknown;[];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockCommentRecoversFromUnclosedTag.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockCommentRecoversFromUnclosedTag.syntaxtree.txt
new file mode 100644
index 0000000000..55310fee65
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockCommentRecoversFromUnclosedTag.syntaxtree.txt
@@ -0,0 +1,45 @@
+Markup block - Gen - 33 - (0:0,0)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ Directive block - Gen - 33 - (0:0,0)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
+ CSharpSymbolType.Transition;[@];
+ MetaCode span - Gen - [section] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1
+ CSharpSymbolType.Identifier;[section];
+ Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (8:0,8) - Symbols:1
+ CSharpSymbolType.WhiteSpace;[ ];
+ Code span - Gen - [s] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (9:0,9) - Symbols:1
+ CSharpSymbolType.Identifier;[s];
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:AllWhiteSpace - (10:0,10) - Symbols:1
+ CSharpSymbolType.WhiteSpace;[ ];
+ MetaCode span - Gen - [{] - AutoCompleteEditHandler;Accepts:None,AutoComplete:[];AtEnd - (11:0,11) - Symbols:1
+ CSharpSymbolType.LeftBrace;[{];
+ Markup block - Gen - 20 - (12:0,12)
+ Markup span - Gen - [LF] - SpanEditHandler;Accepts:Any - (12:0,12) - Symbols:1
+ HtmlSymbolType.NewLine;[LF];
+ Tag block - Gen - 4 - (14:1,0)
+ Markup span - Gen - [ - 14 - (18:2,0)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:None - (29:2,11) - Symbols:2
+ HtmlSymbolType.DoubleHyphen;[--];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (32:2,14) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ MetaCode span - Gen - [}] - SpanEditHandler;Accepts:None - (32:2,14) - Symbols:1
+ CSharpSymbolType.RightBrace;[}];
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (33:2,15) - Symbols:1
+ HtmlSymbolType.Unknown;[];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockCorrectlyTerminatesWhenCloseBraceImmediatelyFollowsMarkup.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockCorrectlyTerminatesWhenCloseBraceImmediatelyFollowsMarkup.syntaxtree.txt
new file mode 100644
index 0000000000..2a3fe9aae1
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockCorrectlyTerminatesWhenCloseBraceImmediatelyFollowsMarkup.syntaxtree.txt
@@ -0,0 +1,23 @@
+Markup block - Gen - 24 - (0:0,0)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ Directive block - Gen - 24 - (0:0,0)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
+ CSharpSymbolType.Transition;[@];
+ MetaCode span - Gen - [section] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1
+ CSharpSymbolType.Identifier;[section];
+ Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (8:0,8) - Symbols:1
+ CSharpSymbolType.WhiteSpace;[ ];
+ Code span - Gen - [foo] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (9:0,9) - Symbols:1
+ CSharpSymbolType.Identifier;[foo];
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:AllWhiteSpace - (12:0,12) - Symbols:1
+ CSharpSymbolType.WhiteSpace;[ ];
+ MetaCode span - Gen - [{] - AutoCompleteEditHandler;Accepts:None,AutoComplete:[];AtEnd - (13:0,13) - Symbols:1
+ CSharpSymbolType.LeftBrace;[{];
+ Markup block - Gen - 9 - (14:0,14)
+ Markup span - Gen - [something] - SpanEditHandler;Accepts:Any - (14:0,14) - Symbols:1
+ HtmlSymbolType.Text;[something];
+ MetaCode span - Gen - [}] - SpanEditHandler;Accepts:None - (23:0,23) - Symbols:1
+ CSharpSymbolType.RightBrace;[}];
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (24:0,24) - Symbols:1
+ HtmlSymbolType.Unknown;[];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockDoesNotRequireSpaceBetweenSectionNameAndOpenBrace.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockDoesNotRequireSpaceBetweenSectionNameAndOpenBrace.syntaxtree.txt
new file mode 100644
index 0000000000..d09ac5b531
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockDoesNotRequireSpaceBetweenSectionNameAndOpenBrace.syntaxtree.txt
@@ -0,0 +1,36 @@
+Markup block - Gen - 26 - (0:0,0)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ Directive block - Gen - 26 - (0:0,0)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
+ CSharpSymbolType.Transition;[@];
+ MetaCode span - Gen - [section] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1
+ CSharpSymbolType.Identifier;[section];
+ Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (8:0,8) - Symbols:1
+ CSharpSymbolType.WhiteSpace;[ ];
+ Code span - Gen - [foo] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (9:0,9) - Symbols:1
+ CSharpSymbolType.Identifier;[foo];
+ MetaCode span - Gen - [{] - AutoCompleteEditHandler;Accepts:None,AutoComplete:[];AtEnd - (12:0,12) - Symbols:1
+ CSharpSymbolType.LeftBrace;[{];
+ Markup block - Gen - 12 - (13:0,13)
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:Any - (13:0,13) - Symbols:1
+ HtmlSymbolType.WhiteSpace;[ ];
+ Tag block - Gen - 3 - (14:0,14)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (14:0,14) - Symbols:3
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [Foo] - SpanEditHandler;Accepts:Any - (17:0,17) - Symbols:1
+ HtmlSymbolType.Text;[Foo];
+ Tag block - Gen - 4 - (20:0,20)
+ Markup span - Gen - [
] - SpanEditHandler;Accepts:Any - (20:0,20) - Symbols:4
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.ForwardSlash;[/];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:Any - (24:0,24) - Symbols:1
+ HtmlSymbolType.WhiteSpace;[ ];
+ MetaCode span - Gen - [}] - SpanEditHandler;Accepts:None - (25:0,25) - Symbols:1
+ CSharpSymbolType.RightBrace;[}];
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (26:0,26) - Symbols:1
+ HtmlSymbolType.Unknown;[];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockHandlesEOFAfterOpenBrace.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockHandlesEOFAfterOpenBrace.syntaxtree.txt
new file mode 100644
index 0000000000..18a3b5034b
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockHandlesEOFAfterOpenBrace.syntaxtree.txt
@@ -0,0 +1,19 @@
+Markup block - Gen - 14 - (0:0,0)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ Directive block - Gen - 14 - (0:0,0)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
+ CSharpSymbolType.Transition;[@];
+ MetaCode span - Gen - [section] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1
+ CSharpSymbolType.Identifier;[section];
+ Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (8:0,8) - Symbols:1
+ CSharpSymbolType.WhiteSpace;[ ];
+ Code span - Gen - [foo] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (9:0,9) - Symbols:1
+ CSharpSymbolType.Identifier;[foo];
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:AllWhiteSpace - (12:0,12) - Symbols:1
+ CSharpSymbolType.WhiteSpace;[ ];
+ MetaCode span - Gen - [{] - AutoCompleteEditHandler;Accepts:None,AutoComplete:[}];AtEnd - (13:0,13) - Symbols:1
+ CSharpSymbolType.LeftBrace;[{];
+ Markup block - Gen - 0 - (14:0,14)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (14:0,14) - Symbols:1
+ HtmlSymbolType.Unknown;[];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockHandlesEOFAfterOpenContent1.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockHandlesEOFAfterOpenContent1.syntaxtree.txt
new file mode 100644
index 0000000000..53009cd47d
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockHandlesEOFAfterOpenContent1.syntaxtree.txt
@@ -0,0 +1,19 @@
+Markup block - Gen - 15 - (0:0,0)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ Directive block - Gen - 15 - (0:0,0)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
+ CSharpSymbolType.Transition;[@];
+ MetaCode span - Gen - [section] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1
+ CSharpSymbolType.Identifier;[section];
+ Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (8:0,8) - Symbols:1
+ CSharpSymbolType.WhiteSpace;[ ];
+ Code span - Gen - [foo] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (9:0,9) - Symbols:1
+ CSharpSymbolType.Identifier;[foo];
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:AllWhiteSpace - (12:0,12) - Symbols:1
+ CSharpSymbolType.WhiteSpace;[ ];
+ MetaCode span - Gen - [{] - AutoCompleteEditHandler;Accepts:None,AutoComplete:[}];AtEnd - (13:0,13) - Symbols:1
+ CSharpSymbolType.LeftBrace;[{];
+ Markup block - Gen - 1 - (14:0,14)
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:Any - (14:0,14) - Symbols:1
+ HtmlSymbolType.WhiteSpace;[ ];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockHandlesEOFAfterOpenContent2.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockHandlesEOFAfterOpenContent2.syntaxtree.txt
new file mode 100644
index 0000000000..1d6f145970
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockHandlesEOFAfterOpenContent2.syntaxtree.txt
@@ -0,0 +1,19 @@
+Markup block - Gen - 16 - (0:0,0)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ Directive block - Gen - 16 - (0:0,0)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
+ CSharpSymbolType.Transition;[@];
+ MetaCode span - Gen - [section] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1
+ CSharpSymbolType.Identifier;[section];
+ Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (8:0,8) - Symbols:1
+ CSharpSymbolType.WhiteSpace;[ ];
+ Code span - Gen - [foo] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (9:0,9) - Symbols:1
+ CSharpSymbolType.Identifier;[foo];
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:AllWhiteSpace - (12:0,12) - Symbols:1
+ CSharpSymbolType.WhiteSpace;[ ];
+ MetaCode span - Gen - [{] - AutoCompleteEditHandler;Accepts:None,AutoComplete:[}];AtEnd - (13:0,13) - Symbols:1
+ CSharpSymbolType.LeftBrace;[{];
+ Markup block - Gen - 2 - (14:0,14)
+ Markup span - Gen - [LF] - SpanEditHandler;Accepts:Any - (14:0,14) - Symbols:1
+ HtmlSymbolType.NewLine;[LF];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockHandlesEOFAfterOpenContent3.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockHandlesEOFAfterOpenContent3.syntaxtree.txt
new file mode 100644
index 0000000000..a9a1a16f71
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockHandlesEOFAfterOpenContent3.syntaxtree.txt
@@ -0,0 +1,19 @@
+Markup block - Gen - 17 - (0:0,0)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ Directive block - Gen - 17 - (0:0,0)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
+ CSharpSymbolType.Transition;[@];
+ MetaCode span - Gen - [section] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1
+ CSharpSymbolType.Identifier;[section];
+ Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (8:0,8) - Symbols:1
+ CSharpSymbolType.WhiteSpace;[ ];
+ Code span - Gen - [foo] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (9:0,9) - Symbols:1
+ CSharpSymbolType.Identifier;[foo];
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:AllWhiteSpace - (12:0,12) - Symbols:1
+ CSharpSymbolType.WhiteSpace;[ ];
+ MetaCode span - Gen - [{] - AutoCompleteEditHandler;Accepts:None,AutoComplete:[}];AtEnd - (13:0,13) - Symbols:1
+ CSharpSymbolType.LeftBrace;[{];
+ Markup block - Gen - 3 - (14:0,14)
+ Markup span - Gen - [abc] - SpanEditHandler;Accepts:Any - (14:0,14) - Symbols:1
+ HtmlSymbolType.Text;[abc];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockHandlesEOFAfterOpenContent4.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockHandlesEOFAfterOpenContent4.syntaxtree.txt
new file mode 100644
index 0000000000..025e6f95cc
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockHandlesEOFAfterOpenContent4.syntaxtree.txt
@@ -0,0 +1,21 @@
+Markup block - Gen - 20 - (0:0,0)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ Directive block - Gen - 20 - (0:0,0)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
+ CSharpSymbolType.Transition;[@];
+ MetaCode span - Gen - [section] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1
+ CSharpSymbolType.Identifier;[section];
+ Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (8:0,8) - Symbols:1
+ CSharpSymbolType.WhiteSpace;[ ];
+ Code span - Gen - [foo] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (9:0,9) - Symbols:1
+ CSharpSymbolType.Identifier;[foo];
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:AllWhiteSpace - (12:0,12) - Symbols:1
+ CSharpSymbolType.WhiteSpace;[ ];
+ MetaCode span - Gen - [{] - AutoCompleteEditHandler;Accepts:None,AutoComplete:[}];AtEnd - (13:0,13) - Symbols:1
+ CSharpSymbolType.LeftBrace;[{];
+ Markup block - Gen - 6 - (14:0,14)
+ Markup span - Gen - [LF abc] - SpanEditHandler;Accepts:Any - (14:0,14) - Symbols:3
+ HtmlSymbolType.NewLine;[LF];
+ HtmlSymbolType.WhiteSpace;[ ];
+ HtmlSymbolType.Text;[abc];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockHandlesUnterminatedSection.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockHandlesUnterminatedSection.syntaxtree.txt
new file mode 100644
index 0000000000..10d6830487
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockHandlesUnterminatedSection.syntaxtree.txt
@@ -0,0 +1,34 @@
+Markup block - Gen - 27 - (0:0,0)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ Directive block - Gen - 27 - (0:0,0)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
+ CSharpSymbolType.Transition;[@];
+ MetaCode span - Gen - [section] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1
+ CSharpSymbolType.Identifier;[section];
+ Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (8:0,8) - Symbols:1
+ CSharpSymbolType.WhiteSpace;[ ];
+ Code span - Gen - [foo] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (9:0,9) - Symbols:1
+ CSharpSymbolType.Identifier;[foo];
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:AllWhiteSpace - (12:0,12) - Symbols:1
+ CSharpSymbolType.WhiteSpace;[ ];
+ MetaCode span - Gen - [{] - AutoCompleteEditHandler;Accepts:None,AutoComplete:[}];AtEnd - (13:0,13) - Symbols:1
+ CSharpSymbolType.LeftBrace;[{];
+ Markup block - Gen - 13 - (14:0,14)
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:Any - (14:0,14) - Symbols:1
+ HtmlSymbolType.WhiteSpace;[ ];
+ Tag block - Gen - 3 - (15:0,15)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (15:0,15) - Symbols:3
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [Foo{}] - SpanEditHandler;Accepts:Any - (18:0,18) - Symbols:3
+ HtmlSymbolType.Text;[Foo];
+ HtmlSymbolType.Text;[{];
+ HtmlSymbolType.Text;[}];
+ Tag block - Gen - 4 - (23:0,23)
+ Markup span - Gen - [
] - SpanEditHandler;Accepts:Any - (23:0,23) - Symbols:4
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.ForwardSlash;[/];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockHandlesUnterminatedSectionWithNestedIf.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockHandlesUnterminatedSectionWithNestedIf.syntaxtree.txt
new file mode 100644
index 0000000000..3b477a43f4
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockHandlesUnterminatedSectionWithNestedIf.syntaxtree.txt
@@ -0,0 +1,56 @@
+Markup block - Gen - 73 - (0:0,0)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ Directive block - Gen - 73 - (0:0,0)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
+ CSharpSymbolType.Transition;[@];
+ MetaCode span - Gen - [section] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1
+ CSharpSymbolType.Identifier;[section];
+ Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (8:0,8) - Symbols:1
+ CSharpSymbolType.WhiteSpace;[ ];
+ Code span - Gen - [Test] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (9:0,9) - Symbols:1
+ CSharpSymbolType.Identifier;[Test];
+ Markup span - Gen - [LF] - SpanEditHandler;Accepts:AllWhiteSpace - (13:0,13) - Symbols:1
+ CSharpSymbolType.NewLine;[LF];
+ MetaCode span - Gen - [{] - AutoCompleteEditHandler;Accepts:None,AutoComplete:[}];AtEnd - (15:1,0) - Symbols:1
+ CSharpSymbolType.LeftBrace;[{];
+ Markup block - Gen - 57 - (16:1,1)
+ Markup span - Gen - [LF] - SpanEditHandler;Accepts:Any - (16:1,1) - Symbols:1
+ HtmlSymbolType.NewLine;[LF];
+ Statement block - Gen - 55 - (18:2,0)
+ Code span - Gen - [ ] - SpanEditHandler;Accepts:Any - (18:2,0) - Symbols:1
+ CSharpSymbolType.WhiteSpace;[ ];
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (22:2,4) - Symbols:1
+ CSharpSymbolType.Transition;[@];
+ Code span - Gen - [if(true)LF {LF] - SpanEditHandler;Accepts:Any - (23:2,5) - Symbols:8
+ CSharpSymbolType.Keyword;[if];
+ CSharpSymbolType.LeftParenthesis;[(];
+ CSharpSymbolType.Keyword;[true];
+ CSharpSymbolType.RightParenthesis;[)];
+ CSharpSymbolType.NewLine;[LF];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.LeftBrace;[{];
+ CSharpSymbolType.NewLine;[LF];
+ Markup block - Gen - 28 - (40:4,0)
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:Any - (40:4,0) - Symbols:1
+ HtmlSymbolType.WhiteSpace;[ ];
+ Tag block - Gen - 3 - (48:4,8)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:None - (48:4,8) - Symbols:3
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [Hello World] - SpanEditHandler;Accepts:Any - (51:4,11) - Symbols:3
+ HtmlSymbolType.Text;[Hello];
+ HtmlSymbolType.WhiteSpace;[ ];
+ HtmlSymbolType.Text;[World];
+ Tag block - Gen - 4 - (62:4,22)
+ Markup span - Gen - [
] - SpanEditHandler;Accepts:None - (62:4,22) - Symbols:4
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.ForwardSlash;[/];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [LF] - SpanEditHandler;Accepts:None - (66:4,26) - Symbols:1
+ HtmlSymbolType.NewLine;[LF];
+ Code span - Gen - [ }] - SpanEditHandler;Accepts:Any - (68:5,0) - Symbols:2
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.RightBrace;[}];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockIgnoresSectionUnlessAllLowerCase.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockIgnoresSectionUnlessAllLowerCase.syntaxtree.txt
new file mode 100644
index 0000000000..bc8fc8f51b
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockIgnoresSectionUnlessAllLowerCase.syntaxtree.txt
@@ -0,0 +1,11 @@
+Markup block - Gen - 12 - (0:0,0)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ Expression block - Gen - 8 - (0:0,0)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
+ CSharpSymbolType.Transition;[@];
+ Code span - Gen - [Section] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K15 - (1:0,1) - Symbols:1
+ CSharpSymbolType.Identifier;[Section];
+ Markup span - Gen - [ foo] - SpanEditHandler;Accepts:Any - (8:0,8) - Symbols:2
+ HtmlSymbolType.WhiteSpace;[ ];
+ HtmlSymbolType.Text;[foo];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockParsesComment.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockParsesComment.syntaxtree.txt
new file mode 100644
index 0000000000..f4d0548865
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockParsesComment.syntaxtree.txt
@@ -0,0 +1,33 @@
+Markup block - Gen - 21 - (0:0,0)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ Directive block - Gen - 21 - (0:0,0)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
+ CSharpSymbolType.Transition;[@];
+ MetaCode span - Gen - [section] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1
+ CSharpSymbolType.Identifier;[section];
+ Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (8:0,8) - Symbols:1
+ CSharpSymbolType.WhiteSpace;[ ];
+ Code span - Gen - [s] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (9:0,9) - Symbols:1
+ CSharpSymbolType.Identifier;[s];
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:AllWhiteSpace - (10:0,10) - Symbols:1
+ CSharpSymbolType.WhiteSpace;[ ];
+ MetaCode span - Gen - [{] - AutoCompleteEditHandler;Accepts:None,AutoComplete:[];AtEnd - (11:0,11) - Symbols:1
+ CSharpSymbolType.LeftBrace;[{];
+ Markup block - Gen - 8 - (12:0,12)
+ HtmlComment block - Gen - 8 - (12:0,12)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:None - (17:0,17) - Symbols:2
+ HtmlSymbolType.DoubleHyphen;[--];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (20:0,20) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ MetaCode span - Gen - [}] - SpanEditHandler;Accepts:None - (20:0,20) - Symbols:1
+ CSharpSymbolType.RightBrace;[}];
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (21:0,21) - Symbols:1
+ HtmlSymbolType.Unknown;[];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockParsesCommentWithDelimiters.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockParsesCommentWithDelimiters.syntaxtree.txt
new file mode 100644
index 0000000000..5bb8b52316
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpSectionTest/ParseSectionBlockParsesCommentWithDelimiters.syntaxtree.txt
@@ -0,0 +1,38 @@
+Markup block - Gen - 26 - (0:0,0)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ Directive block - Gen - 26 - (0:0,0)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
+ CSharpSymbolType.Transition;[@];
+ MetaCode span - Gen