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