Remove RazorIRBuilder.Document

This commit is contained in:
Ryan Nowak 2017-05-12 18:12:30 -07:00
parent 2ec2b98f83
commit fd3a34b000
7 changed files with 79 additions and 117 deletions

View File

@ -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;

View File

@ -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)

View File

@ -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<TagHelperIRNode>(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<TagHelperIRNode>(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<TagHelperIRNode>(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<TagHelperIRNode>(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<TagHelperIRNode>(n);

View File

@ -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);

View File

@ -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<string> { "readonly",},
Modifiers = new List<string> { "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);

View File

@ -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<DocumentIRNode>(builder.Current);
}
}
}

View File

@ -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);