Rewrite of code rendering context
This commit is contained in:
parent
35889cba81
commit
8a9bf9c71a
|
|
@ -2,6 +2,7 @@
|
|||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using Microsoft.AspNetCore.Razor.Language.Intermediate;
|
||||
|
||||
namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
||||
{
|
||||
|
|
@ -10,91 +11,49 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
|||
internal static readonly object NewLineString = "NewLineString";
|
||||
internal static readonly object SuppressUniqueIds = "SuppressUniqueIds";
|
||||
|
||||
public static CodeRenderingContext Create(RazorCodeDocument codeDocument, RazorCodeGenerationOptions options)
|
||||
{
|
||||
if (codeDocument == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(codeDocument));
|
||||
}
|
||||
|
||||
if (options == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(options));
|
||||
}
|
||||
|
||||
IntermediateNodeWriter nodeWriter;
|
||||
TagHelperWriter tagHelperWriter;
|
||||
|
||||
if (options.DesignTime)
|
||||
{
|
||||
nodeWriter = new DesignTimeNodeWriter();
|
||||
tagHelperWriter = new DesignTimeTagHelperWriter();
|
||||
}
|
||||
else
|
||||
{
|
||||
nodeWriter = new RuntimeNodeWriter();
|
||||
tagHelperWriter = new RuntimeTagHelperWriter();
|
||||
}
|
||||
|
||||
var documentKind = codeDocument.GetDocumentIntermediateNode()?.DocumentKind;
|
||||
var codeWriter = new CodeWriter();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, nodeWriter, documentKind, codeDocument.Source, options)
|
||||
{
|
||||
TagHelperWriter = tagHelperWriter
|
||||
};
|
||||
|
||||
var newLineString = codeDocument.Items[NewLineString];
|
||||
if (newLineString != null)
|
||||
{
|
||||
// Set new line character to a specific string regardless of platform, for testing purposes.
|
||||
codeWriter.NewLine = (string)newLineString;
|
||||
}
|
||||
|
||||
context.Items[SuppressUniqueIds] = codeDocument.Items[SuppressUniqueIds];
|
||||
|
||||
return context;
|
||||
}
|
||||
|
||||
public abstract CodeWriter CodeWriter { get; }
|
||||
|
||||
public abstract IntermediateNodeWriter NodeWriter { get; protected set; }
|
||||
|
||||
public abstract RazorSourceDocument SourceDocument { get; }
|
||||
|
||||
public abstract RazorCodeGenerationOptions Options { get; }
|
||||
|
||||
public abstract RazorDiagnosticCollection Diagnostics { get; }
|
||||
|
||||
public abstract ItemCollection Items { get; }
|
||||
|
||||
public abstract string DocumentKind { get; }
|
||||
|
||||
public abstract IntermediateNodeWriterScope Push(IntermediateNodeWriter writer);
|
||||
public abstract ItemCollection Items { get; }
|
||||
|
||||
public struct IntermediateNodeWriterScope : IDisposable
|
||||
public abstract IntermediateNodeWriter NodeWriter { get; }
|
||||
|
||||
public abstract RazorCodeGenerationOptions Options { get; }
|
||||
|
||||
public abstract RazorSourceDocument SourceDocument { get; }
|
||||
|
||||
public abstract Scope CreateScope();
|
||||
|
||||
public abstract Scope CreateScope(IntermediateNodeWriter writer);
|
||||
|
||||
public abstract void EndScope();
|
||||
|
||||
public abstract void RenderNode(IntermediateNode node);
|
||||
|
||||
public abstract void RenderChildren(IntermediateNode node);
|
||||
|
||||
public abstract void AddLineMappingFor(IntermediateNode node);
|
||||
|
||||
public struct Scope : IDisposable
|
||||
{
|
||||
private readonly CodeRenderingContext _context;
|
||||
private readonly IntermediateNodeWriter _writer;
|
||||
|
||||
public IntermediateNodeWriterScope(CodeRenderingContext context, IntermediateNodeWriter writer)
|
||||
public Scope(CodeRenderingContext context)
|
||||
{
|
||||
if (context == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(context));
|
||||
}
|
||||
|
||||
if (writer == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(writer));
|
||||
}
|
||||
|
||||
_context = context;
|
||||
_writer = writer;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_context.NodeWriter = _writer;
|
||||
_context.EndScope();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -102,22 +61,9 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
|||
// All bits below here are temporary
|
||||
|
||||
#region Temporary TagHelper bits
|
||||
internal TagHelperWriter TagHelperWriter { get; set; }
|
||||
|
||||
internal TagHelperRenderingContext TagHelperRenderingContext { get; set; }
|
||||
|
||||
internal TagHelperWriterScope Push(TagHelperWriter writer)
|
||||
{
|
||||
if (writer == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(writer));
|
||||
}
|
||||
|
||||
var scope = new TagHelperWriterScope(this, TagHelperWriter);
|
||||
TagHelperWriter = writer;
|
||||
return scope;
|
||||
}
|
||||
|
||||
internal TagHelperRenderingContextScope Push(TagHelperRenderingContext context)
|
||||
{
|
||||
if (context == null)
|
||||
|
|
@ -130,33 +76,6 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
|||
return scope;
|
||||
}
|
||||
|
||||
internal struct TagHelperWriterScope : IDisposable
|
||||
{
|
||||
private readonly CodeRenderingContext _context;
|
||||
private readonly TagHelperWriter _writer;
|
||||
|
||||
public TagHelperWriterScope(CodeRenderingContext context, TagHelperWriter writer)
|
||||
{
|
||||
if (context == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(context));
|
||||
}
|
||||
|
||||
if (writer == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(writer));
|
||||
}
|
||||
|
||||
_context = context;
|
||||
_writer = writer;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_context.TagHelperWriter = _writer;
|
||||
}
|
||||
}
|
||||
|
||||
internal struct TagHelperRenderingContextScope : IDisposable
|
||||
{
|
||||
private readonly CodeRenderingContext _context;
|
||||
|
|
|
|||
|
|
@ -1,126 +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 System;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.AspNetCore.Razor.Language.Intermediate;
|
||||
|
||||
namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
||||
{
|
||||
public static class CodeRenderingContextExtensions
|
||||
{
|
||||
private static readonly object RenderNodeKey = new object();
|
||||
private static readonly object RenderChildrenKey = new object();
|
||||
private static readonly object LineMappingsKey = new object();
|
||||
|
||||
public static void SetRenderNode(this CodeRenderingContext context, Action<IntermediateNode> renderNode)
|
||||
{
|
||||
if (context == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(context));
|
||||
}
|
||||
|
||||
context.Items[RenderNodeKey] = renderNode;
|
||||
}
|
||||
|
||||
public static void RenderNode(this CodeRenderingContext context, IntermediateNode node)
|
||||
{
|
||||
if (context == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(context));
|
||||
}
|
||||
|
||||
if (node == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(node));
|
||||
}
|
||||
|
||||
var renderNode = (Action<IntermediateNode>)context.Items[RenderNodeKey];
|
||||
|
||||
if (renderNode == null)
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
Resources.FormatRenderingContextRequiresDelegate(nameof(CodeRenderingContext), nameof(RenderNode)));
|
||||
}
|
||||
|
||||
renderNode(node);
|
||||
}
|
||||
|
||||
public static void SetRenderChildren(this CodeRenderingContext context, Action<IntermediateNode> renderChildren)
|
||||
{
|
||||
if (context == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(context));
|
||||
}
|
||||
|
||||
context.Items[RenderChildrenKey] = renderChildren;
|
||||
}
|
||||
|
||||
public static void RenderChildren(this CodeRenderingContext context, IntermediateNode node)
|
||||
{
|
||||
if (context == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(context));
|
||||
}
|
||||
|
||||
if (node == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(node));
|
||||
}
|
||||
|
||||
var renderChildren = (Action<IntermediateNode>)context.Items[RenderChildrenKey];
|
||||
if (renderChildren == null)
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
Resources.FormatRenderingContextRequiresDelegate(nameof(CodeRenderingContext), nameof(RenderChildren)));
|
||||
}
|
||||
|
||||
renderChildren(node);
|
||||
}
|
||||
|
||||
public static void AddLineMappingFor(this CodeRenderingContext context, IntermediateNode node)
|
||||
{
|
||||
if (context == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(context));
|
||||
}
|
||||
|
||||
if (node == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(node));
|
||||
}
|
||||
|
||||
var lineMappings = (List<LineMapping>)context.Items[LineMappingsKey];
|
||||
if (lineMappings == null)
|
||||
{
|
||||
lineMappings = new List<LineMapping>();
|
||||
context.Items[LineMappingsKey] = lineMappings;
|
||||
}
|
||||
|
||||
if (node.Source == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (context.SourceDocument.FilePath != null &&
|
||||
!string.Equals(context.SourceDocument.FilePath, node.Source.Value.FilePath, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
// We don't want to generate line mappings for imports.
|
||||
return;
|
||||
}
|
||||
|
||||
var source = node.Source.Value;
|
||||
var generatedLocation = new SourceSpan(context.CodeWriter.Location, source.Length);
|
||||
var lineMapping = new LineMapping(source, generatedLocation);
|
||||
|
||||
lineMappings.Add(lineMapping);
|
||||
}
|
||||
|
||||
public static IReadOnlyList<LineMapping> GetLineMappings(this CodeRenderingContext context)
|
||||
{
|
||||
var lineMappings = (IReadOnlyList<LineMapping>)context.Items[LineMappingsKey] ?? Array.Empty<LineMapping>();
|
||||
|
||||
return lineMappings;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -86,7 +86,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
|||
|
||||
}
|
||||
|
||||
public abstract DocumentWriter CreateWriter(CodeRenderingContext context);
|
||||
public abstract IntermediateNodeWriter CreateNodeWriter();
|
||||
|
||||
public abstract TExtension GetExtension<TExtension>() where TExtension : class, ICodeTargetExtension;
|
||||
|
||||
|
|
|
|||
|
|
@ -3,61 +3,181 @@
|
|||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.AspNetCore.Razor.Language.Intermediate;
|
||||
|
||||
namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
||||
{
|
||||
internal class DefaultCodeRenderingContext : CodeRenderingContext
|
||||
{
|
||||
// Internal for unit testing
|
||||
internal DefaultCodeRenderingContext(
|
||||
CodeWriter codeWriter,
|
||||
IntermediateNodeWriter nodeWriter,
|
||||
RazorSourceDocument sourceDocument,
|
||||
RazorCodeGenerationOptions options)
|
||||
: this (codeWriter, nodeWriter, null, sourceDocument, options)
|
||||
{
|
||||
}
|
||||
private readonly RazorCodeDocument _codeDocument;
|
||||
private readonly DocumentIntermediateNode _documentNode;
|
||||
|
||||
private readonly List<ScopeInternal> _scopes;
|
||||
|
||||
public DefaultCodeRenderingContext(
|
||||
CodeWriter codeWriter,
|
||||
IntermediateNodeWriter nodeWriter,
|
||||
string documentKind,
|
||||
RazorSourceDocument sourceDocument,
|
||||
RazorCodeDocument codeDocument,
|
||||
DocumentIntermediateNode documentNode,
|
||||
RazorCodeGenerationOptions options)
|
||||
{
|
||||
if (codeWriter == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(codeWriter));
|
||||
}
|
||||
|
||||
if (nodeWriter == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(nodeWriter));
|
||||
}
|
||||
|
||||
if (codeDocument == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(codeDocument));
|
||||
}
|
||||
|
||||
if (documentNode == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(documentNode));
|
||||
}
|
||||
|
||||
if (options == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(options));
|
||||
}
|
||||
|
||||
CodeWriter = codeWriter;
|
||||
NodeWriter = nodeWriter;
|
||||
DocumentKind = documentKind;
|
||||
SourceDocument = sourceDocument;
|
||||
_codeDocument = codeDocument;
|
||||
_documentNode = documentNode;
|
||||
Options = options;
|
||||
|
||||
Diagnostics = new DefaultRazorDiagnosticCollection();
|
||||
Items = new DefaultItemCollection();
|
||||
LineMappings = new List<LineMapping>();
|
||||
|
||||
TagHelperRenderingContext = new TagHelperRenderingContext();
|
||||
|
||||
var diagnostics = _documentNode.GetAllDiagnostics();
|
||||
for (var i = 0; i < diagnostics.Count; i++)
|
||||
{
|
||||
Diagnostics.Add(diagnostics[i]);
|
||||
}
|
||||
|
||||
var newLineString = codeDocument.Items[NewLineString];
|
||||
if (newLineString != null)
|
||||
{
|
||||
// Set new line character to a specific string regardless of platform, for testing purposes.
|
||||
codeWriter.NewLine = (string)newLineString;
|
||||
}
|
||||
|
||||
Items[NewLineString] = codeDocument.Items[NewLineString];
|
||||
Items[SuppressUniqueIds] = codeDocument.Items[SuppressUniqueIds];
|
||||
|
||||
_scopes = new List<ScopeInternal>();
|
||||
_scopes.Add(new ScopeInternal(nodeWriter));
|
||||
}
|
||||
|
||||
// This will be initialized by the document writer when the context is 'live'.
|
||||
public IntermediateNodeVisitor Visitor { get; set; }
|
||||
|
||||
public override CodeWriter CodeWriter { get; }
|
||||
|
||||
public override IntermediateNodeWriter NodeWriter { get; protected set; }
|
||||
|
||||
public override RazorSourceDocument SourceDocument { get; }
|
||||
|
||||
public override RazorCodeGenerationOptions Options { get; }
|
||||
|
||||
public override RazorDiagnosticCollection Diagnostics { get; }
|
||||
|
||||
public override ItemCollection Items { get; }
|
||||
|
||||
public override string DocumentKind { get; }
|
||||
|
||||
public override IntermediateNodeWriterScope Push(IntermediateNodeWriter writer)
|
||||
public override ItemCollection Items { get; }
|
||||
|
||||
public List<LineMapping> LineMappings { get; }
|
||||
|
||||
public override IntermediateNodeWriter NodeWriter => Current.Writer;
|
||||
|
||||
public override RazorCodeGenerationOptions Options { get; }
|
||||
|
||||
public override RazorSourceDocument SourceDocument => _codeDocument.Source;
|
||||
|
||||
private ScopeInternal Current => _scopes[_scopes.Count - 1];
|
||||
|
||||
public override void AddLineMappingFor(IntermediateNode node)
|
||||
{
|
||||
if (node == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(node));
|
||||
}
|
||||
|
||||
if (node.Source == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (SourceDocument.FilePath != null &&
|
||||
!string.Equals(SourceDocument.FilePath, node.Source.Value.FilePath, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
// We don't want to generate line mappings for imports.
|
||||
return;
|
||||
}
|
||||
|
||||
var source = node.Source.Value;
|
||||
var generatedLocation = new SourceSpan(CodeWriter.Location, source.Length);
|
||||
var lineMapping = new LineMapping(source, generatedLocation);
|
||||
|
||||
LineMappings.Add(lineMapping);
|
||||
}
|
||||
|
||||
public override Scope CreateScope()
|
||||
{
|
||||
CreateScope(Current.Writer);
|
||||
return new Scope(this);
|
||||
}
|
||||
|
||||
public override Scope CreateScope(IntermediateNodeWriter writer)
|
||||
{
|
||||
if (writer == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(writer));
|
||||
}
|
||||
|
||||
var scope = new IntermediateNodeWriterScope(this, NodeWriter);
|
||||
NodeWriter = writer;
|
||||
return scope;
|
||||
_scopes.Add(new ScopeInternal(writer));
|
||||
return new Scope(this);
|
||||
}
|
||||
|
||||
public override void EndScope()
|
||||
{
|
||||
_scopes.RemoveAt(_scopes.Count - 1);
|
||||
}
|
||||
|
||||
public override void RenderChildren(IntermediateNode node)
|
||||
{
|
||||
if (node == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(node));
|
||||
}
|
||||
|
||||
for (var i = 0; i < node.Children.Count; i++)
|
||||
{
|
||||
Visitor.Visit(node.Children[i]);
|
||||
}
|
||||
}
|
||||
|
||||
public override void RenderNode(IntermediateNode node)
|
||||
{
|
||||
if (node == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(node));
|
||||
}
|
||||
|
||||
Visitor.Visit(node);
|
||||
}
|
||||
|
||||
private struct ScopeInternal
|
||||
{
|
||||
public ScopeInternal(IntermediateNodeWriter writer)
|
||||
{
|
||||
Writer = writer;
|
||||
}
|
||||
|
||||
public IntermediateNodeWriter Writer { get; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,9 +18,9 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
|||
|
||||
public ICodeTargetExtension[] Extensions { get; }
|
||||
|
||||
public override DocumentWriter CreateWriter(CodeRenderingContext context)
|
||||
public override IntermediateNodeWriter CreateNodeWriter()
|
||||
{
|
||||
return new DefaultDocumentWriter(this, context);
|
||||
return _options.DesignTime ? (IntermediateNodeWriter)new DesignTimeNodeWriter() : new RuntimeNodeWriter();
|
||||
}
|
||||
|
||||
public override TExtension GetExtension<TExtension>()
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Microsoft.AspNetCore.Razor.Language.Intermediate;
|
||||
|
||||
|
|
@ -9,63 +10,57 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
|||
{
|
||||
internal class DefaultDocumentWriter : DocumentWriter
|
||||
{
|
||||
private readonly CodeRenderingContext _context;
|
||||
private readonly CodeTarget _target;
|
||||
private readonly CodeTarget _codeTarget;
|
||||
private readonly RazorCodeGenerationOptions _options;
|
||||
|
||||
public DefaultDocumentWriter(CodeTarget target, CodeRenderingContext context)
|
||||
public DefaultDocumentWriter(CodeTarget codeTarget, RazorCodeGenerationOptions options)
|
||||
{
|
||||
if (target == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(target));
|
||||
}
|
||||
|
||||
if (context == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(context));
|
||||
}
|
||||
|
||||
_target = target;
|
||||
_context = context;
|
||||
_codeTarget = codeTarget;
|
||||
_options = options;
|
||||
}
|
||||
|
||||
public override void WriteDocument(DocumentIntermediateNode node)
|
||||
public override RazorCSharpDocument WriteDocument(RazorCodeDocument codeDocument, DocumentIntermediateNode documentNode)
|
||||
{
|
||||
if (node == null)
|
||||
if (codeDocument == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(node));
|
||||
throw new ArgumentNullException(nameof(codeDocument));
|
||||
}
|
||||
|
||||
var visitor = new Visitor(_target, _context);
|
||||
_context.SetRenderNode(visitor.Visit);
|
||||
_context.SetRenderChildren(visitor.RenderChildren);
|
||||
if (documentNode == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(documentNode));
|
||||
}
|
||||
|
||||
visitor.VisitDocument(node);
|
||||
var context = new DefaultCodeRenderingContext(
|
||||
new CodeWriter(),
|
||||
_codeTarget.CreateNodeWriter(),
|
||||
codeDocument,
|
||||
documentNode,
|
||||
_options);
|
||||
context.Visitor = new Visitor(_codeTarget, context);
|
||||
|
||||
_context.SetRenderChildren(null);
|
||||
_context.SetRenderNode(null);
|
||||
context.Visitor.VisitDocument(documentNode);
|
||||
|
||||
var cSharp = context.CodeWriter.GenerateCode();
|
||||
return new DefaultRazorCSharpDocument(
|
||||
cSharp,
|
||||
_options,
|
||||
context.Diagnostics.ToArray(),
|
||||
context.LineMappings.ToArray());
|
||||
}
|
||||
|
||||
private class Visitor : IntermediateNodeVisitor
|
||||
{
|
||||
private readonly CodeRenderingContext _context;
|
||||
private readonly DefaultCodeRenderingContext _context;
|
||||
private readonly CodeTarget _target;
|
||||
|
||||
public Visitor(CodeTarget target, CodeRenderingContext context)
|
||||
public Visitor(CodeTarget target, DefaultCodeRenderingContext context)
|
||||
{
|
||||
_target = target;
|
||||
_context = context;
|
||||
}
|
||||
|
||||
private CodeRenderingContext Context => _context;
|
||||
|
||||
public void RenderChildren(IntermediateNode node)
|
||||
{
|
||||
for (var i = 0; i < node.Children.Count; i++)
|
||||
{
|
||||
var child = node.Children[i];
|
||||
Visit(child);
|
||||
}
|
||||
}
|
||||
private DefaultCodeRenderingContext Context => _context;
|
||||
|
||||
public override void VisitDocument(DocumentIntermediateNode node)
|
||||
{
|
||||
|
|
@ -102,7 +97,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
|||
.WriteLine("// <auto-generated/>")
|
||||
.WriteLine("#pragma warning disable 1591");
|
||||
|
||||
RenderChildren(node);
|
||||
VisitDefault(node);
|
||||
|
||||
Context.CodeWriter.WriteLine("#pragma warning restore 1591");
|
||||
}
|
||||
|
|
@ -117,7 +112,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
|||
using (Context.CodeWriter.BuildNamespace(node.Content))
|
||||
{
|
||||
Context.CodeWriter.WriteLine("#line hidden");
|
||||
RenderChildren(node);
|
||||
VisitDefault(node);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -125,7 +120,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
|||
{
|
||||
using (Context.CodeWriter.BuildClassDeclaration(node.Modifiers, node.Name, node.BaseType, node.Interfaces))
|
||||
{
|
||||
RenderChildren(node);
|
||||
VisitDefault(node);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -147,7 +142,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
|||
|
||||
using (Context.CodeWriter.BuildScope())
|
||||
{
|
||||
RenderChildren(node);
|
||||
VisitDefault(node);
|
||||
}
|
||||
|
||||
Context.CodeWriter.WriteLine("#pragma warning restore 1998");
|
||||
|
|
@ -209,7 +204,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
|||
|
||||
using (Context.Push(tagHelperRenderingContext))
|
||||
{
|
||||
RenderChildren(node);
|
||||
VisitDefault(node);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,16 +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 System;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Microsoft.AspNetCore.Razor.Language.Extensions;
|
||||
using Microsoft.AspNetCore.Razor.Language.Intermediate;
|
||||
using Microsoft.AspNetCore.Razor.Language.Legacy;
|
||||
|
||||
namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
||||
{
|
||||
internal class DesignTimeTagHelperWriter : TagHelperWriter
|
||||
{
|
||||
}
|
||||
}
|
||||
|
|
@ -1,12 +1,28 @@
|
|||
// 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 System;
|
||||
using Microsoft.AspNetCore.Razor.Language.Intermediate;
|
||||
|
||||
namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
||||
{
|
||||
public abstract class DocumentWriter
|
||||
{
|
||||
public abstract void WriteDocument(DocumentIntermediateNode node);
|
||||
public DocumentWriter Create(CodeTarget codeTarget, RazorCodeGenerationOptions options)
|
||||
{
|
||||
if (codeTarget == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(codeTarget));
|
||||
}
|
||||
|
||||
if (options == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(options));
|
||||
}
|
||||
|
||||
return new DefaultDocumentWriter(codeTarget, options);
|
||||
}
|
||||
|
||||
public abstract RazorCSharpDocument WriteDocument(RazorCodeDocument codeDocument, DocumentIntermediateNode documentNode);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,16 +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 System;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using Microsoft.AspNetCore.Razor.Language.Extensions;
|
||||
using Microsoft.AspNetCore.Razor.Language.Intermediate;
|
||||
using Microsoft.AspNetCore.Razor.Language.Legacy;
|
||||
|
||||
namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
||||
{
|
||||
internal class RuntimeTagHelperWriter : TagHelperWriter
|
||||
{
|
||||
}
|
||||
}
|
||||
|
|
@ -1,11 +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 Microsoft.AspNetCore.Razor.Language.Intermediate;
|
||||
|
||||
namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
||||
{
|
||||
internal abstract class TagHelperWriter
|
||||
{
|
||||
}
|
||||
}
|
||||
|
|
@ -12,34 +12,22 @@ namespace Microsoft.AspNetCore.Razor.Language
|
|||
{
|
||||
protected override void ExecuteCore(RazorCodeDocument codeDocument)
|
||||
{
|
||||
var irDocument = codeDocument.GetDocumentIntermediateNode();
|
||||
ThrowForMissingDocumentDependency(irDocument);
|
||||
var documentNode = codeDocument.GetDocumentIntermediateNode();
|
||||
ThrowForMissingDocumentDependency(documentNode);
|
||||
|
||||
var target = irDocument.Target;
|
||||
var target = documentNode.Target;
|
||||
if (target == null)
|
||||
{
|
||||
var message = Resources.FormatDocumentMissingTarget(
|
||||
irDocument.DocumentKind,
|
||||
documentNode.DocumentKind,
|
||||
nameof(CodeTarget),
|
||||
nameof(DocumentIntermediateNode.Target));
|
||||
throw new InvalidOperationException(message);
|
||||
}
|
||||
|
||||
var context = CodeRenderingContext.Create(codeDocument, irDocument.Options);
|
||||
var documentWriter = target.CreateWriter(context);
|
||||
documentWriter.WriteDocument(irDocument);
|
||||
|
||||
var diagnostics = new List<RazorDiagnostic>();
|
||||
diagnostics.AddRange(irDocument.GetAllDiagnostics());
|
||||
diagnostics.AddRange(context.Diagnostics);
|
||||
|
||||
var lineMappings = context.GetLineMappings();
|
||||
var csharpDocument = RazorCSharpDocument.Create(
|
||||
context.CodeWriter.GenerateCode(),
|
||||
irDocument.Options,
|
||||
diagnostics,
|
||||
lineMappings);
|
||||
codeDocument.SetCSharpDocument(csharpDocument);
|
||||
var writer = new DefaultDocumentWriter(documentNode.Target, documentNode.Options);
|
||||
var cSharpDocument = writer.WriteDocument(codeDocument, documentNode);
|
||||
codeDocument.SetCSharpDocument(cSharpDocument);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -107,8 +107,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Extensions
|
|||
.WriteParameterSeparator();
|
||||
|
||||
// We remove and redirect writers so TagHelper authors can retrieve content.
|
||||
using (context.Push(new RuntimeNodeWriter()))
|
||||
using (context.Push(new RuntimeTagHelperWriter()))
|
||||
using (context.CreateScope(new RuntimeNodeWriter()))
|
||||
{
|
||||
using (context.CodeWriter.BuildAsyncLambda())
|
||||
{
|
||||
|
|
@ -215,7 +214,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Extensions
|
|||
.Write(attributeValueStyleParameter)
|
||||
.WriteEndMethodInvocation();
|
||||
|
||||
using (context.Push(new TagHelperHtmlAttributeRuntimeNodeWriter()))
|
||||
using (context.CreateScope(new TagHelperHtmlAttributeRuntimeNodeWriter()))
|
||||
{
|
||||
context.RenderChildren(node);
|
||||
}
|
||||
|
|
@ -237,8 +236,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Extensions
|
|||
// We're building a writing scope around the provided chunks which captures everything written from the
|
||||
// page. Therefore, we do not want to write to any other buffer since we're using the pages buffer to
|
||||
// ensure we capture all content that's written, directly or indirectly.
|
||||
using (context.Push(new RuntimeNodeWriter()))
|
||||
using (context.Push(new RuntimeTagHelperWriter()))
|
||||
using (context.CreateScope(new RuntimeNodeWriter()))
|
||||
{
|
||||
context.RenderChildren(node);
|
||||
}
|
||||
|
|
@ -335,7 +333,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Extensions
|
|||
{
|
||||
context.CodeWriter.WriteMethodInvocation(BeginWriteTagHelperAttributeMethodName);
|
||||
|
||||
using (context.Push(new LiteralRuntimeNodeWriter()))
|
||||
using (context.CreateScope(new LiteralRuntimeNodeWriter()))
|
||||
{
|
||||
context.RenderChildren(node);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
using System;
|
||||
using Microsoft.AspNetCore.Razor.Language;
|
||||
using Microsoft.AspNetCore.Razor.Language.CodeGeneration;
|
||||
using Microsoft.AspNetCore.Razor.Language.Intermediate;
|
||||
using Microsoft.AspNetCore.Razor.Language.Legacy;
|
||||
using Xunit;
|
||||
|
||||
|
|
@ -15,7 +16,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions
|
|||
public void InjectDirectiveTargetExtension_WritesProperty()
|
||||
{
|
||||
// Arrange
|
||||
var context = GetRenderingContext();
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
var target = new InjectTargetExtension();
|
||||
var node = new InjectIntermediateNode()
|
||||
{
|
||||
|
|
@ -37,7 +38,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions
|
|||
public void InjectDirectiveTargetExtension_WritesPropertyWithLinePragma_WhenSourceIsSet()
|
||||
{
|
||||
// Arrange
|
||||
var context = GetRenderingContext();
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
var target = new InjectTargetExtension();
|
||||
var node = new InjectIntermediateNode()
|
||||
{
|
||||
|
|
@ -63,15 +64,5 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions
|
|||
"#line hidden" + Environment.NewLine,
|
||||
context.CodeWriter.Builder.ToString());
|
||||
}
|
||||
|
||||
private CodeRenderingContext GetRenderingContext()
|
||||
{
|
||||
var codeWriter = new CodeWriter();
|
||||
var nodeWriter = new RuntimeNodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, nodeWriter, sourceDocument: null, options: options);
|
||||
|
||||
return context;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,20 +28,31 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
|||
}
|
||||
|
||||
[Fact]
|
||||
public void CreateWriter_CreatesDefaultDocumentWriter()
|
||||
public void CreateWriter_DesignTime_CreatesDesignTimeNodeWriter()
|
||||
{
|
||||
// Arrange
|
||||
var codeWriter = new CodeWriter();
|
||||
var codeDocument = TestRazorCodeDocument.Create(string.Empty);
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = CodeRenderingContext.Create(codeDocument, options);
|
||||
var options = RazorCodeGenerationOptions.CreateDesignTimeDefault();
|
||||
var target = new DefaultCodeTarget(options, Enumerable.Empty<ICodeTargetExtension>());
|
||||
|
||||
// Act
|
||||
var writer = target.CreateWriter(context);
|
||||
var writer = target.CreateNodeWriter();
|
||||
|
||||
// Assert
|
||||
Assert.IsType<DefaultDocumentWriter>(writer);
|
||||
Assert.IsType<DesignTimeNodeWriter>(writer);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CreateWriter_Runtime_CreatesRuntimeNodeWriter()
|
||||
{
|
||||
// Arrange
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var target = new DefaultCodeTarget(options, Enumerable.Empty<ICodeTargetExtension>());
|
||||
|
||||
// Act
|
||||
var writer = target.CreateNodeWriter();
|
||||
|
||||
// Assert
|
||||
Assert.IsType<RuntimeNodeWriter>(writer);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
|
|||
|
|
@ -13,24 +13,19 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
|||
public void WriteDocument_Empty_WritesChecksumAndMarksAutoGenerated()
|
||||
{
|
||||
// Arrange
|
||||
var document = new DocumentIntermediateNode();
|
||||
|
||||
var codeDocument = TestRazorCodeDocument.CreateEmpty();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
|
||||
var target = CodeTarget.CreateDefault(codeDocument, options);
|
||||
var codeWriter = new CodeWriter();
|
||||
var nodeWriter = new RuntimeNodeWriter();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, nodeWriter, codeDocument.Source, options);
|
||||
|
||||
var writer = new DefaultDocumentWriter(target, context);
|
||||
|
||||
var document = new DocumentIntermediateNode();
|
||||
var builder = IntermediateNodeBuilder.Create(document);
|
||||
var writer = new DefaultDocumentWriter(target, options);
|
||||
|
||||
// Act
|
||||
writer.WriteDocument(document);
|
||||
var result = writer.WriteDocument(codeDocument, document);
|
||||
|
||||
// Assert
|
||||
var csharp = context.CodeWriter.Builder.ToString();
|
||||
var csharp = result.GeneratedCode;
|
||||
Assert.Equal(
|
||||
@"#pragma checksum ""test.cshtml"" ""{ff1816ec-aa5e-4d10-87f7-6f4963833460}"" ""da39a3ee5e6b4b0d3255bfef95601890afd80709""
|
||||
// <auto-generated/>
|
||||
|
|
@ -45,6 +40,8 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
|||
public void WriteDocument_Empty_SuppressChecksumTrue_DoesnotWriteChecksum()
|
||||
{
|
||||
// Arrange
|
||||
var document = new DocumentIntermediateNode();
|
||||
|
||||
var codeDocument = TestRazorCodeDocument.CreateEmpty();
|
||||
var optionsBuilder = new DefaultRazorCodeGenerationOptionsBuilder()
|
||||
{
|
||||
|
|
@ -53,20 +50,13 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
|||
var options = optionsBuilder.Build();
|
||||
|
||||
var target = CodeTarget.CreateDefault(codeDocument, options);
|
||||
var codeWriter = new CodeWriter();
|
||||
var nodeWriter = new RuntimeNodeWriter();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, nodeWriter, codeDocument.Source, options);
|
||||
|
||||
var writer = new DefaultDocumentWriter(target, context);
|
||||
|
||||
var document = new DocumentIntermediateNode();
|
||||
var builder = IntermediateNodeBuilder.Create(document);
|
||||
var writer = new DefaultDocumentWriter(target, options);
|
||||
|
||||
// Act
|
||||
writer.WriteDocument(document);
|
||||
var result = writer.WriteDocument(codeDocument, document);
|
||||
|
||||
// Assert
|
||||
var csharp = context.CodeWriter.Builder.ToString();
|
||||
var csharp = result.GeneratedCode;
|
||||
Assert.Equal(
|
||||
@"// <auto-generated/>
|
||||
#pragma warning disable 1591
|
||||
|
|
@ -80,16 +70,6 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
|||
public void WriteDocument_WritesNamespace()
|
||||
{
|
||||
// Arrange
|
||||
var codeDocument = TestRazorCodeDocument.CreateEmpty();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
|
||||
var target = CodeTarget.CreateDefault(codeDocument, options);
|
||||
var codeWriter = new CodeWriter();
|
||||
var nodeWriter = new RuntimeNodeWriter();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, nodeWriter, codeDocument.Source, options);
|
||||
|
||||
var writer = new DefaultDocumentWriter(target, context);
|
||||
|
||||
var document = new DocumentIntermediateNode();
|
||||
var builder = IntermediateNodeBuilder.Create(document);
|
||||
builder.Add(new NamespaceDeclarationIntermediateNode()
|
||||
|
|
@ -97,11 +77,17 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
|||
Content = "TestNamespace",
|
||||
});
|
||||
|
||||
var codeDocument = TestRazorCodeDocument.CreateEmpty();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
|
||||
var target = CodeTarget.CreateDefault(codeDocument, options);
|
||||
var writer = new DefaultDocumentWriter(target, options);
|
||||
|
||||
// Act
|
||||
writer.WriteDocument(document);
|
||||
var result = writer.WriteDocument(codeDocument, document);
|
||||
|
||||
// Assert
|
||||
var csharp = context.CodeWriter.Builder.ToString();
|
||||
var csharp = result.GeneratedCode;
|
||||
Assert.Equal(
|
||||
@"#pragma checksum ""test.cshtml"" ""{ff1816ec-aa5e-4d10-87f7-6f4963833460}"" ""da39a3ee5e6b4b0d3255bfef95601890afd80709""
|
||||
// <auto-generated/>
|
||||
|
|
@ -120,15 +106,6 @@ namespace TestNamespace
|
|||
public void WriteDocument_WritesClass()
|
||||
{
|
||||
// Arrange
|
||||
var codeDocument = TestRazorCodeDocument.CreateEmpty();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
|
||||
var target = CodeTarget.CreateDefault(codeDocument, options);
|
||||
var codeWriter = new CodeWriter();
|
||||
var nodeWriter = new RuntimeNodeWriter();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, nodeWriter, codeDocument.Source, options);
|
||||
var writer = new DefaultDocumentWriter(target, context);
|
||||
|
||||
var document = new DocumentIntermediateNode();
|
||||
var builder = IntermediateNodeBuilder.Create(document);
|
||||
builder.Add(new ClassDeclarationIntermediateNode()
|
||||
|
|
@ -142,11 +119,17 @@ namespace TestNamespace
|
|||
Name = "TestClass",
|
||||
});
|
||||
|
||||
var codeDocument = TestRazorCodeDocument.CreateEmpty();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
|
||||
var target = CodeTarget.CreateDefault(codeDocument, options);
|
||||
var writer = new DefaultDocumentWriter(target, options);
|
||||
|
||||
// Act
|
||||
writer.WriteDocument(document);
|
||||
var result = writer.WriteDocument(codeDocument, document);
|
||||
|
||||
// Assert
|
||||
var csharp = context.CodeWriter.Builder.ToString();
|
||||
var csharp = result.GeneratedCode;
|
||||
Assert.Equal(
|
||||
@"#pragma checksum ""test.cshtml"" ""{ff1816ec-aa5e-4d10-87f7-6f4963833460}"" ""da39a3ee5e6b4b0d3255bfef95601890afd80709""
|
||||
// <auto-generated/>
|
||||
|
|
@ -164,15 +147,6 @@ internal class TestClass : TestBase, IFoo, IBar
|
|||
public void WriteDocument_WritesMethod()
|
||||
{
|
||||
// Arrange
|
||||
var codeDocument = TestRazorCodeDocument.CreateEmpty();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
|
||||
var target = CodeTarget.CreateDefault(codeDocument, options);
|
||||
var codeWriter = new CodeWriter();
|
||||
var nodeWriter = new RuntimeNodeWriter();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, nodeWriter, codeDocument.Source, options);
|
||||
var writer = new DefaultDocumentWriter(target, context);
|
||||
|
||||
var document = new DocumentIntermediateNode();
|
||||
var builder = IntermediateNodeBuilder.Create(document);
|
||||
builder.Add(new MethodDeclarationIntermediateNode()
|
||||
|
|
@ -187,11 +161,17 @@ internal class TestClass : TestBase, IFoo, IBar
|
|||
ReturnType = "string",
|
||||
});
|
||||
|
||||
var codeDocument = TestRazorCodeDocument.CreateEmpty();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
|
||||
var target = CodeTarget.CreateDefault(codeDocument, options);
|
||||
var writer = new DefaultDocumentWriter(target, options);
|
||||
|
||||
// Act
|
||||
writer.WriteDocument(document);
|
||||
var result = writer.WriteDocument(codeDocument, document);
|
||||
|
||||
// Assert
|
||||
var csharp = context.CodeWriter.Builder.ToString();
|
||||
var csharp = result.GeneratedCode;
|
||||
Assert.Equal(
|
||||
@"#pragma checksum ""test.cshtml"" ""{ff1816ec-aa5e-4d10-87f7-6f4963833460}"" ""da39a3ee5e6b4b0d3255bfef95601890afd80709""
|
||||
// <auto-generated/>
|
||||
|
|
@ -211,15 +191,6 @@ internal virtual async string TestMethod()
|
|||
public void WriteDocument_WritesField()
|
||||
{
|
||||
// Arrange
|
||||
var codeDocument = TestRazorCodeDocument.CreateEmpty();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
|
||||
var target = CodeTarget.CreateDefault(codeDocument, options);
|
||||
var codeWriter = new CodeWriter();
|
||||
var nodeWriter = new RuntimeNodeWriter();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, nodeWriter, codeDocument.Source, options);
|
||||
var writer = new DefaultDocumentWriter(target, context);
|
||||
|
||||
var document = new DocumentIntermediateNode();
|
||||
var builder = IntermediateNodeBuilder.Create(document);
|
||||
builder.Add(new FieldDeclarationIntermediateNode()
|
||||
|
|
@ -233,11 +204,17 @@ internal virtual async string TestMethod()
|
|||
Type = "string",
|
||||
});
|
||||
|
||||
var codeDocument = TestRazorCodeDocument.CreateEmpty();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
|
||||
var target = CodeTarget.CreateDefault(codeDocument, options);
|
||||
var writer = new DefaultDocumentWriter(target, options);
|
||||
|
||||
// Act
|
||||
writer.WriteDocument(document);
|
||||
var result = writer.WriteDocument(codeDocument, document);
|
||||
|
||||
// Assert
|
||||
var csharp = context.CodeWriter.Builder.ToString();
|
||||
var csharp = result.GeneratedCode;
|
||||
Assert.Equal(
|
||||
@"#pragma checksum ""test.cshtml"" ""{ff1816ec-aa5e-4d10-87f7-6f4963833460}"" ""da39a3ee5e6b4b0d3255bfef95601890afd80709""
|
||||
// <auto-generated/>
|
||||
|
|
@ -253,15 +230,6 @@ internal readonly string _foo;
|
|||
public void WriteDocument_WritesProperty()
|
||||
{
|
||||
// Arrange
|
||||
var codeDocument = TestRazorCodeDocument.CreateEmpty();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
|
||||
var target = CodeTarget.CreateDefault(codeDocument, options);
|
||||
var codeWriter = new CodeWriter();
|
||||
var nodeWriter = new RuntimeNodeWriter();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, nodeWriter, codeDocument.Source, options);
|
||||
var writer = new DefaultDocumentWriter(target, context);
|
||||
|
||||
var document = new DocumentIntermediateNode();
|
||||
var builder = IntermediateNodeBuilder.Create(document);
|
||||
builder.Add(new PropertyDeclarationIntermediateNode()
|
||||
|
|
@ -275,11 +243,17 @@ internal readonly string _foo;
|
|||
Type = "string",
|
||||
});
|
||||
|
||||
var codeDocument = TestRazorCodeDocument.CreateEmpty();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
|
||||
var target = CodeTarget.CreateDefault(codeDocument, options);
|
||||
var writer = new DefaultDocumentWriter(target, options);
|
||||
|
||||
// Act
|
||||
writer.WriteDocument(document);
|
||||
var result = writer.WriteDocument(codeDocument, document);
|
||||
|
||||
// Assert
|
||||
var csharp = context.CodeWriter.Builder.ToString();
|
||||
var csharp = result.GeneratedCode;
|
||||
Assert.Equal(
|
||||
@"#pragma checksum ""test.cshtml"" ""{ff1816ec-aa5e-4d10-87f7-6f4963833460}"" ""da39a3ee5e6b4b0d3255bfef95601890afd80709""
|
||||
// <auto-generated/>
|
||||
|
|
|
|||
|
|
@ -15,9 +15,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
|||
{
|
||||
// Arrange
|
||||
var writer = new DesignTimeNodeWriter();
|
||||
var codeWriter = new CodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, writer, sourceDocument: null, options: options);
|
||||
var context = TestCodeRenderingContext.CreateDesignTime();
|
||||
|
||||
var node = new UsingDirectiveIntermediateNode()
|
||||
{
|
||||
|
|
@ -42,9 +40,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
|||
// Arrange
|
||||
var writer = new DesignTimeNodeWriter();
|
||||
var sourceDocument = TestRazorSourceDocument.Create("@using System;");
|
||||
var codeWriter = new CodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, writer, sourceDocument, options);
|
||||
var context = TestCodeRenderingContext.CreateDesignTime();
|
||||
|
||||
var originalSpan = new SourceSpan("test.cshtml", 0, 0, 0, 6);
|
||||
var generatedSpan = new SourceSpan(null, 21 + Environment.NewLine.Length, 1, 0, 6);
|
||||
|
|
@ -59,7 +55,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
|||
writer.WriteUsingDirective(context, node);
|
||||
|
||||
// Assert
|
||||
var mapping = Assert.Single(context.GetLineMappings());
|
||||
var mapping = Assert.Single(((DefaultCodeRenderingContext)context).LineMappings);
|
||||
Assert.Equal(expectedLineMapping, mapping);
|
||||
var csharp = context.CodeWriter.Builder.ToString();
|
||||
Assert.Equal(
|
||||
|
|
@ -78,9 +74,7 @@ using System;
|
|||
{
|
||||
// Arrange
|
||||
var writer = new DesignTimeNodeWriter();
|
||||
var codeWriter = new CodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, writer, sourceDocument: null, options: options);
|
||||
var context = TestCodeRenderingContext.CreateDesignTime();
|
||||
|
||||
var node = new CSharpExpressionIntermediateNode();
|
||||
var builder = IntermediateNodeBuilder.Create(node);
|
||||
|
|
@ -107,9 +101,7 @@ using System;
|
|||
{
|
||||
// Arrange
|
||||
var writer = new DesignTimeNodeWriter();
|
||||
var codeWriter = new CodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, writer, sourceDocument: null, options: options);
|
||||
var context = TestCodeRenderingContext.CreateDesignTime();
|
||||
|
||||
var node = new CSharpExpressionIntermediateNode()
|
||||
{
|
||||
|
|
@ -143,9 +135,7 @@ __o = i++;
|
|||
{
|
||||
// Arrange
|
||||
var writer = new DesignTimeNodeWriter();
|
||||
var codeWriter = new CodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, writer, sourceDocument: null, options: options);
|
||||
var context = TestCodeRenderingContext.CreateDesignTime();
|
||||
|
||||
var node = new CSharpExpressionIntermediateNode();
|
||||
var builder = IntermediateNodeBuilder.Create(node);
|
||||
|
|
@ -161,15 +151,14 @@ __o = i++;
|
|||
Kind = IntermediateToken.TokenKind.CSharp,
|
||||
});
|
||||
|
||||
context.SetRenderNode((n) => Assert.IsType<MyExtensionIntermediateNode>(n));
|
||||
|
||||
// Act
|
||||
writer.WriteCSharpExpression(context, node);
|
||||
|
||||
// Assert
|
||||
var csharp = context.CodeWriter.Builder.ToString();
|
||||
Assert.Equal(
|
||||
@"__o = i++;
|
||||
@"__o = iRender Children
|
||||
++;
|
||||
",
|
||||
csharp,
|
||||
ignoreLineEndingDifferences: true);
|
||||
|
|
@ -180,10 +169,7 @@ __o = i++;
|
|||
{
|
||||
// Arrange
|
||||
var writer = new DesignTimeNodeWriter();
|
||||
var sourceDocument = TestRazorSourceDocument.Create(" @i++");
|
||||
var codeWriter = new CodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, writer, sourceDocument, options);
|
||||
var context = TestCodeRenderingContext.CreateDesignTime();
|
||||
|
||||
var node = new CSharpExpressionIntermediateNode()
|
||||
{
|
||||
|
|
@ -202,8 +188,6 @@ __o = i++;
|
|||
Kind = IntermediateToken.TokenKind.CSharp,
|
||||
});
|
||||
|
||||
context.SetRenderNode((n) => Assert.IsType<MyExtensionIntermediateNode>(n));
|
||||
|
||||
// Act
|
||||
writer.WriteCSharpExpression(context, node);
|
||||
|
||||
|
|
@ -211,7 +195,8 @@ __o = i++;
|
|||
var csharp = context.CodeWriter.Builder.ToString();
|
||||
Assert.Equal(
|
||||
@"#line 1 ""test.cshtml""
|
||||
__o = i++;
|
||||
__o = iRender Children
|
||||
++;
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
|
@ -225,9 +210,7 @@ __o = i++;
|
|||
{
|
||||
// Arrange
|
||||
var writer = new DesignTimeNodeWriter();
|
||||
var codeWriter = new CodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, writer, sourceDocument: null, options: options);
|
||||
var context = TestCodeRenderingContext.CreateDesignTime();
|
||||
|
||||
var node = new CSharpCodeIntermediateNode();
|
||||
IntermediateNodeBuilder.Create(node)
|
||||
|
|
@ -250,9 +233,7 @@ __o = i++;
|
|||
{
|
||||
// Arrange
|
||||
var writer = new DesignTimeNodeWriter();
|
||||
var codeWriter = new CodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, writer, sourceDocument: null, options: options);
|
||||
var context = TestCodeRenderingContext.CreateDesignTime();
|
||||
|
||||
var node = new CSharpCodeIntermediateNode()
|
||||
{
|
||||
|
|
@ -282,9 +263,7 @@ __o = i++;
|
|||
{
|
||||
// Arrange
|
||||
var writer = new DesignTimeNodeWriter();
|
||||
var codeWriter = new CodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, writer, sourceDocument: null, options: options);
|
||||
var context = TestCodeRenderingContext.CreateDesignTime();
|
||||
|
||||
var node = new CSharpCodeIntermediateNode();
|
||||
IntermediateNodeBuilder.Create(node)
|
||||
|
|
@ -311,9 +290,7 @@ __o = i++;
|
|||
{
|
||||
// Arrange
|
||||
var writer = new DesignTimeNodeWriter();
|
||||
var codeWriter = new CodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, writer, sourceDocument: null, options: options);
|
||||
var context = TestCodeRenderingContext.CreateDesignTime();
|
||||
|
||||
var node = new CSharpCodeIntermediateNode()
|
||||
{
|
||||
|
|
@ -347,9 +324,7 @@ if (true) { }
|
|||
{
|
||||
// Arrange
|
||||
var writer = new DesignTimeNodeWriter();
|
||||
var codeWriter = new CodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, writer, sourceDocument: null, options: options);
|
||||
var context = TestCodeRenderingContext.CreateDesignTime();
|
||||
|
||||
var node = new CSharpCodeIntermediateNode()
|
||||
{
|
||||
|
|
@ -386,9 +361,10 @@ if (true) { }
|
|||
var content = "<input checked=\"hello-world @false\" />";
|
||||
var sourceDocument = TestRazorSourceDocument.Create(content);
|
||||
var codeDocument = RazorCodeDocument.Create(sourceDocument);
|
||||
var context = GetCodeRenderingContext(writer, sourceDocument);
|
||||
var irDocument = Lower(codeDocument);
|
||||
var node = irDocument.Children.OfType<HtmlAttributeIntermediateNode>().Single().Children[1] as CSharpExpressionAttributeValueIntermediateNode;
|
||||
var documentNode = Lower(codeDocument);
|
||||
var node = documentNode.Children.OfType<HtmlAttributeIntermediateNode>().Single().Children[1] as CSharpExpressionAttributeValueIntermediateNode;
|
||||
|
||||
var context = TestCodeRenderingContext.CreateDesignTime(source: sourceDocument);
|
||||
|
||||
// Act
|
||||
writer.WriteCSharpExpressionAttributeValue(context, node);
|
||||
|
|
@ -413,9 +389,10 @@ if (true) { }
|
|||
var content = "<input checked=\"hello-world @if(@true){ }\" />";
|
||||
var sourceDocument = TestRazorSourceDocument.Create(content);
|
||||
var codeDocument = RazorCodeDocument.Create(sourceDocument);
|
||||
var context = GetCodeRenderingContext(writer, sourceDocument);
|
||||
var irDocument = Lower(codeDocument);
|
||||
var node = irDocument.Children.OfType<HtmlAttributeIntermediateNode>().Single().Children[1] as CSharpCodeAttributeValueIntermediateNode;
|
||||
var documentNode = Lower(codeDocument);
|
||||
var node = documentNode.Children.OfType<HtmlAttributeIntermediateNode>().Single().Children[1] as CSharpCodeAttributeValueIntermediateNode;
|
||||
|
||||
var context = TestCodeRenderingContext.CreateDesignTime(source: sourceDocument);
|
||||
|
||||
// Act
|
||||
writer.WriteCSharpCodeAttributeValue(context, node);
|
||||
|
|
@ -440,9 +417,10 @@ if (true) { }
|
|||
var content = "<input checked=\"hello-world @if(@true){ @false }\" />";
|
||||
var sourceDocument = TestRazorSourceDocument.Create(content);
|
||||
var codeDocument = RazorCodeDocument.Create(sourceDocument);
|
||||
var context = GetCodeRenderingContext(writer, sourceDocument);
|
||||
var irDocument = Lower(codeDocument);
|
||||
var node = irDocument.Children.OfType<HtmlAttributeIntermediateNode>().Single().Children[1] as CSharpCodeAttributeValueIntermediateNode;
|
||||
var documentNode = Lower(codeDocument);
|
||||
var node = documentNode.Children.OfType<HtmlAttributeIntermediateNode>().Single().Children[1] as CSharpCodeAttributeValueIntermediateNode;
|
||||
|
||||
var context = TestCodeRenderingContext.CreateDesignTime(source: sourceDocument);
|
||||
|
||||
// Act
|
||||
writer.WriteCSharpCodeAttributeValue(context, node);
|
||||
|
|
@ -455,7 +433,7 @@ if (true) { }
|
|||
|
||||
#line default
|
||||
#line hidden
|
||||
Render Node - CSharpExpressionIntermediateNode
|
||||
Render Children
|
||||
#line 1 ""test.cshtml""
|
||||
}
|
||||
|
||||
|
|
@ -466,19 +444,6 @@ Render Node - CSharpExpressionIntermediateNode
|
|||
ignoreLineEndingDifferences: true);
|
||||
}
|
||||
|
||||
private static CodeRenderingContext GetCodeRenderingContext(IntermediateNodeWriter writer, RazorSourceDocument sourceDocument)
|
||||
{
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var codeWriter = new CodeWriter();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, writer, sourceDocument, options);
|
||||
context.SetRenderNode(n =>
|
||||
{
|
||||
codeWriter.WriteLine($"Render Node - {n.GetType().Name}");
|
||||
});
|
||||
|
||||
return context;
|
||||
}
|
||||
|
||||
private static DocumentIntermediateNode Lower(RazorCodeDocument codeDocument)
|
||||
{
|
||||
var engine = RazorEngine.Create();
|
||||
|
|
@ -499,10 +464,10 @@ Render Node - CSharpExpressionIntermediateNode
|
|||
}
|
||||
}
|
||||
|
||||
var irDocument = codeDocument.GetDocumentIntermediateNode();
|
||||
Assert.NotNull(irDocument);
|
||||
var documentNode = codeDocument.GetDocumentIntermediateNode();
|
||||
Assert.NotNull(documentNode);
|
||||
|
||||
return irDocument;
|
||||
return documentNode;
|
||||
}
|
||||
|
||||
private class MyExtensionIntermediateNode : ExtensionIntermediateNode
|
||||
|
|
@ -511,12 +476,12 @@ Render Node - CSharpExpressionIntermediateNode
|
|||
|
||||
public override void Accept(IntermediateNodeVisitor visitor)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
visitor.VisitDefault(this);
|
||||
}
|
||||
|
||||
public override void WriteNode(CodeTarget target, CodeRenderingContext context)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
context.CodeWriter.WriteLine("MyExtensionNode");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,9 +13,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
|||
{
|
||||
// Arrange
|
||||
var writer = new LiteralRuntimeNodeWriter();
|
||||
var codeWriter = new CodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, writer, sourceDocument: null, options: options);
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
var node = new CSharpExpressionIntermediateNode()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -16,8 +16,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
|||
// Arrange
|
||||
var codeWriter = new CodeWriter();
|
||||
var writer = new RuntimeNodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, writer, sourceDocument: null, options: options);
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
var node = new UsingDirectiveIntermediateNode()
|
||||
{
|
||||
|
|
@ -42,8 +41,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
|||
// Arrange
|
||||
var codeWriter = new CodeWriter();
|
||||
var writer = new RuntimeNodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, writer, sourceDocument: null, options: options);
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
var node = new UsingDirectiveIntermediateNode()
|
||||
{
|
||||
|
|
@ -76,8 +74,7 @@ using System;
|
|||
{
|
||||
WriteCSharpExpressionMethod = "Test",
|
||||
};
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, writer, sourceDocument: null, options: options);
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
var node = new CSharpExpressionIntermediateNode();
|
||||
var builder = IntermediateNodeBuilder.Create(node);
|
||||
|
|
@ -108,8 +105,7 @@ using System;
|
|||
{
|
||||
WriteCSharpExpressionMethod = "Test",
|
||||
};
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, writer, sourceDocument: null, options: options);
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
var node = new CSharpExpressionIntermediateNode()
|
||||
{
|
||||
|
|
@ -147,8 +143,7 @@ Test(i++);
|
|||
{
|
||||
WriteCSharpExpressionMethod = "Test",
|
||||
};
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, writer, sourceDocument: null, options: options);
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
var node = new CSharpExpressionIntermediateNode();
|
||||
var builder = IntermediateNodeBuilder.Create(node);
|
||||
|
|
@ -164,15 +159,14 @@ Test(i++);
|
|||
Kind = IntermediateToken.TokenKind.CSharp,
|
||||
});
|
||||
|
||||
context.SetRenderNode((n) => Assert.IsType<MyExtensionIntermediateNode>(n));
|
||||
|
||||
// Act
|
||||
writer.WriteCSharpExpression(context, node);
|
||||
|
||||
// Assert
|
||||
var csharp = context.CodeWriter.Builder.ToString();
|
||||
Assert.Equal(
|
||||
@"Test(i++);
|
||||
@"Test(iRender Children
|
||||
++);
|
||||
",
|
||||
csharp,
|
||||
ignoreLineEndingDifferences: true);
|
||||
|
|
@ -187,9 +181,7 @@ Test(i++);
|
|||
{
|
||||
WriteCSharpExpressionMethod = "Test",
|
||||
};
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var sourceDocument = TestRazorSourceDocument.Create(" @i++");
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, writer, sourceDocument, options);
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
var node = new CSharpExpressionIntermediateNode()
|
||||
{
|
||||
|
|
@ -208,8 +200,6 @@ Test(i++);
|
|||
Kind = IntermediateToken.TokenKind.CSharp,
|
||||
});
|
||||
|
||||
context.SetRenderNode((n) => Assert.IsType<MyExtensionIntermediateNode>(n));
|
||||
|
||||
// Act
|
||||
writer.WriteCSharpExpression(context, node);
|
||||
|
||||
|
|
@ -217,7 +207,8 @@ Test(i++);
|
|||
var csharp = context.CodeWriter.Builder.ToString();
|
||||
Assert.Equal(
|
||||
@"#line 1 ""test.cshtml""
|
||||
Test(i++);
|
||||
Test(iRender Children
|
||||
++);
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
|
@ -232,8 +223,7 @@ Test(i++);
|
|||
// Arrange
|
||||
var codeWriter = new CodeWriter();
|
||||
var writer = new RuntimeNodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, writer, sourceDocument: null, options: options);
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
var node = new CSharpCodeIntermediateNode();
|
||||
IntermediateNodeBuilder.Create(node)
|
||||
|
|
@ -257,8 +247,7 @@ Test(i++);
|
|||
// Arrange
|
||||
var codeWriter = new CodeWriter();
|
||||
var writer = new RuntimeNodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, writer, sourceDocument: null, options: options);
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
var node = new CSharpCodeIntermediateNode();
|
||||
IntermediateNodeBuilder.Create(node)
|
||||
|
|
@ -286,8 +275,7 @@ Test(i++);
|
|||
// Arrange
|
||||
var codeWriter = new CodeWriter();
|
||||
var writer = new RuntimeNodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, writer, sourceDocument: null, options: options);
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
var node = new CSharpCodeIntermediateNode()
|
||||
{
|
||||
|
|
@ -322,8 +310,7 @@ if (true) { }
|
|||
// Arrange
|
||||
var codeWriter = new CodeWriter();
|
||||
var writer = new RuntimeNodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, writer, sourceDocument: null, options: options);
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
var node = new CSharpCodeIntermediateNode()
|
||||
{
|
||||
|
|
@ -358,8 +345,7 @@ if (true) { }
|
|||
// Arrange
|
||||
var codeWriter = new CodeWriter();
|
||||
var writer = new RuntimeNodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, writer, sourceDocument: null, options: options);
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
var node = new HtmlContentIntermediateNode();
|
||||
node.Children.Add(new IntermediateToken()
|
||||
|
|
@ -386,9 +372,7 @@ if (true) { }
|
|||
// Arrange
|
||||
var codeWriter = new CodeWriter();
|
||||
var writer = new RuntimeNodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, writer, sourceDocument: null, options: options);
|
||||
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
var node = new HtmlContentIntermediateNode();
|
||||
node.Children.Add(new IntermediateToken()
|
||||
|
|
@ -418,9 +402,10 @@ WriteLiteral(@""{1}"");
|
|||
var content = "<input checked=\"hello-world @false\" />";
|
||||
var sourceDocument = TestRazorSourceDocument.Create(content);
|
||||
var codeDocument = RazorCodeDocument.Create(sourceDocument);
|
||||
var context = GetCodeRenderingContext(writer, sourceDocument);
|
||||
var irDocument = Lower(codeDocument);
|
||||
var node = irDocument.Children.OfType<HtmlAttributeIntermediateNode>().Single();
|
||||
var documentNode = Lower(codeDocument);
|
||||
var node = documentNode.Children.OfType<HtmlAttributeIntermediateNode>().Single();
|
||||
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
// Act
|
||||
writer.WriteHtmlAttribute(context, node);
|
||||
|
|
@ -430,6 +415,7 @@ WriteLiteral(@""{1}"");
|
|||
Assert.Equal(
|
||||
@"BeginWriteAttribute(""checked"", "" checked=\"""", 6, ""\"""", 34, 2);
|
||||
Render Children
|
||||
Render Children
|
||||
EndWriteAttribute();
|
||||
",
|
||||
csharp,
|
||||
|
|
@ -444,9 +430,10 @@ EndWriteAttribute();
|
|||
var content = "<input checked=\"hello-world @false\" />";
|
||||
var sourceDocument = TestRazorSourceDocument.Create(content);
|
||||
var codeDocument = RazorCodeDocument.Create(sourceDocument);
|
||||
var context = GetCodeRenderingContext(writer, sourceDocument);
|
||||
var irDocument = Lower(codeDocument);
|
||||
var node = irDocument.Children.OfType<HtmlAttributeIntermediateNode>().Single().Children[0] as HtmlAttributeValueIntermediateNode;
|
||||
var documentNode = Lower(codeDocument);
|
||||
var node = documentNode.Children.OfType<HtmlAttributeIntermediateNode>().Single().Children[0] as HtmlAttributeValueIntermediateNode;
|
||||
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
// Act
|
||||
writer.WriteHtmlAttributeValue(context, node);
|
||||
|
|
@ -468,9 +455,10 @@ EndWriteAttribute();
|
|||
var content = "<input checked=\"hello-world @false\" />";
|
||||
var sourceDocument = TestRazorSourceDocument.Create(content);
|
||||
var codeDocument = RazorCodeDocument.Create(sourceDocument);
|
||||
var context = GetCodeRenderingContext(writer, sourceDocument);
|
||||
var irDocument = Lower(codeDocument);
|
||||
var node = irDocument.Children.OfType<HtmlAttributeIntermediateNode>().Single().Children[1] as CSharpExpressionAttributeValueIntermediateNode;
|
||||
var documentNode = Lower(codeDocument);
|
||||
var node = documentNode.Children.OfType<HtmlAttributeIntermediateNode>().Single().Children[1] as CSharpExpressionAttributeValueIntermediateNode;
|
||||
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
// Act
|
||||
writer.WriteCSharpExpressionAttributeValue(context, node);
|
||||
|
|
@ -497,9 +485,10 @@ WriteAttributeValue("" "", 27, false, 28, 6, false);
|
|||
var content = "<input checked=\"hello-world @if(@true){ }\" />";
|
||||
var sourceDocument = TestRazorSourceDocument.Create(content);
|
||||
var codeDocument = RazorCodeDocument.Create(sourceDocument);
|
||||
var context = GetCodeRenderingContext(writer, sourceDocument);
|
||||
var irDocument = Lower(codeDocument);
|
||||
var node = irDocument.Children.OfType<HtmlAttributeIntermediateNode>().Single().Children[1] as CSharpCodeAttributeValueIntermediateNode;
|
||||
var documentNode = Lower(codeDocument);
|
||||
var node = documentNode.Children.OfType<HtmlAttributeIntermediateNode>().Single().Children[1] as CSharpCodeAttributeValueIntermediateNode;
|
||||
|
||||
var context = TestCodeRenderingContext.CreateRuntime(source: sourceDocument);
|
||||
|
||||
// Act
|
||||
writer.WriteCSharpCodeAttributeValue(context, node);
|
||||
|
|
@ -530,7 +519,7 @@ WriteAttributeValue("" "", 27, false, 28, 6, false);
|
|||
{
|
||||
PushWriterMethod = "TestPushWriter"
|
||||
};
|
||||
var context = GetCodeRenderingContext(writer, null);
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
// Act
|
||||
writer.BeginWriterScope(context, "MyWriter");
|
||||
|
|
@ -552,7 +541,7 @@ WriteAttributeValue("" "", 27, false, 28, 6, false);
|
|||
{
|
||||
PopWriterMethod = "TestPopWriter"
|
||||
};
|
||||
var context = GetCodeRenderingContext(writer, null);
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
// Act
|
||||
writer.EndWriterScope(context);
|
||||
|
|
@ -566,19 +555,6 @@ WriteAttributeValue("" "", 27, false, 28, 6, false);
|
|||
ignoreLineEndingDifferences: true);
|
||||
}
|
||||
|
||||
private static CodeRenderingContext GetCodeRenderingContext(IntermediateNodeWriter writer, RazorSourceDocument sourceDocument)
|
||||
{
|
||||
var codeWriter = new CodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, writer, sourceDocument, options);
|
||||
context.SetRenderChildren(n =>
|
||||
{
|
||||
codeWriter.WriteLine("Render Children");
|
||||
});
|
||||
|
||||
return context;
|
||||
}
|
||||
|
||||
private static DocumentIntermediateNode Lower(RazorCodeDocument codeDocument)
|
||||
{
|
||||
var engine = RazorEngine.Create();
|
||||
|
|
@ -611,7 +587,7 @@ WriteAttributeValue("" "", 27, false, 28, 6, false);
|
|||
|
||||
public override void Accept(IntermediateNodeVisitor visitor)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
visitor.VisitDefault(this);
|
||||
}
|
||||
|
||||
public override void WriteNode(CodeTarget target, CodeRenderingContext context)
|
||||
|
|
|
|||
|
|
@ -17,9 +17,10 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
|||
var content = "<input checked=\"hello-world @false\" />";
|
||||
var sourceDocument = TestRazorSourceDocument.Create(content);
|
||||
var codeDocument = RazorCodeDocument.Create(sourceDocument);
|
||||
var context = GetCodeRenderingContext(writer, sourceDocument);
|
||||
var irDocument = Lower(codeDocument);
|
||||
var node = irDocument.Children.OfType<HtmlAttributeIntermediateNode>().Single().Children[0] as HtmlAttributeValueIntermediateNode;
|
||||
var documentNode = Lower(codeDocument);
|
||||
var node = documentNode.Children.OfType<HtmlAttributeIntermediateNode>().Single().Children[0] as HtmlAttributeValueIntermediateNode;
|
||||
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
// Act
|
||||
writer.WriteHtmlAttributeValue(context, node);
|
||||
|
|
@ -40,9 +41,10 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
|||
var content = "<input checked=\"hello-world @false\" />";
|
||||
var sourceDocument = TestRazorSourceDocument.Create(content);
|
||||
var codeDocument = RazorCodeDocument.Create(sourceDocument);
|
||||
var context = GetCodeRenderingContext(writer, sourceDocument);
|
||||
var irDocument = Lower(codeDocument);
|
||||
var node = irDocument.Children.OfType<HtmlAttributeIntermediateNode>().Single().Children[1] as CSharpExpressionAttributeValueIntermediateNode;
|
||||
var documentNode = Lower(codeDocument);
|
||||
var node = documentNode.Children.OfType<HtmlAttributeIntermediateNode>().Single().Children[1] as CSharpExpressionAttributeValueIntermediateNode;
|
||||
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
// Act
|
||||
writer.WriteCSharpExpressionAttributeValue(context, node);
|
||||
|
|
@ -68,9 +70,10 @@ AddHtmlAttributeValue("" "", 27, false, 28, 6, false);
|
|||
var content = "<input checked=\"hello-world @if(@true){ }\" />";
|
||||
var sourceDocument = TestRazorSourceDocument.Create(content);
|
||||
var codeDocument = RazorCodeDocument.Create(sourceDocument);
|
||||
var context = GetCodeRenderingContext(writer, sourceDocument);
|
||||
var irDocument = Lower(codeDocument);
|
||||
var node = irDocument.Children.OfType<HtmlAttributeIntermediateNode>().Single().Children[1] as CSharpCodeAttributeValueIntermediateNode;
|
||||
var documentNode = Lower(codeDocument);
|
||||
var node = documentNode.Children.OfType<HtmlAttributeIntermediateNode>().Single().Children[1] as CSharpCodeAttributeValueIntermediateNode;
|
||||
|
||||
var context = TestCodeRenderingContext.CreateRuntime(source: sourceDocument);
|
||||
|
||||
// Act
|
||||
writer.WriteCSharpCodeAttributeValue(context, node);
|
||||
|
|
@ -93,19 +96,6 @@ AddHtmlAttributeValue("" "", 27, false, 28, 6, false);
|
|||
ignoreLineEndingDifferences: true);
|
||||
}
|
||||
|
||||
private static CodeRenderingContext GetCodeRenderingContext(IntermediateNodeWriter writer, RazorSourceDocument sourceDocument)
|
||||
{
|
||||
var codeWriter = new CodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, writer, sourceDocument, options);
|
||||
context.SetRenderChildren(_ =>
|
||||
{
|
||||
codeWriter.WriteLine("Render Children");
|
||||
});
|
||||
|
||||
return context;
|
||||
}
|
||||
|
||||
private static DocumentIntermediateNode Lower(RazorCodeDocument codeDocument)
|
||||
{
|
||||
var engine = RazorEngine.Create();
|
||||
|
|
@ -126,10 +116,10 @@ AddHtmlAttributeValue("" "", 27, false, 28, 6, false);
|
|||
}
|
||||
}
|
||||
|
||||
var irDocument = codeDocument.GetDocumentIntermediateNode();
|
||||
Assert.NotNull(irDocument);
|
||||
var documentNode = codeDocument.GetDocumentIntermediateNode();
|
||||
Assert.NotNull(documentNode);
|
||||
|
||||
return irDocument;
|
||||
return documentNode;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -69,9 +69,15 @@ namespace Microsoft.AspNetCore.Razor.Language.Extensions
|
|||
{
|
||||
// Arrange
|
||||
var extension = new DefaultTagHelperTargetExtension() { DesignTime = true };
|
||||
var context = GetDesignTimeCodeRenderingContext();
|
||||
var context = TestCodeRenderingContext.CreateDesignTime();
|
||||
|
||||
var node = new DefaultTagHelperBodyIntermediateNode();
|
||||
var node = new DefaultTagHelperBodyIntermediateNode()
|
||||
{
|
||||
Children =
|
||||
{
|
||||
new CSharpExpressionIntermediateNode(),
|
||||
}
|
||||
};
|
||||
|
||||
// Act
|
||||
extension.WriteTagHelperBody(context, node);
|
||||
|
|
@ -90,10 +96,14 @@ namespace Microsoft.AspNetCore.Razor.Language.Extensions
|
|||
{
|
||||
// Arrange
|
||||
var extension = new DefaultTagHelperTargetExtension();
|
||||
var context = GetRuntimeCodeRenderingContext();
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
var node = new DefaultTagHelperBodyIntermediateNode()
|
||||
{
|
||||
Children =
|
||||
{
|
||||
new CSharpExpressionIntermediateNode(),
|
||||
},
|
||||
TagMode = TagMode.SelfClosing,
|
||||
TagName = "p",
|
||||
};
|
||||
|
|
@ -118,7 +128,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Extensions
|
|||
{
|
||||
// Arrange
|
||||
var extension = new DefaultTagHelperTargetExtension() { DesignTime = true };
|
||||
var context = GetDesignTimeCodeRenderingContext();
|
||||
var context = TestCodeRenderingContext.CreateDesignTime();
|
||||
|
||||
var node = new DefaultTagHelperCreateIntermediateNode()
|
||||
{
|
||||
|
|
@ -143,7 +153,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Extensions
|
|||
{
|
||||
// Arrange
|
||||
var extension = new DefaultTagHelperTargetExtension();
|
||||
var context = GetRuntimeCodeRenderingContext();
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
var node = new DefaultTagHelperCreateIntermediateNode()
|
||||
{
|
||||
|
|
@ -169,7 +179,7 @@ __tagHelperExecutionContext.Add(__TestNamespace_MyTagHelper);
|
|||
{
|
||||
// Arrange
|
||||
var extension = new DefaultTagHelperTargetExtension() { DesignTime = true };
|
||||
var context = GetDesignTimeCodeRenderingContext();
|
||||
var context = TestCodeRenderingContext.CreateDesignTime();
|
||||
|
||||
var node = new DefaultTagHelperExecuteIntermediateNode();
|
||||
|
||||
|
|
@ -189,7 +199,7 @@ __tagHelperExecutionContext.Add(__TestNamespace_MyTagHelper);
|
|||
{
|
||||
// Arrange
|
||||
var extension = new DefaultTagHelperTargetExtension();
|
||||
var context = GetRuntimeCodeRenderingContext();
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
var node = new DefaultTagHelperExecuteIntermediateNode();
|
||||
|
||||
|
|
@ -216,7 +226,7 @@ __tagHelperExecutionContext = __tagHelperScopeManager.End();
|
|||
{
|
||||
// Arrange
|
||||
var extension = new DefaultTagHelperTargetExtension() { DesignTime = true };
|
||||
var context = GetDesignTimeCodeRenderingContext();
|
||||
var context = TestCodeRenderingContext.CreateDesignTime();
|
||||
|
||||
var node = new DefaultTagHelperHtmlAttributeIntermediateNode()
|
||||
{
|
||||
|
|
@ -242,6 +252,7 @@ __tagHelperExecutionContext = __tagHelperScopeManager.End();
|
|||
var csharp = context.CodeWriter.Builder.ToString();
|
||||
Assert.Equal(
|
||||
@"Render Children
|
||||
Render Children
|
||||
",
|
||||
csharp,
|
||||
ignoreLineEndingDifferences: true);
|
||||
|
|
@ -252,7 +263,7 @@ __tagHelperExecutionContext = __tagHelperScopeManager.End();
|
|||
{
|
||||
// Arrange
|
||||
var extension = new DefaultTagHelperTargetExtension();
|
||||
var context = GetRuntimeCodeRenderingContext();
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
var node = new DefaultTagHelperHtmlAttributeIntermediateNode()
|
||||
{
|
||||
|
|
@ -287,7 +298,7 @@ __tagHelperExecutionContext.AddHtmlAttribute(""name"", Html.Raw(__tagHelperStrin
|
|||
{
|
||||
// Arrange
|
||||
var extension = new DefaultTagHelperTargetExtension();
|
||||
var context = GetRuntimeCodeRenderingContext();
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
var node = new DefaultTagHelperHtmlAttributeIntermediateNode()
|
||||
{
|
||||
|
|
@ -314,6 +325,7 @@ __tagHelperExecutionContext.AddHtmlAttribute(""name"", Html.Raw(__tagHelperStrin
|
|||
Assert.Equal(
|
||||
@"BeginAddHtmlAttributeValues(__tagHelperExecutionContext, ""name"", 2, global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes);
|
||||
Render Children
|
||||
Render Children
|
||||
EndAddHtmlAttributeValues(__tagHelperExecutionContext);
|
||||
",
|
||||
csharp,
|
||||
|
|
@ -325,7 +337,7 @@ EndAddHtmlAttributeValues(__tagHelperExecutionContext);
|
|||
{
|
||||
// Arrange
|
||||
var extension = new DefaultTagHelperTargetExtension() { DesignTime = true };
|
||||
var context = GetDesignTimeCodeRenderingContext();
|
||||
var context = TestCodeRenderingContext.CreateDesignTime();
|
||||
|
||||
var node = new DefaultTagHelperPropertyIntermediateNode()
|
||||
{
|
||||
|
|
@ -363,7 +375,7 @@ __InputTagHelper.StringProp = ""value"";
|
|||
{
|
||||
// Arrange
|
||||
var extension = new DefaultTagHelperTargetExtension() { DesignTime = true };
|
||||
var context = GetDesignTimeCodeRenderingContext();
|
||||
var context = TestCodeRenderingContext.CreateDesignTime();
|
||||
|
||||
var node = new DefaultTagHelperPropertyIntermediateNode()
|
||||
{
|
||||
|
|
@ -401,7 +413,7 @@ __InputTagHelper.StringProp = string.Empty;
|
|||
{
|
||||
// Arrange
|
||||
var extension = new DefaultTagHelperTargetExtension() { DesignTime = true };
|
||||
var context = GetDesignTimeCodeRenderingContext();
|
||||
var context = TestCodeRenderingContext.CreateDesignTime();
|
||||
|
||||
var node = new DefaultTagHelperPropertyIntermediateNode()
|
||||
{
|
||||
|
|
@ -443,7 +455,7 @@ __InputTagHelper.IntProp = 32;
|
|||
{
|
||||
// Arrange
|
||||
var extension = new DefaultTagHelperTargetExtension() { DesignTime = true };
|
||||
var context = GetDesignTimeCodeRenderingContext();
|
||||
var context = TestCodeRenderingContext.CreateDesignTime();
|
||||
|
||||
var node = new DefaultTagHelperPropertyIntermediateNode()
|
||||
{
|
||||
|
|
@ -480,7 +492,7 @@ __InputTagHelper.IntProp = 32;
|
|||
{
|
||||
// Arrange
|
||||
var extension = new DefaultTagHelperTargetExtension() { DesignTime = true };
|
||||
var context = GetDesignTimeCodeRenderingContext();
|
||||
var context = TestCodeRenderingContext.CreateDesignTime();
|
||||
|
||||
var node = new DefaultTagHelperPropertyIntermediateNode()
|
||||
{
|
||||
|
|
@ -522,7 +534,7 @@ __InputTagHelper.IntIndexer[""bound""] = 32;
|
|||
{
|
||||
// Arrange
|
||||
var extension = new DefaultTagHelperTargetExtension() { DesignTime = true };
|
||||
var context = GetDesignTimeCodeRenderingContext();
|
||||
var context = TestCodeRenderingContext.CreateDesignTime();
|
||||
|
||||
var node = new DefaultTagHelperPropertyIntermediateNode()
|
||||
{
|
||||
|
|
@ -559,7 +571,7 @@ __InputTagHelper.IntIndexer[""bound""] = 32;
|
|||
{
|
||||
// Arrange
|
||||
var extension = new DefaultTagHelperTargetExtension();
|
||||
var context = GetRuntimeCodeRenderingContext();
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
var node = new DefaultTagHelperPropertyIntermediateNode()
|
||||
{
|
||||
|
|
@ -602,7 +614,7 @@ __tagHelperExecutionContext.AddTagHelperAttribute(""bound"", __InputTagHelper.St
|
|||
{
|
||||
// Arrange
|
||||
var extension = new DefaultTagHelperTargetExtension();
|
||||
var context = GetRuntimeCodeRenderingContext();
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
var node = new DefaultTagHelperPropertyIntermediateNode()
|
||||
{
|
||||
|
|
@ -645,7 +657,7 @@ __tagHelperExecutionContext.AddTagHelperAttribute(""bound"", __InputTagHelper.In
|
|||
{
|
||||
// Arrange
|
||||
var extension = new DefaultTagHelperTargetExtension();
|
||||
var context = GetRuntimeCodeRenderingContext();
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
var node = new DefaultTagHelperPropertyIntermediateNode()
|
||||
{
|
||||
|
|
@ -683,7 +695,7 @@ __tagHelperExecutionContext.AddTagHelperAttribute(""bound"", __InputTagHelper.In
|
|||
{
|
||||
// Arrange
|
||||
var extension = new DefaultTagHelperTargetExtension();
|
||||
var context = GetRuntimeCodeRenderingContext();
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
var node = new DefaultTagHelperPropertyIntermediateNode()
|
||||
{
|
||||
|
|
@ -730,7 +742,7 @@ __tagHelperExecutionContext.AddTagHelperAttribute(""foo-bound"", __InputTagHelpe
|
|||
{
|
||||
// Arrange
|
||||
var extension = new DefaultTagHelperTargetExtension();
|
||||
var context = GetRuntimeCodeRenderingContext();
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
var node = new DefaultTagHelperPropertyIntermediateNode()
|
||||
{
|
||||
|
|
@ -772,7 +784,7 @@ __tagHelperExecutionContext.AddTagHelperAttribute(""foo-bound"", __InputTagHelpe
|
|||
{
|
||||
// Arrange
|
||||
var extension = new DefaultTagHelperTargetExtension() { DesignTime = true };
|
||||
var context = GetDesignTimeCodeRenderingContext();
|
||||
var context = TestCodeRenderingContext.CreateDesignTime();
|
||||
|
||||
var node = new DefaultTagHelperRuntimeIntermediateNode();
|
||||
|
||||
|
|
@ -792,7 +804,7 @@ __tagHelperExecutionContext.AddTagHelperAttribute(""foo-bound"", __InputTagHelpe
|
|||
{
|
||||
// Arrange
|
||||
var extension = new DefaultTagHelperTargetExtension();
|
||||
var context = GetRuntimeCodeRenderingContext();
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
var node = new DefaultTagHelperRuntimeIntermediateNode();
|
||||
|
||||
|
|
@ -825,50 +837,6 @@ private global::Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperScopeMana
|
|||
ignoreLineEndingDifferences: true);
|
||||
}
|
||||
|
||||
private static CodeRenderingContext GetRuntimeCodeRenderingContext()
|
||||
{
|
||||
var codeWriter = new CodeWriter();
|
||||
var nodeWriter = new RuntimeNodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, nodeWriter, null, options)
|
||||
{
|
||||
Items =
|
||||
{
|
||||
{ CodeRenderingContext.SuppressUniqueIds, "test" },
|
||||
},
|
||||
TagHelperWriter = new RuntimeTagHelperWriter(),
|
||||
TagHelperRenderingContext = new TagHelperRenderingContext()
|
||||
};
|
||||
context.SetRenderChildren(n =>
|
||||
{
|
||||
codeWriter.WriteLine("Render Children");
|
||||
});
|
||||
|
||||
return context;
|
||||
}
|
||||
|
||||
private static CodeRenderingContext GetDesignTimeCodeRenderingContext()
|
||||
{
|
||||
var codeWriter = new CodeWriter();
|
||||
var nodeWriter = new RuntimeNodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDesignTimeDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, nodeWriter, null, options)
|
||||
{
|
||||
Items =
|
||||
{
|
||||
{ CodeRenderingContext.SuppressUniqueIds, "test" },
|
||||
},
|
||||
TagHelperWriter = new DesignTimeTagHelperWriter(),
|
||||
TagHelperRenderingContext = new TagHelperRenderingContext()
|
||||
};
|
||||
context.SetRenderChildren(n =>
|
||||
{
|
||||
codeWriter.WriteLine("Render Children");
|
||||
});
|
||||
|
||||
return context;
|
||||
}
|
||||
|
||||
private static DocumentIntermediateNode Lower(RazorCodeDocument codeDocument)
|
||||
{
|
||||
var engine = RazorEngine.Create();
|
||||
|
|
|
|||
|
|
@ -14,10 +14,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Extensions
|
|||
{
|
||||
// Arrange
|
||||
var extension = new DesignTimeDirectiveTargetExtension();
|
||||
var codeWriter = new CodeWriter();
|
||||
var nodeWriter = new DesignTimeNodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, nodeWriter, sourceDocument: null, options: options);
|
||||
var context = TestCodeRenderingContext.CreateDesignTime();
|
||||
|
||||
var node = new DesignTimeDirectiveIntermediateNode();
|
||||
|
||||
|
|
@ -41,11 +38,7 @@ private void __RazorDirectiveTokenHelpers__() {
|
|||
{
|
||||
// Arrange
|
||||
var extension = new DesignTimeDirectiveTargetExtension();
|
||||
var codeWriter = new CodeWriter();
|
||||
var nodeWriter = new DesignTimeNodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var sourceDocument = RazorSourceDocument.Create("test content", "test.cshtml");
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, nodeWriter, sourceDocument, options);
|
||||
var context = TestCodeRenderingContext.CreateDesignTime();
|
||||
|
||||
var node = new DesignTimeDirectiveIntermediateNode();
|
||||
var token = new DirectiveTokenIntermediateNode()
|
||||
|
|
@ -80,11 +73,7 @@ System.String __typeHelper = default(System.String);
|
|||
{
|
||||
// Arrange
|
||||
var extension = new DesignTimeDirectiveTargetExtension();
|
||||
var codeWriter = new CodeWriter();
|
||||
var nodeWriter = new DesignTimeNodeWriter();
|
||||
var sourceDocument = RazorSourceDocument.Create("test content", "test.cshtml");
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, nodeWriter, sourceDocument, options);
|
||||
var context = TestCodeRenderingContext.CreateDesignTime();
|
||||
|
||||
var node = new DesignTimeDirectiveIntermediateNode();
|
||||
var token = new DirectiveTokenIntermediateNode()
|
||||
|
|
@ -119,11 +108,7 @@ global::System.Object __typeHelper = nameof(System.Collections.Generic);
|
|||
{
|
||||
// Arrange
|
||||
var extension = new DesignTimeDirectiveTargetExtension();
|
||||
var codeWriter = new CodeWriter();
|
||||
var nodeWriter = new DesignTimeNodeWriter();
|
||||
var sourceDocument = RazorSourceDocument.Create("test content", "test.cshtml");
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, nodeWriter, sourceDocument, options);
|
||||
var context = TestCodeRenderingContext.CreateDesignTime();
|
||||
|
||||
var node = new DesignTimeDirectiveIntermediateNode();
|
||||
var token = new DirectiveTokenIntermediateNode()
|
||||
|
|
@ -158,11 +143,7 @@ global::System.Object Foo = null;
|
|||
{
|
||||
// Arrange
|
||||
var extension = new DesignTimeDirectiveTargetExtension();
|
||||
var codeWriter = new CodeWriter();
|
||||
var nodeWriter = new DesignTimeNodeWriter();
|
||||
var sourceDocument = RazorSourceDocument.Create("test content", "test.cshtml");
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, nodeWriter, sourceDocument, options);
|
||||
var context = TestCodeRenderingContext.CreateDesignTime();
|
||||
|
||||
var node = new DesignTimeDirectiveIntermediateNode();
|
||||
var token = new DirectiveTokenIntermediateNode()
|
||||
|
|
@ -208,11 +189,7 @@ global::System.Object __typeHelper = ""Value"";
|
|||
{
|
||||
// Arrange
|
||||
var extension = new DesignTimeDirectiveTargetExtension();
|
||||
var codeWriter = new CodeWriter();
|
||||
var nodeWriter = new DesignTimeNodeWriter();
|
||||
var sourceDocument = RazorSourceDocument.Create("test content", "test.cshtml");
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, nodeWriter, sourceDocument, options);
|
||||
var context = TestCodeRenderingContext.CreateDesignTime();
|
||||
|
||||
var node = new DesignTimeDirectiveIntermediateNode();
|
||||
var token = new DirectiveTokenIntermediateNode()
|
||||
|
|
|
|||
|
|
@ -13,10 +13,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Extensions
|
|||
{
|
||||
// Arrange
|
||||
var extension = new PreallocatedAttributeTargetExtension();
|
||||
var codeWriter = new CodeWriter();
|
||||
var nodeWriter = new RuntimeNodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, nodeWriter, sourceDocument: null, options: options);
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
var node = new PreallocatedTagHelperHtmlAttributeValueIntermediateNode()
|
||||
{
|
||||
|
|
@ -43,10 +40,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Extensions
|
|||
{
|
||||
// Arrange
|
||||
var extension = new PreallocatedAttributeTargetExtension();
|
||||
var codeWriter = new CodeWriter();
|
||||
var nodeWriter = new RuntimeNodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, nodeWriter, sourceDocument: null, options: options);
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
var node = new PreallocatedTagHelperHtmlAttributeValueIntermediateNode()
|
||||
{
|
||||
|
|
@ -73,10 +67,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Extensions
|
|||
{
|
||||
// Arrange
|
||||
var extension = new PreallocatedAttributeTargetExtension();
|
||||
var codeWriter = new CodeWriter();
|
||||
var nodeWriter = new RuntimeNodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, nodeWriter, sourceDocument: null, options: options);
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
var node = new PreallocatedTagHelperHtmlAttributeIntermediateNode()
|
||||
{
|
||||
|
|
@ -100,10 +91,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Extensions
|
|||
{
|
||||
// Arrange
|
||||
var extension = new PreallocatedAttributeTargetExtension();
|
||||
var codeWriter = new CodeWriter();
|
||||
var nodeWriter = new RuntimeNodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, nodeWriter, sourceDocument: null, options: options);
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
var node = new PreallocatedTagHelperPropertyValueIntermediateNode()
|
||||
{
|
||||
|
|
@ -130,10 +118,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Extensions
|
|||
{
|
||||
// Arrange
|
||||
var extension = new PreallocatedAttributeTargetExtension();
|
||||
var codeWriter = new CodeWriter();
|
||||
var nodeWriter = new RuntimeNodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, nodeWriter, sourceDocument: null, options: options);
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
var tagHelperBuilder = new DefaultTagHelperDescriptorBuilder(TagHelperConventions.DefaultKind, "FooTagHelper", "Test");
|
||||
tagHelperBuilder.TypeName("FooTagHelper");
|
||||
|
|
@ -173,13 +158,7 @@ __tagHelperExecutionContext.AddTagHelperAttribute(_tagHelper1);
|
|||
{
|
||||
// Arrange
|
||||
var extension = new PreallocatedAttributeTargetExtension();
|
||||
var codeWriter = new CodeWriter();
|
||||
var nodeWriter = new RuntimeNodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, nodeWriter, sourceDocument: null, options: options)
|
||||
{
|
||||
TagHelperRenderingContext = new TagHelperRenderingContext()
|
||||
};
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
var tagHelperBuilder = new DefaultTagHelperDescriptorBuilder(TagHelperConventions.DefaultKind, "FooTagHelper", "Test");
|
||||
tagHelperBuilder.TypeName("FooTagHelper");
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using Microsoft.AspNetCore.Razor.Language.CodeGeneration;
|
||||
using Microsoft.AspNetCore.Razor.Language.Intermediate;
|
||||
using Microsoft.AspNetCore.Razor.Language.Legacy;
|
||||
using Xunit;
|
||||
using static Microsoft.AspNetCore.Razor.Language.Intermediate.IntermediateNodeAssert;
|
||||
|
|
@ -16,6 +17,10 @@ namespace Microsoft.AspNetCore.Razor.Language.Extensions
|
|||
// Arrange
|
||||
var node = new SectionIntermediateNode()
|
||||
{
|
||||
Children =
|
||||
{
|
||||
new CSharpExpressionIntermediateNode(),
|
||||
},
|
||||
Name = "MySection"
|
||||
};
|
||||
|
||||
|
|
@ -24,26 +29,14 @@ namespace Microsoft.AspNetCore.Razor.Language.Extensions
|
|||
SectionMethodName = "CreateSection"
|
||||
};
|
||||
|
||||
var codeWriter = new CodeWriter();
|
||||
var nodeWriter = new RuntimeNodeWriter();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, nodeWriter, sourceDocument: null, options: options)
|
||||
{
|
||||
TagHelperWriter = new RuntimeTagHelperWriter(),
|
||||
};
|
||||
|
||||
context.SetRenderChildren((n) =>
|
||||
{
|
||||
Assert.Same(node, n);
|
||||
context.CodeWriter.WriteLine(" var s = \"Inside\"");
|
||||
});
|
||||
var context = TestCodeRenderingContext.CreateRuntime();
|
||||
|
||||
// Act
|
||||
extension.WriteSection(context, node);
|
||||
|
||||
// Assert
|
||||
var expected = @"CreateSection(""MySection"", async() => {
|
||||
var s = ""Inside""
|
||||
Render Children
|
||||
}
|
||||
);
|
||||
";
|
||||
|
|
@ -58,6 +51,10 @@ namespace Microsoft.AspNetCore.Razor.Language.Extensions
|
|||
// Arrange
|
||||
var node = new SectionIntermediateNode()
|
||||
{
|
||||
Children =
|
||||
{
|
||||
new CSharpExpressionIntermediateNode(),
|
||||
},
|
||||
Name = "MySection"
|
||||
};
|
||||
|
||||
|
|
@ -66,26 +63,14 @@ namespace Microsoft.AspNetCore.Razor.Language.Extensions
|
|||
SectionMethodName = "CreateSection"
|
||||
};
|
||||
|
||||
var codeWriter = new CodeWriter();
|
||||
var nodeWriter = new RuntimeNodeWriter();
|
||||
var options = RazorCodeGenerationOptions.Create(false, 4, true, false);
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, nodeWriter, sourceDocument: null, options: options)
|
||||
{
|
||||
TagHelperWriter = new RuntimeTagHelperWriter(),
|
||||
};
|
||||
|
||||
context.SetRenderChildren((n) =>
|
||||
{
|
||||
Assert.Same(node, n);
|
||||
context.CodeWriter.WriteLine(" var s = \"Inside\"");
|
||||
});
|
||||
var context = TestCodeRenderingContext.CreateDesignTime();
|
||||
|
||||
// Act
|
||||
extension.WriteSection(context, node);
|
||||
|
||||
// Assert
|
||||
var expected = @"CreateSection(""MySection"", async(__razor_section_writer) => {
|
||||
var s = ""Inside""
|
||||
Render Children
|
||||
}
|
||||
);
|
||||
";
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using Microsoft.AspNetCore.Razor.Language.CodeGeneration;
|
||||
using Microsoft.AspNetCore.Razor.Language.Intermediate;
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.AspNetCore.Razor.Language.Extensions
|
||||
|
|
@ -12,29 +13,25 @@ namespace Microsoft.AspNetCore.Razor.Language.Extensions
|
|||
public void WriteTemplate_WritesTemplateCode()
|
||||
{
|
||||
// Arrange
|
||||
var node = new TemplateIntermediateNode();
|
||||
var node = new TemplateIntermediateNode()
|
||||
{
|
||||
Children =
|
||||
{
|
||||
new CSharpExpressionIntermediateNode()
|
||||
}
|
||||
};
|
||||
var extension = new TemplateTargetExtension()
|
||||
{
|
||||
TemplateTypeName = "global::TestTemplate"
|
||||
};
|
||||
|
||||
var codeWriter = new CodeWriter();
|
||||
|
||||
var nodeWriter = new RuntimeNodeWriter()
|
||||
{
|
||||
PushWriterMethod = "TestPushWriter",
|
||||
PopWriterMethod = "TestPopWriter"
|
||||
};
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, nodeWriter, sourceDocument: null, options: options)
|
||||
{
|
||||
TagHelperWriter = new RuntimeTagHelperWriter(),
|
||||
};
|
||||
|
||||
context.SetRenderChildren((n) =>
|
||||
{
|
||||
Assert.Same(node, n);
|
||||
context.CodeWriter.WriteLine(" var s = \"Inside\"");
|
||||
});
|
||||
var context = TestCodeRenderingContext.CreateRuntime(nodeWriter: nodeWriter);
|
||||
|
||||
// Act
|
||||
extension.WriteTemplate(context, node);
|
||||
|
|
@ -42,7 +39,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Extensions
|
|||
// Assert
|
||||
var expected = @"item => new global::TestTemplate(async(__razor_template_writer) => {
|
||||
TestPushWriter(__razor_template_writer);
|
||||
var s = ""Inside""
|
||||
Render Children
|
||||
TestPopWriter();
|
||||
}
|
||||
)";
|
||||
|
|
|
|||
|
|
@ -0,0 +1,99 @@
|
|||
// 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 Microsoft.AspNetCore.Razor.Language.Intermediate;
|
||||
|
||||
namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
||||
{
|
||||
public static class TestCodeRenderingContext
|
||||
{
|
||||
public static CodeRenderingContext CreateDesignTime(
|
||||
string newLineString = null,
|
||||
string suppressUniqueIds = "test",
|
||||
RazorSourceDocument source = null,
|
||||
IntermediateNodeWriter nodeWriter = null)
|
||||
{
|
||||
var codeWriter = new CodeWriter();
|
||||
var documentNode = new DocumentIntermediateNode();
|
||||
var options = RazorCodeGenerationOptions.CreateDesignTimeDefault();
|
||||
|
||||
if (source == null)
|
||||
{
|
||||
source = TestRazorSourceDocument.Create();
|
||||
}
|
||||
|
||||
var codeDocument = RazorCodeDocument.Create(source);
|
||||
if (newLineString != null)
|
||||
{
|
||||
codeDocument.Items[CodeRenderingContext.NewLineString] = newLineString;
|
||||
}
|
||||
|
||||
if (suppressUniqueIds != null)
|
||||
{
|
||||
codeDocument.Items[CodeRenderingContext.SuppressUniqueIds] = suppressUniqueIds;
|
||||
}
|
||||
|
||||
if (nodeWriter == null)
|
||||
{
|
||||
nodeWriter = new DesignTimeNodeWriter();
|
||||
}
|
||||
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, nodeWriter, codeDocument, documentNode, options);
|
||||
context.Visitor = new RenderChildrenVisitor(context);
|
||||
|
||||
return context;
|
||||
}
|
||||
|
||||
public static CodeRenderingContext CreateRuntime(
|
||||
string newLineString = null,
|
||||
string suppressUniqueIds = "test",
|
||||
RazorSourceDocument source = null,
|
||||
IntermediateNodeWriter nodeWriter = null)
|
||||
{
|
||||
var codeWriter = new CodeWriter();
|
||||
var documentNode = new DocumentIntermediateNode();
|
||||
var options = RazorCodeGenerationOptions.CreateDefault();
|
||||
|
||||
if (source == null)
|
||||
{
|
||||
source = TestRazorSourceDocument.Create();
|
||||
}
|
||||
|
||||
var codeDocument = RazorCodeDocument.Create(source);
|
||||
if (newLineString != null)
|
||||
{
|
||||
codeDocument.Items[CodeRenderingContext.NewLineString] = newLineString;
|
||||
}
|
||||
|
||||
if (suppressUniqueIds != null)
|
||||
{
|
||||
codeDocument.Items[CodeRenderingContext.SuppressUniqueIds] = suppressUniqueIds;
|
||||
}
|
||||
|
||||
if (nodeWriter == null)
|
||||
{
|
||||
nodeWriter = new RuntimeNodeWriter();
|
||||
}
|
||||
|
||||
var context = new DefaultCodeRenderingContext(codeWriter, nodeWriter, codeDocument, documentNode, options);
|
||||
context.Visitor = new RenderChildrenVisitor(context);
|
||||
|
||||
return context;
|
||||
}
|
||||
|
||||
private class RenderChildrenVisitor : IntermediateNodeVisitor
|
||||
{
|
||||
private readonly CodeRenderingContext _context;
|
||||
public RenderChildrenVisitor(CodeRenderingContext context)
|
||||
{
|
||||
_context = context;
|
||||
}
|
||||
|
||||
public override void VisitDefault(IntermediateNode node)
|
||||
{
|
||||
_context.CodeWriter.WriteLine("Render Children");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue