From a034b2ed049291e76d6260371decca3bc99d9387 Mon Sep 17 00:00:00 2001 From: Pranav K Date: Wed, 8 Mar 2017 17:56:14 -0800 Subject: [PATCH] Collate diagnositcs from Imports --- .../DefaultRazorCSharpLoweringPhase.cs | 7 +- .../RazorCSharpDocument.cs | 1 - .../DefaultRazorCSharpLoweringPhaseTest.cs | 71 ++++++++++++++++++- 3 files changed, 75 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.AspNetCore.Razor.Evolution/DefaultRazorCSharpLoweringPhase.cs b/src/Microsoft.AspNetCore.Razor.Evolution/DefaultRazorCSharpLoweringPhase.cs index 737a963e01..0a79a31c89 100644 --- a/src/Microsoft.AspNetCore.Razor.Evolution/DefaultRazorCSharpLoweringPhase.cs +++ b/src/Microsoft.AspNetCore.Razor.Evolution/DefaultRazorCSharpLoweringPhase.cs @@ -3,7 +3,6 @@ using System; using System.Collections.Generic; -using System.Linq; using Microsoft.AspNetCore.Razor.Evolution.CodeGeneration; using Microsoft.AspNetCore.Razor.Evolution.Intermediate; using Microsoft.AspNetCore.Razor.Evolution.Legacy; @@ -61,6 +60,12 @@ namespace Microsoft.AspNetCore.Razor.Evolution var diagnostics = new List(); diagnostics.AddRange(syntaxTree.Diagnostics); + + var importSyntaxTrees = codeDocument.GetImportSyntaxTrees(); + for (var i = 0; i < importSyntaxTrees?.Count; i++) + { + diagnostics.AddRange(importSyntaxTrees[i].Diagnostics); + } diagnostics.AddRange(renderingContext.Diagnostics); var csharpDocument = new RazorCSharpDocument() diff --git a/src/Microsoft.AspNetCore.Razor.Evolution/RazorCSharpDocument.cs b/src/Microsoft.AspNetCore.Razor.Evolution/RazorCSharpDocument.cs index 4663ec9b09..51be80f5ab 100644 --- a/src/Microsoft.AspNetCore.Razor.Evolution/RazorCSharpDocument.cs +++ b/src/Microsoft.AspNetCore.Razor.Evolution/RazorCSharpDocument.cs @@ -2,7 +2,6 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.Collections.Generic; -using Microsoft.AspNetCore.Razor.Evolution.Legacy; namespace Microsoft.AspNetCore.Razor.Evolution { diff --git a/test/Microsoft.AspNetCore.Razor.Evolution.Test/DefaultRazorCSharpLoweringPhaseTest.cs b/test/Microsoft.AspNetCore.Razor.Evolution.Test/DefaultRazorCSharpLoweringPhaseTest.cs index b9f0dfb13e..4e01fe8cea 100644 --- a/test/Microsoft.AspNetCore.Razor.Evolution.Test/DefaultRazorCSharpLoweringPhaseTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Evolution.Test/DefaultRazorCSharpLoweringPhaseTest.cs @@ -2,11 +2,10 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using Microsoft.AspNetCore.Razor.Evolution.CodeGeneration; using Microsoft.AspNetCore.Razor.Evolution.Intermediate; using Microsoft.AspNetCore.Testing; using Xunit; -using Microsoft.AspNetCore.Razor.Evolution.Legacy; -using Microsoft.AspNetCore.Razor.Evolution.CodeGeneration; namespace Microsoft.AspNetCore.Razor.Evolution { @@ -75,5 +74,73 @@ namespace Microsoft.AspNetCore.Razor.Evolution $"The document of kind 'test' does not have a '{nameof(RuntimeTarget)}'. " + $"The document classifier must set a value for '{nameof(DocumentIRNode.Target)}'."); } + + [Fact] + public void Execute_CollatesSyntaxDiagnosticsFromSourceDocument() + { + // Arrange + var phase = new DefaultRazorCSharpLoweringPhase(); + var engine = RazorEngine.CreateEmpty(b => b.Phases.Add(phase)); + var codeDocument = TestRazorCodeDocument.Create("

b.Phases.Add(phase)); + + var codeDocument = TestRazorCodeDocument.CreateEmpty(); + codeDocument.SetSyntaxTree(RazorSyntaxTree.Parse(codeDocument.Source)); + codeDocument.SetImportSyntaxTrees(new[] + { + RazorSyntaxTree.Parse(TestRazorSourceDocument.Create("@ ")), + RazorSyntaxTree.Parse(TestRazorSourceDocument.Create("

+ { + Assert.Equal(@"A space or line break was encountered after the ""@"" character. Only valid identifiers, keywords, comments, ""("" and ""{"" are valid at the start of a code block and they must occur immediately following ""@"" with no space in between.", + diagnostic.GetMessage()); + }, + diagnostic => + { + Assert.Equal(@"The explicit expression block is missing a closing "")"" character. Make sure you have a matching "")"" character for all the ""("" characters within this block, and that none of the "")"" characters are being interpreted as markup.", + diagnostic.GetMessage()); + }); + } } }