From fd3a34b000783b97aac9eb18cb127824e7ebdd78 Mon Sep 17 00:00:00 2001 From: Ryan Nowak Date: Fri, 12 May 2017 18:12:30 -0700 Subject: [PATCH] Remove RazorIRBuilder.Document --- .../DefaultRazorIRLoweringPhase.cs | 6 +- .../Intermediate/RazorIRBuilder.cs | 5 -- .../InstrumentationPassTest.cs | 84 +++++++++---------- .../NamespaceDirectiveTest.cs | 50 +++++------ .../DefaultDocumentWriterTest.cs | 27 +++--- .../Intermediate/RazorIRBuilderTest.cs | 20 ----- .../RazorCodeDocumentExtensionsTest.cs | 4 +- 7 files changed, 79 insertions(+), 117 deletions(-) delete mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/Intermediate/RazorIRBuilderTest.cs diff --git a/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorIRLoweringPhase.cs b/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorIRLoweringPhase.cs index 4879be391a..fb1ed0457b 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorIRLoweringPhase.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorIRLoweringPhase.cs @@ -19,9 +19,9 @@ namespace Microsoft.AspNetCore.Razor.Language // This might not have been set if there are no tag helpers. var tagHelperContext = codeDocument.GetTagHelperContext(); - - var builder = RazorIRBuilder.Document(); - var document = (DocumentIRNode)builder.Current; + + var document = new DocumentIRNode(); + var builder = RazorIRBuilder.Create(document); document.Options = syntaxTree.Options; diff --git a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/RazorIRBuilder.cs b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/RazorIRBuilder.cs index 40be5cf46d..6be8e90f89 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/RazorIRBuilder.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/RazorIRBuilder.cs @@ -7,11 +7,6 @@ namespace Microsoft.AspNetCore.Razor.Language.Intermediate { public abstract class RazorIRBuilder { - public static RazorIRBuilder Document() - { - return Create(new DocumentIRNode()); - } - public static RazorIRBuilder Create(RazorIRNode root) { if (root == null) diff --git a/test/Microsoft.AspNetCore.Mvc.Razor.Extensions.Test/InstrumentationPassTest.cs b/test/Microsoft.AspNetCore.Mvc.Razor.Extensions.Test/InstrumentationPassTest.cs index b857378b40..f162afaffd 100644 --- a/test/Microsoft.AspNetCore.Mvc.Razor.Extensions.Test/InstrumentationPassTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Razor.Extensions.Test/InstrumentationPassTest.cs @@ -14,7 +14,9 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions public void InstrumentationPass_InstrumentsHtml() { // Arrange - var builder = RazorIRBuilder.Document(); + var document = new DocumentIRNode(); + var builder = RazorIRBuilder.Create(document); + builder.Push(new HtmlContentIRNode() { Source = CreateSource(1), @@ -26,20 +28,18 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions Source = CreateSource(1) }); builder.Pop(); - - var irDocument = (DocumentIRNode)builder.Build(); - + var pass = new InstrumentationPass() { Engine = RazorEngine.CreateEmpty(b => { }), }; // Act - pass.Execute(TestRazorCodeDocument.CreateEmpty(), irDocument); + pass.Execute(TestRazorCodeDocument.CreateEmpty(), document); // Assert Children( - irDocument, + document, n => BeginInstrumentation("1, 1, true", n), n => RazorIRAssert.Html("Hi", n), n => EndInstrumentation(n)); @@ -49,7 +49,8 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions public void InstrumentationPass_SkipsHtml_WithoutLocation() { // Arrange - var builder = RazorIRBuilder.Document(); + var document = new DocumentIRNode(); + var builder = RazorIRBuilder.Create(document); builder.Push(new HtmlContentIRNode()); builder.Add(new RazorIRToken() { @@ -58,19 +59,17 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions }); builder.Pop(); - var irDocument = (DocumentIRNode)builder.Build(); - var pass = new InstrumentationPass() { Engine = RazorEngine.CreateEmpty(b => { }), }; // Act - pass.Execute(TestRazorCodeDocument.CreateEmpty(), irDocument); + pass.Execute(TestRazorCodeDocument.CreateEmpty(), document); // Assert Children( - irDocument, + document, n => RazorIRAssert.Html("Hi", n)); } @@ -78,7 +77,8 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions public void InstrumentationPass_InstrumentsCSharpExpression() { // Arrange - var builder = RazorIRBuilder.Document(); + var document = new DocumentIRNode(); + var builder = RazorIRBuilder.Create(document); builder.Push(new CSharpExpressionIRNode() { Source = CreateSource(2), @@ -89,19 +89,17 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions Kind = RazorIRToken.TokenKind.CSharp, }); - var irDocument = (DocumentIRNode)builder.Build(); - var pass = new InstrumentationPass() { Engine = RazorEngine.CreateEmpty(b => { }), }; // Act - pass.Execute(TestRazorCodeDocument.CreateEmpty(), irDocument); + pass.Execute(TestRazorCodeDocument.CreateEmpty(), document); // Assert Children( - irDocument, + document, n => BeginInstrumentation("2, 2, false", n), n => CSharpExpression("Hi", n), n => EndInstrumentation(n)); @@ -111,7 +109,8 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions public void InstrumentationPass_SkipsCSharpExpression_WithoutLocation() { // Arrange - var builder = RazorIRBuilder.Document(); + var document = new DocumentIRNode(); + var builder = RazorIRBuilder.Create(document); builder.Push(new CSharpExpressionIRNode()); builder.Add(new RazorIRToken() { @@ -119,19 +118,17 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions Kind = RazorIRToken.TokenKind.CSharp, }); - var irDocument = (DocumentIRNode)builder.Build(); - var pass = new InstrumentationPass() { Engine = RazorEngine.CreateEmpty(b => { }), }; // Act - pass.Execute(TestRazorCodeDocument.CreateEmpty(), irDocument); + pass.Execute(TestRazorCodeDocument.CreateEmpty(), document); // Assert Children( - irDocument, + document, n => CSharpExpression("Hi", n)); } @@ -139,7 +136,8 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions public void InstrumentationPass_SkipsCSharpExpression_InsideTagHelperAttribute() { // Arrange - var builder = RazorIRBuilder.Document(); + var document = new DocumentIRNode(); + var builder = RazorIRBuilder.Create(document); builder.Push(new TagHelperIRNode() { Source = CreateSource(3) @@ -158,19 +156,17 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions Kind = RazorIRToken.TokenKind.CSharp, }); - var irDocument = (DocumentIRNode)builder.Build(); - var pass = new InstrumentationPass() { Engine = RazorEngine.CreateEmpty(b => { }), }; // Act - pass.Execute(TestRazorCodeDocument.CreateEmpty(), irDocument); + pass.Execute(TestRazorCodeDocument.CreateEmpty(), document); // Assert Children( - irDocument, + document, n => { Assert.IsType(n); @@ -190,7 +186,8 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions public void InstrumentationPass_SkipsCSharpExpression_InsideTagHelperProperty() { // Arrange - var builder = RazorIRBuilder.Document(); + var document = new DocumentIRNode(); + var builder = RazorIRBuilder.Create(document); builder.Push(new TagHelperIRNode() { Source = CreateSource(3) @@ -209,19 +206,17 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions Kind = RazorIRToken.TokenKind.CSharp, }); - var irDocument = (DocumentIRNode)builder.Build(); - var pass = new InstrumentationPass() { Engine = RazorEngine.CreateEmpty(b => { }), }; // Act - pass.Execute(TestRazorCodeDocument.CreateEmpty(), irDocument); + pass.Execute(TestRazorCodeDocument.CreateEmpty(), document); // Assert Children( - irDocument, + document, n => { Assert.IsType(n); @@ -241,7 +236,8 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions public void InstrumentationPass_InstrumentsExecuteTagHelper_InsideTagHelper() { // Arrange - var builder = RazorIRBuilder.Document(); + var document = new DocumentIRNode(); + var builder = RazorIRBuilder.Create(document); builder.Push(new TagHelperIRNode() { Source = CreateSource(3), @@ -249,19 +245,17 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions builder.Add(new ExecuteTagHelpersIRNode()); - var irDocument = (DocumentIRNode)builder.Build(); - var pass = new InstrumentationPass() { Engine = RazorEngine.CreateEmpty(b => { }), }; // Act - pass.Execute(TestRazorCodeDocument.CreateEmpty(), irDocument); + pass.Execute(TestRazorCodeDocument.CreateEmpty(), document); // Assert Children( - irDocument, + document, n => { Assert.IsType(n); @@ -277,24 +271,23 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions public void InstrumentationPass_SkipsExecuteTagHelper_WithoutLocation() { // Arrange - var builder = RazorIRBuilder.Document(); + var document = new DocumentIRNode(); + var builder = RazorIRBuilder.Create(document); builder.Push(new TagHelperIRNode()); builder.Add(new ExecuteTagHelpersIRNode()); - var irDocument = (DocumentIRNode)builder.Build(); - var pass = new InstrumentationPass() { Engine = RazorEngine.CreateEmpty(b => { }), }; // Act - pass.Execute(TestRazorCodeDocument.CreateEmpty(), irDocument); + pass.Execute(TestRazorCodeDocument.CreateEmpty(), document); // Assert Children( - irDocument, + document, n => { Assert.IsType(n); @@ -308,7 +301,8 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions public void InstrumentationPass_SkipsExecuteTagHelper_MalformedTagHelper() { // Arrange - var builder = RazorIRBuilder.Document(); + var document = new DocumentIRNode(); + var builder = RazorIRBuilder.Create(document); builder.Push(new TagHelperIRNode() { Source = CreateSource(3), @@ -316,19 +310,17 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions builder.Push(new CSharpExpressionIRNode()); builder.Add(new ExecuteTagHelpersIRNode()); // Malformed - var irDocument = (DocumentIRNode)builder.Build(); - var pass = new InstrumentationPass() { Engine = RazorEngine.CreateEmpty(b => { }), }; // Act - pass.Execute(TestRazorCodeDocument.CreateEmpty(), irDocument); + pass.Execute(TestRazorCodeDocument.CreateEmpty(), document); // Assert Children( - irDocument, + document, n => { Assert.IsType(n); diff --git a/test/Microsoft.AspNetCore.Mvc.Razor.Extensions.Test/NamespaceDirectiveTest.cs b/test/Microsoft.AspNetCore.Mvc.Razor.Extensions.Test/NamespaceDirectiveTest.cs index 688517e8cb..69c541b8af 100644 --- a/test/Microsoft.AspNetCore.Mvc.Razor.Extensions.Test/NamespaceDirectiveTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Razor.Extensions.Test/NamespaceDirectiveTest.cs @@ -117,7 +117,8 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions public void Pass_SetsNamespaceAndClassName_ComputedFromImports() { // Arrange - var builder = RazorIRBuilder.Document(); + var document = new DocumentIRNode(); + var builder = RazorIRBuilder.Create(document); builder.Push(new DirectiveIRNode() { @@ -132,9 +133,8 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions var @class = new ClassDeclarationIRNode() { Name = "default" }; builder.Add(@class); - - var irDocument = (DocumentIRNode)builder.Build(); - irDocument.DocumentKind = RazorPageDocumentClassifierPass.RazorPageDocumentKind; + + document.DocumentKind = RazorPageDocumentClassifierPass.RazorPageDocumentKind; var codeDocument = RazorCodeDocument.Create(RazorSourceDocument.Create("ignored", "/Account/Manage/AddUser.cshtml")); @@ -142,7 +142,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions pass.Engine = RazorEngine.CreateEmpty(b => { }); // Act - pass.Execute(codeDocument, irDocument); + pass.Execute(codeDocument, document); // Assert Assert.Equal("WebApplication.Account.Manage", @namespace.Content); @@ -154,7 +154,8 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions public void Pass_SetsNamespaceAndClassName_ComputedFromSource() { // Arrange - var builder = RazorIRBuilder.Document(); + var document = new DocumentIRNode(); + var builder = RazorIRBuilder.Create(document); // This will be ignored. builder.Push(new DirectiveIRNode() @@ -179,9 +180,8 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions var @class = new ClassDeclarationIRNode() { Name = "default" }; builder.Add(@class); - - var irDocument = (DocumentIRNode)builder.Build(); - irDocument.DocumentKind = RazorPageDocumentClassifierPass.RazorPageDocumentKind; + + document.DocumentKind = RazorPageDocumentClassifierPass.RazorPageDocumentKind; var codeDocument = RazorCodeDocument.Create(RazorSourceDocument.Create("ignored", "/Account/Manage/AddUser.cshtml")); @@ -189,7 +189,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions pass.Engine = RazorEngine.CreateEmpty(b => { }); // Act - pass.Execute(codeDocument, irDocument); + pass.Execute(codeDocument, document); // Assert Assert.Equal("WebApplication.Account.Manage", @namespace.Content); @@ -201,7 +201,8 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions public void Pass_SetsNamespaceAndClassName_ComputedFromSource_ForView() { // Arrange - var builder = RazorIRBuilder.Document(); + var document = new DocumentIRNode(); + var builder = RazorIRBuilder.Create(document); // This will be ignored. builder.Push(new DirectiveIRNode() @@ -226,9 +227,8 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions var @class = new ClassDeclarationIRNode() { Name = "default" }; builder.Add(@class); - - var irDocument = (DocumentIRNode)builder.Build(); - irDocument.DocumentKind = MvcViewDocumentClassifierPass.MvcViewDocumentKind; + + document.DocumentKind = MvcViewDocumentClassifierPass.MvcViewDocumentKind; var codeDocument = RazorCodeDocument.Create(RazorSourceDocument.Create("ignored", "/Account/Manage/AddUser.cshtml")); @@ -236,7 +236,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions pass.Engine = RazorEngine.CreateEmpty(b => { }); // Act - pass.Execute(codeDocument, irDocument); + pass.Execute(codeDocument, document); // Assert Assert.Equal("WebApplication.Account.Manage", @namespace.Content); @@ -249,7 +249,8 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions public void Pass_SetsNamespaceButNotClassName_VerbatimFromImports() { // Arrange - var builder = RazorIRBuilder.Document(); + var document = new DocumentIRNode(); + var builder = RazorIRBuilder.Create(document); builder.Push(new DirectiveIRNode() { @@ -264,9 +265,8 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions var @class = new ClassDeclarationIRNode() { Name = "default" }; builder.Add(@class); - - var irDocument = (DocumentIRNode)builder.Build(); - irDocument.DocumentKind = RazorPageDocumentClassifierPass.RazorPageDocumentKind; + + document.DocumentKind = RazorPageDocumentClassifierPass.RazorPageDocumentKind; var codeDocument = RazorCodeDocument.Create(RazorSourceDocument.Create("ignored", "/Account/Manage/AddUser.cshtml")); @@ -274,7 +274,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions pass.Engine = RazorEngine.CreateEmpty(b => { }); // Act - pass.Execute(codeDocument, irDocument); + pass.Execute(codeDocument, document); // Assert Assert.Equal("WebApplication.Account", @namespace.Content); @@ -285,7 +285,8 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions public void Pass_DoesNothing_ForUnknownDocumentKind() { // Arrange - var builder = RazorIRBuilder.Document(); + var document = new DocumentIRNode(); + var builder = RazorIRBuilder.Create(document); builder.Push(new DirectiveIRNode() { @@ -300,9 +301,8 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions var @class = new ClassDeclarationIRNode() { Name = "default" }; builder.Add(@class); - - var irDocument = (DocumentIRNode)builder.Build(); - irDocument.DocumentKind = null; + + document.DocumentKind = null; var codeDocument = RazorCodeDocument.Create(RazorSourceDocument.Create("ignored", "/Account/Manage/AddUser.cshtml")); @@ -310,7 +310,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions pass.Engine = RazorEngine.CreateEmpty(b => { }); // Act - pass.Execute(codeDocument, irDocument); + pass.Execute(codeDocument, document); // Assert Assert.Equal("default", @namespace.Content); diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/DefaultDocumentWriterTest.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/DefaultDocumentWriterTest.cs index dc99f89074..376832dd6f 100644 --- a/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/DefaultDocumentWriterTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/DefaultDocumentWriterTest.cs @@ -25,14 +25,13 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration var writer = new DefaultDocumentWriter(target, context); - var builder = RazorIRBuilder.Document(); + var document = new DocumentIRNode(); + var builder = RazorIRBuilder.Create(document); builder.Add(new NamespaceDeclarationIRNode() { Content = "TestNamespace", }); - var document = (DocumentIRNode)builder.Build(); - // Act writer.WriteDocument(document); @@ -63,7 +62,8 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration }; var writer = new DefaultDocumentWriter(target, context); - var builder = RazorIRBuilder.Document(); + var document = new DocumentIRNode(); + var builder = RazorIRBuilder.Create(document); builder.Add(new ClassDeclarationIRNode() { AccessModifier = "internal", @@ -72,8 +72,6 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration Name = "TestClass", }); - var document = (DocumentIRNode)builder.Build(); - // Act writer.WriteDocument(document); @@ -103,7 +101,8 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration }; var writer = new DefaultDocumentWriter(target, context); - var builder = RazorIRBuilder.Document(); + var document = new DocumentIRNode(); + var builder = RazorIRBuilder.Create(document); builder.Add(new MethodDeclarationIRNode() { AccessModifier = "internal", @@ -112,8 +111,6 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration ReturnType = "string", }); - var document = (DocumentIRNode)builder.Build(); - // Act writer.WriteDocument(document); @@ -145,17 +142,16 @@ internal virtual async string TestMethod() }; var writer = new DefaultDocumentWriter(target, context); - var builder = RazorIRBuilder.Document(); + var document = new DocumentIRNode(); + var builder = RazorIRBuilder.Create(document); builder.Add(new FieldDeclarationIRNode() { AccessModifier = "internal", - Modifiers = new List { "readonly",}, + Modifiers = new List { "readonly", }, Name = "_foo", Type = "string", }); - var document = (DocumentIRNode)builder.Build(); - // Act writer.WriteDocument(document); @@ -183,7 +179,8 @@ internal virtual async string TestMethod() }; var writer = new DefaultDocumentWriter(target, context); - var builder = RazorIRBuilder.Document(); + var document = new DocumentIRNode(); + var builder = RazorIRBuilder.Create(document); builder.Add(new PropertyDeclarationIRNode() { AccessModifier = "internal", @@ -192,8 +189,6 @@ internal virtual async string TestMethod() Type = "string", }); - var document = (DocumentIRNode)builder.Build(); - // Act writer.WriteDocument(document); diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/Intermediate/RazorIRBuilderTest.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/Intermediate/RazorIRBuilderTest.cs deleted file mode 100644 index c71f29bf4d..0000000000 --- a/test/Microsoft.AspNetCore.Razor.Language.Test/Intermediate/RazorIRBuilderTest.cs +++ /dev/null @@ -1,20 +0,0 @@ -// 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. - -using Xunit; - -namespace Microsoft.AspNetCore.Razor.Language.Intermediate -{ - public class RazorIRBuilderTest - { - [Fact] - public void Document_CreatesDocumentNode() - { - // Arrange & Act - var builder = RazorIRBuilder.Document(); - - // Assert - Assert.IsType(builder.Current); - } - } -} diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/RazorCodeDocumentExtensionsTest.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/RazorCodeDocumentExtensionsTest.cs index ce2576d37d..5d7d697d38 100644 --- a/test/Microsoft.AspNetCore.Razor.Language.Test/RazorCodeDocumentExtensionsTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/RazorCodeDocumentExtensionsTest.cs @@ -62,7 +62,7 @@ namespace Microsoft.AspNetCore.Razor.Language // Arrange var codeDocument = TestRazorCodeDocument.CreateEmpty(); - var expected = RazorIRBuilder.Document().Build(); + var expected = new DocumentIRNode(); codeDocument.Items[typeof(DocumentIRNode)] = expected; // Act @@ -78,7 +78,7 @@ namespace Microsoft.AspNetCore.Razor.Language // Arrange var codeDocument = TestRazorCodeDocument.CreateEmpty(); - var expected = RazorIRBuilder.Document().Build(); + var expected = new DocumentIRNode(); // Act codeDocument.SetIRDocument((DocumentIRNode)expected);