diff --git a/test/Microsoft.AspNetCore.Razor.Test.Common/Language/Legacy/BlockExtensions.cs b/src/Microsoft.AspNetCore.Razor.Language/Legacy/BlockExtensions.cs similarity index 92% rename from test/Microsoft.AspNetCore.Razor.Test.Common/Language/Legacy/BlockExtensions.cs rename to src/Microsoft.AspNetCore.Razor.Language/Legacy/BlockExtensions.cs index 2fe01b6439..232baf7ee9 100644 --- a/test/Microsoft.AspNetCore.Razor.Test.Common/Language/Legacy/BlockExtensions.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Legacy/BlockExtensions.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.AspNetCore.Razor.Language.Legacy diff --git a/src/Microsoft.AspNetCore.Razor.Language/Legacy/SyntaxTreeBuilder.cs b/src/Microsoft.AspNetCore.Razor.Language/Legacy/SyntaxTreeBuilder.cs index 65db009fca..625a33fba4 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Legacy/SyntaxTreeBuilder.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Legacy/SyntaxTreeBuilder.cs @@ -88,6 +88,8 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy var rootBuilder = _blockStack.Pop(); var root = rootBuilder.Build(); + root.LinkNodes(); + return root; } } diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/RazorParserTest.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/RazorParserTest.cs index 186937a9ad..589a147e4c 100644 --- a/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/RazorParserTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/RazorParserTest.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.IO; +using System.Linq; using Xunit; namespace Microsoft.AspNetCore.Razor.Language.Legacy @@ -21,9 +22,8 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy [Fact] public void ParseMethodCallsParseDocumentOnMarkupParserAndReturnsResults() { - var factory = new SpanFactory(); - // Arrange + var factory = new SpanFactory(); var parser = new RazorParser(); // Act/Assert @@ -41,9 +41,8 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy [Fact] public void ParseMethodUsesProvidedParserListenerIfSpecified() { - var factory = new SpanFactory(); - // Arrange + var factory = new SpanFactory(); var parser = new RazorParser(); // Act @@ -60,5 +59,28 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy .Accepts(AcceptedCharactersInternal.NonWhiteSpace)), factory.Markup(" baz"))); } + + [Fact] + public void Parse_SyntaxTreeSpansAreLinked() + { + // Arrange + var factory = new SpanFactory(); + var parser = new RazorParser(); + + // Act + var results = parser.Parse(TestRazorSourceDocument.Create("foo @bar baz")); + + // Assert + var spans = results.Root.Flatten().ToArray(); + for (var i = 0; i < spans.Length - 1; i++) + { + Assert.Same(spans[i + 1], spans[i].Next); + } + + for (var i = spans.Length - 1; i > 0; i--) + { + Assert.Same(spans[i - 1], spans[i].Previous); + } + } } }