Moved TagHelperBinder from pass to a phase
This commit is contained in:
parent
eb3c47b6ca
commit
4bc1a76e22
|
|
@ -8,24 +8,23 @@ using Microsoft.AspNetCore.Razor.Language.Legacy;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Razor.Language
|
namespace Microsoft.AspNetCore.Razor.Language
|
||||||
{
|
{
|
||||||
internal class TagHelperBinderSyntaxTreePass : IRazorSyntaxTreePass
|
internal class DefaultRazorTagHelperBinderPhase : RazorEnginePhaseBase, IRazorTagHelperBinderPhase
|
||||||
{
|
{
|
||||||
private static HashSet<char> InvalidNonWhitespaceNameCharacters = new HashSet<char>(new[]
|
private static HashSet<char> InvalidNonWhitespaceNameCharacters = new HashSet<char>(new[]
|
||||||
{
|
{
|
||||||
'@', '!', '<', '/', '?', '[', '>', ']', '=', '"', '\'', '*'
|
'@', '!', '<', '/', '?', '[', '>', ']', '=', '"', '\'', '*'
|
||||||
});
|
});
|
||||||
|
|
||||||
public RazorEngine Engine { get; set; }
|
protected override void ExecuteCore(RazorCodeDocument codeDocument)
|
||||||
|
|
||||||
public int Order => 150;
|
|
||||||
|
|
||||||
public RazorSyntaxTree Execute(RazorCodeDocument codeDocument, RazorSyntaxTree syntaxTree)
|
|
||||||
{
|
{
|
||||||
|
var syntaxTree = codeDocument.GetSyntaxTree();
|
||||||
|
ThrowForMissingDependency(syntaxTree);
|
||||||
|
|
||||||
var resolver = Engine.Features.OfType<ITagHelperFeature>().FirstOrDefault()?.Resolver;
|
var resolver = Engine.Features.OfType<ITagHelperFeature>().FirstOrDefault()?.Resolver;
|
||||||
if (resolver == null)
|
if (resolver == null)
|
||||||
{
|
{
|
||||||
// No resolver, nothing to do.
|
// No resolver, nothing to do.
|
||||||
return syntaxTree;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// We need to find directives in all of the *imports* as well as in the main razor file
|
// We need to find directives in all of the *imports* as well as in the main razor file
|
||||||
|
|
@ -63,7 +62,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
if (errorSink.Errors.Count == 0 && errorList.Count == 0)
|
if (errorSink.Errors.Count == 0 && errorList.Count == 0)
|
||||||
{
|
{
|
||||||
// No TagHelpers and errors, no op.
|
// No TagHelpers and errors, no op.
|
||||||
return syntaxTree;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -80,7 +79,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
var diagnostics = CombineErrors(syntaxTree.Diagnostics, errorList);
|
var diagnostics = CombineErrors(syntaxTree.Diagnostics, errorList);
|
||||||
|
|
||||||
var newSyntaxTree = RazorSyntaxTree.Create(root, syntaxTree.Source, diagnostics, syntaxTree.Options);
|
var newSyntaxTree = RazorSyntaxTree.Create(root, syntaxTree.Source, diagnostics, syntaxTree.Options);
|
||||||
return newSyntaxTree;
|
codeDocument.SetSyntaxTree(newSyntaxTree);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Internal for testing
|
// Internal for testing
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
namespace Microsoft.AspNetCore.Razor.Language
|
||||||
|
{
|
||||||
|
public interface IRazorTagHelperBinderPhase : IRazorEnginePhase
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -53,6 +53,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
{
|
{
|
||||||
builder.Phases.Add(new DefaultRazorParsingPhase());
|
builder.Phases.Add(new DefaultRazorParsingPhase());
|
||||||
builder.Phases.Add(new DefaultRazorSyntaxTreePhase());
|
builder.Phases.Add(new DefaultRazorSyntaxTreePhase());
|
||||||
|
builder.Phases.Add(new DefaultRazorTagHelperBinderPhase());
|
||||||
builder.Phases.Add(new DefaultRazorIRLoweringPhase());
|
builder.Phases.Add(new DefaultRazorIRLoweringPhase());
|
||||||
builder.Phases.Add(new DefaultRazorDocumentClassifierPhase());
|
builder.Phases.Add(new DefaultRazorDocumentClassifierPhase());
|
||||||
builder.Phases.Add(new DefaultRazorDirectiveClassifierPhase());
|
builder.Phases.Add(new DefaultRazorDirectiveClassifierPhase());
|
||||||
|
|
@ -66,7 +67,6 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
// Syntax Tree passes
|
// Syntax Tree passes
|
||||||
builder.Features.Add(new DefaultDirectiveSyntaxTreePass());
|
builder.Features.Add(new DefaultDirectiveSyntaxTreePass());
|
||||||
builder.Features.Add(new HtmlNodeOptimizationPass());
|
builder.Features.Add(new HtmlNodeOptimizationPass());
|
||||||
builder.Features.Add(new TagHelperBinderSyntaxTreePass());
|
|
||||||
|
|
||||||
// IR Passes
|
// IR Passes
|
||||||
builder.Features.Add(new DefaultDocumentClassifierPass());
|
builder.Features.Add(new DefaultDocumentClassifierPass());
|
||||||
|
|
|
||||||
|
|
@ -3,15 +3,15 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
using Microsoft.AspNetCore.Razor.Language.Legacy;
|
using Microsoft.AspNetCore.Razor.Language.Legacy;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
using System.Linq;
|
|
||||||
using Moq;
|
using Moq;
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Razor.Language
|
namespace Microsoft.AspNetCore.Razor.Language
|
||||||
{
|
{
|
||||||
public class TagHelperBinderSyntaxTreePassTest
|
public class DefaultRazorTagHelperBinderPhaseTest
|
||||||
{
|
{
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Execute_CanHandleSingleLengthAddTagHelperDirective()
|
public void Execute_CanHandleSingleLengthAddTagHelperDirective()
|
||||||
|
|
@ -22,7 +22,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
builder.AddTagHelpers(new TagHelperDescriptor[0]);
|
builder.AddTagHelpers(new TagHelperDescriptor[0]);
|
||||||
});
|
});
|
||||||
|
|
||||||
var pass = new TagHelperBinderSyntaxTreePass()
|
var phase = new DefaultRazorTagHelperBinderPhase()
|
||||||
{
|
{
|
||||||
Engine = engine,
|
Engine = engine,
|
||||||
};
|
};
|
||||||
|
|
@ -47,11 +47,13 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
var sourceDocument = TestRazorSourceDocument.Create(content, fileName: null);
|
var sourceDocument = TestRazorSourceDocument.Create(content, fileName: null);
|
||||||
var codeDocument = RazorCodeDocument.Create(sourceDocument);
|
var codeDocument = RazorCodeDocument.Create(sourceDocument);
|
||||||
var originalTree = RazorSyntaxTree.Parse(sourceDocument);
|
var originalTree = RazorSyntaxTree.Parse(sourceDocument);
|
||||||
|
codeDocument.SetSyntaxTree(originalTree);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var rewrittenTree = pass.Execute(codeDocument, originalTree);
|
phase.Execute(codeDocument);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
var rewrittenTree = codeDocument.GetSyntaxTree();
|
||||||
Assert.Equal(expectedDiagnostics, rewrittenTree.Diagnostics);
|
Assert.Equal(expectedDiagnostics, rewrittenTree.Diagnostics);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -64,7 +66,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
builder.AddTagHelpers(new TagHelperDescriptor[0]);
|
builder.AddTagHelpers(new TagHelperDescriptor[0]);
|
||||||
});
|
});
|
||||||
|
|
||||||
var pass = new TagHelperBinderSyntaxTreePass()
|
var phase = new DefaultRazorTagHelperBinderPhase()
|
||||||
{
|
{
|
||||||
Engine = engine,
|
Engine = engine,
|
||||||
};
|
};
|
||||||
|
|
@ -89,11 +91,13 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
var sourceDocument = TestRazorSourceDocument.Create(content, fileName: null);
|
var sourceDocument = TestRazorSourceDocument.Create(content, fileName: null);
|
||||||
var codeDocument = RazorCodeDocument.Create(sourceDocument);
|
var codeDocument = RazorCodeDocument.Create(sourceDocument);
|
||||||
var originalTree = RazorSyntaxTree.Parse(sourceDocument);
|
var originalTree = RazorSyntaxTree.Parse(sourceDocument);
|
||||||
|
codeDocument.SetSyntaxTree(originalTree);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var rewrittenTree = pass.Execute(codeDocument, originalTree);
|
phase.Execute(codeDocument);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
var rewrittenTree = codeDocument.GetSyntaxTree();
|
||||||
Assert.Equal(expectedDiagnostics, rewrittenTree.Diagnostics);
|
Assert.Equal(expectedDiagnostics, rewrittenTree.Diagnostics);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -106,7 +110,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
builder.AddTagHelpers(new TagHelperDescriptor[0]);
|
builder.AddTagHelpers(new TagHelperDescriptor[0]);
|
||||||
});
|
});
|
||||||
|
|
||||||
var pass = new TagHelperBinderSyntaxTreePass()
|
var phase = new DefaultRazorTagHelperBinderPhase()
|
||||||
{
|
{
|
||||||
Engine = engine,
|
Engine = engine,
|
||||||
};
|
};
|
||||||
|
|
@ -131,11 +135,13 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
var sourceDocument = TestRazorSourceDocument.Create(content, fileName: null);
|
var sourceDocument = TestRazorSourceDocument.Create(content, fileName: null);
|
||||||
var codeDocument = RazorCodeDocument.Create(sourceDocument);
|
var codeDocument = RazorCodeDocument.Create(sourceDocument);
|
||||||
var originalTree = RazorSyntaxTree.Parse(sourceDocument);
|
var originalTree = RazorSyntaxTree.Parse(sourceDocument);
|
||||||
|
codeDocument.SetSyntaxTree(originalTree);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var rewrittenTree = pass.Execute(codeDocument, originalTree);
|
phase.Execute(codeDocument);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
var rewrittenTree = codeDocument.GetSyntaxTree();
|
||||||
Assert.Equal(expectedDiagnostics, rewrittenTree.Diagnostics);
|
Assert.Equal(expectedDiagnostics, rewrittenTree.Diagnostics);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -158,7 +164,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
var pass = new TagHelperBinderSyntaxTreePass()
|
var phase = new DefaultRazorTagHelperBinderPhase()
|
||||||
{
|
{
|
||||||
Engine = engine,
|
Engine = engine,
|
||||||
};
|
};
|
||||||
|
|
@ -166,11 +172,13 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
var sourceDocument = CreateTestSourceDocument();
|
var sourceDocument = CreateTestSourceDocument();
|
||||||
var codeDocument = RazorCodeDocument.Create(sourceDocument);
|
var codeDocument = RazorCodeDocument.Create(sourceDocument);
|
||||||
var originalTree = RazorSyntaxTree.Parse(sourceDocument);
|
var originalTree = RazorSyntaxTree.Parse(sourceDocument);
|
||||||
|
codeDocument.SetSyntaxTree(originalTree);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var rewrittenTree = pass.Execute(codeDocument, originalTree);
|
phase.Execute(codeDocument);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
var rewrittenTree = codeDocument.GetSyntaxTree();
|
||||||
Assert.Empty(rewrittenTree.Diagnostics);
|
Assert.Empty(rewrittenTree.Diagnostics);
|
||||||
Assert.Equal(3, rewrittenTree.Root.Children.Count);
|
Assert.Equal(3, rewrittenTree.Root.Children.Count);
|
||||||
var formTagHelper = Assert.IsType<TagHelperBlock>(rewrittenTree.Root.Children[2]);
|
var formTagHelper = Assert.IsType<TagHelperBlock>(rewrittenTree.Root.Children[2]);
|
||||||
|
|
@ -205,7 +213,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
builder.AddTagHelpers(new[] { descriptor });
|
builder.AddTagHelpers(new[] { descriptor });
|
||||||
});
|
});
|
||||||
|
|
||||||
var pass = new TagHelperBinderSyntaxTreePass()
|
var phase = new DefaultRazorTagHelperBinderPhase()
|
||||||
{
|
{
|
||||||
Engine = engine,
|
Engine = engine,
|
||||||
};
|
};
|
||||||
|
|
@ -218,11 +226,13 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
var sourceDocument = TestRazorSourceDocument.Create(content);
|
var sourceDocument = TestRazorSourceDocument.Create(content);
|
||||||
var codeDocument = RazorCodeDocument.Create(sourceDocument);
|
var codeDocument = RazorCodeDocument.Create(sourceDocument);
|
||||||
var originalTree = RazorSyntaxTree.Parse(sourceDocument);
|
var originalTree = RazorSyntaxTree.Parse(sourceDocument);
|
||||||
|
codeDocument.SetSyntaxTree(originalTree);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var rewrittenTree = pass.Execute(codeDocument, originalTree);
|
phase.Execute(codeDocument);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
var rewrittenTree = codeDocument.GetSyntaxTree();
|
||||||
Assert.Empty(rewrittenTree.Diagnostics);
|
Assert.Empty(rewrittenTree.Diagnostics);
|
||||||
Assert.Equal(3, rewrittenTree.Root.Children.Count);
|
Assert.Equal(3, rewrittenTree.Root.Children.Count);
|
||||||
|
|
||||||
|
|
@ -256,7 +266,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
builder.AddTagHelpers(new[] { descriptor });
|
builder.AddTagHelpers(new[] { descriptor });
|
||||||
});
|
});
|
||||||
|
|
||||||
var pass = new TagHelperBinderSyntaxTreePass()
|
var phase = new DefaultRazorTagHelperBinderPhase()
|
||||||
{
|
{
|
||||||
Engine = engine,
|
Engine = engine,
|
||||||
};
|
};
|
||||||
|
|
@ -269,11 +279,13 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
var sourceDocument = TestRazorSourceDocument.Create(content);
|
var sourceDocument = TestRazorSourceDocument.Create(content);
|
||||||
var codeDocument = RazorCodeDocument.Create(sourceDocument);
|
var codeDocument = RazorCodeDocument.Create(sourceDocument);
|
||||||
var originalTree = RazorSyntaxTree.Parse(sourceDocument);
|
var originalTree = RazorSyntaxTree.Parse(sourceDocument);
|
||||||
|
codeDocument.SetSyntaxTree(originalTree);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var rewrittenTree = pass.Execute(codeDocument, originalTree);
|
phase.Execute(codeDocument);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
var rewrittenTree = codeDocument.GetSyntaxTree();
|
||||||
Assert.Empty(rewrittenTree.Diagnostics);
|
Assert.Empty(rewrittenTree.Diagnostics);
|
||||||
Assert.Equal(3, rewrittenTree.Root.Children.Count);
|
Assert.Equal(3, rewrittenTree.Root.Children.Count);
|
||||||
|
|
||||||
|
|
@ -287,18 +299,20 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var engine = RazorEngine.Create();
|
var engine = RazorEngine.Create();
|
||||||
var pass = new TagHelperBinderSyntaxTreePass()
|
var phase = new DefaultRazorTagHelperBinderPhase()
|
||||||
{
|
{
|
||||||
Engine = engine,
|
Engine = engine,
|
||||||
};
|
};
|
||||||
var sourceDocument = CreateTestSourceDocument();
|
var sourceDocument = CreateTestSourceDocument();
|
||||||
var codeDocument = RazorCodeDocument.Create(sourceDocument);
|
var codeDocument = RazorCodeDocument.Create(sourceDocument);
|
||||||
var originalTree = RazorSyntaxTree.Parse(sourceDocument);
|
var originalTree = RazorSyntaxTree.Parse(sourceDocument);
|
||||||
|
codeDocument.SetSyntaxTree(originalTree);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var outputTree = pass.Execute(codeDocument, originalTree);
|
phase.Execute(codeDocument);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
var outputTree = codeDocument.GetSyntaxTree();
|
||||||
Assert.Empty(outputTree.Diagnostics);
|
Assert.Empty(outputTree.Diagnostics);
|
||||||
Assert.Same(originalTree, outputTree);
|
Assert.Same(originalTree, outputTree);
|
||||||
}
|
}
|
||||||
|
|
@ -311,18 +325,20 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
{
|
{
|
||||||
builder.Features.Add(Mock.Of<ITagHelperFeature>());
|
builder.Features.Add(Mock.Of<ITagHelperFeature>());
|
||||||
});
|
});
|
||||||
var pass = new TagHelperBinderSyntaxTreePass()
|
var phase = new DefaultRazorTagHelperBinderPhase()
|
||||||
{
|
{
|
||||||
Engine = engine,
|
Engine = engine,
|
||||||
};
|
};
|
||||||
var sourceDocument = CreateTestSourceDocument();
|
var sourceDocument = CreateTestSourceDocument();
|
||||||
var codeDocument = RazorCodeDocument.Create(sourceDocument);
|
var codeDocument = RazorCodeDocument.Create(sourceDocument);
|
||||||
var originalTree = RazorSyntaxTree.Parse(sourceDocument);
|
var originalTree = RazorSyntaxTree.Parse(sourceDocument);
|
||||||
|
codeDocument.SetSyntaxTree(originalTree);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var outputTree = pass.Execute(codeDocument, originalTree);
|
phase.Execute(codeDocument);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
var outputTree = codeDocument.GetSyntaxTree();
|
||||||
Assert.Empty(outputTree.Diagnostics);
|
Assert.Empty(outputTree.Diagnostics);
|
||||||
Assert.Same(originalTree, outputTree);
|
Assert.Same(originalTree, outputTree);
|
||||||
}
|
}
|
||||||
|
|
@ -336,7 +352,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
builder.Features.Add(new TestTagHelperFeature());
|
builder.Features.Add(new TestTagHelperFeature());
|
||||||
});
|
});
|
||||||
|
|
||||||
var pass = new TagHelperBinderSyntaxTreePass()
|
var phase = new DefaultRazorTagHelperBinderPhase()
|
||||||
{
|
{
|
||||||
Engine = engine,
|
Engine = engine,
|
||||||
};
|
};
|
||||||
|
|
@ -345,11 +361,13 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
var sourceDocument = TestRazorSourceDocument.Create("Hello, world");
|
var sourceDocument = TestRazorSourceDocument.Create("Hello, world");
|
||||||
var codeDocument = RazorCodeDocument.Create(sourceDocument);
|
var codeDocument = RazorCodeDocument.Create(sourceDocument);
|
||||||
var originalTree = RazorSyntaxTree.Parse(sourceDocument);
|
var originalTree = RazorSyntaxTree.Parse(sourceDocument);
|
||||||
|
codeDocument.SetSyntaxTree(originalTree);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var outputTree = pass.Execute(codeDocument, originalTree);
|
phase.Execute(codeDocument);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
var outputTree = codeDocument.GetSyntaxTree();
|
||||||
Assert.Empty(outputTree.Diagnostics);
|
Assert.Empty(outputTree.Diagnostics);
|
||||||
Assert.Same(originalTree, outputTree);
|
Assert.Same(originalTree, outputTree);
|
||||||
}
|
}
|
||||||
|
|
@ -363,7 +381,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
builder.Features.Add(new TestTagHelperFeature());
|
builder.Features.Add(new TestTagHelperFeature());
|
||||||
});
|
});
|
||||||
|
|
||||||
var pass = new TagHelperBinderSyntaxTreePass()
|
var phase = new DefaultRazorTagHelperBinderPhase()
|
||||||
{
|
{
|
||||||
Engine = engine,
|
Engine = engine,
|
||||||
};
|
};
|
||||||
|
|
@ -372,9 +390,10 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
var sourceDocument = TestRazorSourceDocument.Create("Hello, world");
|
var sourceDocument = TestRazorSourceDocument.Create("Hello, world");
|
||||||
var codeDocument = RazorCodeDocument.Create(sourceDocument);
|
var codeDocument = RazorCodeDocument.Create(sourceDocument);
|
||||||
var originalTree = RazorSyntaxTree.Parse(sourceDocument);
|
var originalTree = RazorSyntaxTree.Parse(sourceDocument);
|
||||||
|
codeDocument.SetSyntaxTree(originalTree);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var outputTree = pass.Execute(codeDocument, originalTree);
|
phase.Execute(codeDocument);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
var context = codeDocument.GetTagHelperContext();
|
var context = codeDocument.GetTagHelperContext();
|
||||||
|
|
@ -393,7 +412,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
builder.Features.Add(Mock.Of<ITagHelperFeature>(f => f.Resolver == resolver));
|
builder.Features.Add(Mock.Of<ITagHelperFeature>(f => f.Resolver == resolver));
|
||||||
});
|
});
|
||||||
|
|
||||||
var pass = new TagHelperBinderSyntaxTreePass()
|
var phase = new DefaultRazorTagHelperBinderPhase()
|
||||||
{
|
{
|
||||||
Engine = engine,
|
Engine = engine,
|
||||||
};
|
};
|
||||||
|
|
@ -408,11 +427,13 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
originalTree.Source,
|
originalTree.Source,
|
||||||
new[] { initialError },
|
new[] { initialError },
|
||||||
originalTree.Options);
|
originalTree.Options);
|
||||||
|
codeDocument.SetSyntaxTree(erroredOriginalTree);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var outputTree = pass.Execute(codeDocument, erroredOriginalTree);
|
phase.Execute(codeDocument);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
var outputTree = codeDocument.GetSyntaxTree();
|
||||||
Assert.Empty(originalTree.Diagnostics);
|
Assert.Empty(originalTree.Diagnostics);
|
||||||
Assert.NotSame(erroredOriginalTree, outputTree);
|
Assert.NotSame(erroredOriginalTree, outputTree);
|
||||||
Assert.Equal(new[] { initialError, resolverError }, outputTree.Diagnostics);
|
Assert.Equal(new[] { initialError, resolverError }, outputTree.Diagnostics);
|
||||||
|
|
@ -431,7 +452,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
|
|
||||||
var descriptorError = RazorDiagnosticFactory.CreateTagHelper_InvalidTargetedTagNameNullOrWhitespace();
|
var descriptorError = RazorDiagnosticFactory.CreateTagHelper_InvalidTargetedTagNameNullOrWhitespace();
|
||||||
|
|
||||||
var pass = new TagHelperBinderSyntaxTreePass()
|
var phase = new DefaultRazorTagHelperBinderPhase()
|
||||||
{
|
{
|
||||||
Engine = engine,
|
Engine = engine,
|
||||||
};
|
};
|
||||||
|
|
@ -439,11 +460,13 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
var sourceDocument = CreateTestSourceDocument();
|
var sourceDocument = CreateTestSourceDocument();
|
||||||
var codeDocument = RazorCodeDocument.Create(sourceDocument);
|
var codeDocument = RazorCodeDocument.Create(sourceDocument);
|
||||||
var originalTree = RazorSyntaxTree.Parse(sourceDocument);
|
var originalTree = RazorSyntaxTree.Parse(sourceDocument);
|
||||||
|
codeDocument.SetSyntaxTree(originalTree);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var outputTree = pass.Execute(codeDocument, originalTree);
|
phase.Execute(codeDocument);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
var outputTree = codeDocument.GetSyntaxTree();
|
||||||
Assert.Empty(originalTree.Diagnostics);
|
Assert.Empty(originalTree.Diagnostics);
|
||||||
Assert.Equal(new[] { resolverError, descriptorError }, outputTree.Diagnostics);
|
Assert.Equal(new[] { resolverError, descriptorError }, outputTree.Diagnostics);
|
||||||
}
|
}
|
||||||
|
|
@ -467,7 +490,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
var pass = new TagHelperBinderSyntaxTreePass()
|
var phase = new DefaultRazorTagHelperBinderPhase()
|
||||||
{
|
{
|
||||||
Engine = engine,
|
Engine = engine,
|
||||||
};
|
};
|
||||||
|
|
@ -490,11 +513,13 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
length: 4));
|
length: 4));
|
||||||
|
|
||||||
var erroredOriginalTree = RazorSyntaxTree.Create(originalTree.Root, originalTree.Source, new[] { initialError }, originalTree.Options);
|
var erroredOriginalTree = RazorSyntaxTree.Create(originalTree.Root, originalTree.Source, new[] { initialError }, originalTree.Options);
|
||||||
|
codeDocument.SetSyntaxTree(erroredOriginalTree);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var outputTree = pass.Execute(codeDocument, erroredOriginalTree);
|
phase.Execute(codeDocument);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
var outputTree = codeDocument.GetSyntaxTree();
|
||||||
Assert.Empty(originalTree.Diagnostics);
|
Assert.Empty(originalTree.Diagnostics);
|
||||||
Assert.NotSame(erroredOriginalTree, outputTree);
|
Assert.NotSame(erroredOriginalTree, outputTree);
|
||||||
Assert.Equal(new[] { initialError, expectedRewritingError }, outputTree.Diagnostics);
|
Assert.Equal(new[] { initialError, expectedRewritingError }, outputTree.Diagnostics);
|
||||||
|
|
@ -511,7 +536,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var errorSink = new ErrorSink();
|
var errorSink = new ErrorSink();
|
||||||
var pass = new TagHelperBinderSyntaxTreePass();
|
var phase = new DefaultRazorTagHelperBinderPhase();
|
||||||
|
|
||||||
var directive = new TagHelperDirectiveDescriptor()
|
var directive = new TagHelperDirectiveDescriptor()
|
||||||
{
|
{
|
||||||
|
|
@ -523,7 +548,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
var expected = new SourceLocation(assemblyLocation, 0, assemblyLocation);
|
var expected = new SourceLocation(assemblyLocation, 0, assemblyLocation);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = pass.ParseAddOrRemoveDirective(directive, errorSink);
|
var result = phase.ParseAddOrRemoveDirective(directive, errorSink);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Empty(errorSink.Errors);
|
Assert.Empty(errorSink.Errors);
|
||||||
|
|
@ -733,12 +758,12 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
// Arrange
|
// Arrange
|
||||||
var errorSink = new ErrorSink();
|
var errorSink = new ErrorSink();
|
||||||
|
|
||||||
var pass = new TagHelperBinderSyntaxTreePass();
|
var phase = new DefaultRazorTagHelperBinderPhase();
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
foreach (var directive in ((IEnumerable<TagHelperDirectiveDescriptor>)directives))
|
foreach (var directive in ((IEnumerable<TagHelperDirectiveDescriptor>)directives))
|
||||||
{
|
{
|
||||||
Assert.False(pass.IsValidTagHelperPrefix(directive.DirectiveText, directive.Location, errorSink));
|
Assert.False(phase.IsValidTagHelperPrefix(directive.DirectiveText, directive.Location, errorSink));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
|
@ -883,11 +908,11 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var errorSink = new ErrorSink();
|
var errorSink = new ErrorSink();
|
||||||
var pass = new TagHelperBinderSyntaxTreePass();
|
var phase = new DefaultRazorTagHelperBinderPhase();
|
||||||
var document = RazorCodeDocument.Create(new DefaultRazorSourceDocument("Test content", encoding: Encoding.UTF8, fileName: "TestFile"));
|
var document = RazorCodeDocument.Create(new DefaultRazorSourceDocument("Test content", encoding: Encoding.UTF8, fileName: "TestFile"));
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var prefix = pass.ProcessTagHelperPrefix(((IEnumerable<TagHelperDirectiveDescriptor>)directiveDescriptors).ToList(), document, errorSink);
|
var prefix = phase.ProcessTagHelperPrefix(((IEnumerable<TagHelperDirectiveDescriptor>)directiveDescriptors).ToList(), document, errorSink);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Empty(errorSink.Errors);
|
Assert.Empty(errorSink.Errors);
|
||||||
|
|
@ -1104,12 +1129,12 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
// Arrange
|
// Arrange
|
||||||
var errorSink = new ErrorSink();
|
var errorSink = new ErrorSink();
|
||||||
|
|
||||||
var pass = new TagHelperBinderSyntaxTreePass();
|
var phase = new DefaultRazorTagHelperBinderPhase();
|
||||||
|
|
||||||
var expected = (IEnumerable<TagHelperDescriptor>)expectedDescriptors;
|
var expected = (IEnumerable<TagHelperDescriptor>)expectedDescriptors;
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var results = pass.ProcessDirectives(
|
var results = phase.ProcessDirectives(
|
||||||
new List<TagHelperDirectiveDescriptor>((IEnumerable<TagHelperDirectiveDescriptor>)directiveDescriptors),
|
new List<TagHelperDirectiveDescriptor>((IEnumerable<TagHelperDirectiveDescriptor>)directiveDescriptors),
|
||||||
new List<TagHelperDescriptor>((IEnumerable<TagHelperDescriptor>)tagHelpers),
|
new List<TagHelperDescriptor>((IEnumerable<TagHelperDescriptor>)tagHelpers),
|
||||||
errorSink);
|
errorSink);
|
||||||
|
|
@ -1272,10 +1297,10 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
// Arrange
|
// Arrange
|
||||||
var errorSink = new ErrorSink();
|
var errorSink = new ErrorSink();
|
||||||
|
|
||||||
var pass = new TagHelperBinderSyntaxTreePass();
|
var phase = new DefaultRazorTagHelperBinderPhase();
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var results = pass.ProcessDirectives(
|
var results = phase.ProcessDirectives(
|
||||||
new List<TagHelperDirectiveDescriptor>((IEnumerable<TagHelperDirectiveDescriptor>)directiveDescriptors),
|
new List<TagHelperDirectiveDescriptor>((IEnumerable<TagHelperDirectiveDescriptor>)directiveDescriptors),
|
||||||
new List<TagHelperDescriptor>((IEnumerable<TagHelperDescriptor>)tagHelpers),
|
new List<TagHelperDescriptor>((IEnumerable<TagHelperDescriptor>)tagHelpers),
|
||||||
errorSink);
|
errorSink);
|
||||||
|
|
@ -1311,7 +1336,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var errorSink = new ErrorSink();
|
var errorSink = new ErrorSink();
|
||||||
var pass = new TagHelperBinderSyntaxTreePass();
|
var phase = new DefaultRazorTagHelperBinderPhase();
|
||||||
|
|
||||||
var directives = new[]
|
var directives = new[]
|
||||||
{
|
{
|
||||||
|
|
@ -1323,7 +1348,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
};
|
};
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var results = pass.ProcessDirectives(
|
var results = phase.ProcessDirectives(
|
||||||
directives,
|
directives,
|
||||||
new[] { Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor },
|
new[] { Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor },
|
||||||
errorSink);
|
errorSink);
|
||||||
|
|
@ -1352,7 +1377,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var errorSink = new ErrorSink();
|
var errorSink = new ErrorSink();
|
||||||
var pass = new TagHelperBinderSyntaxTreePass();
|
var phase = new DefaultRazorTagHelperBinderPhase();
|
||||||
|
|
||||||
var directive = new TagHelperDirectiveDescriptor()
|
var directive = new TagHelperDirectiveDescriptor()
|
||||||
{
|
{
|
||||||
|
|
@ -1367,7 +1392,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
directiveText);
|
directiveText);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = pass.ParseAddOrRemoveDirective(directive, errorSink);
|
var result = phase.ParseAddOrRemoveDirective(directive, errorSink);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Null(result);
|
Assert.Null(result);
|
||||||
|
|
@ -151,7 +151,6 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
feature => Assert.IsType<DefaultRazorTargetExtensionFeature>(feature),
|
feature => Assert.IsType<DefaultRazorTargetExtensionFeature>(feature),
|
||||||
feature => Assert.IsType<DefaultDirectiveSyntaxTreePass>(feature),
|
feature => Assert.IsType<DefaultDirectiveSyntaxTreePass>(feature),
|
||||||
feature => Assert.IsType<HtmlNodeOptimizationPass>(feature),
|
feature => Assert.IsType<HtmlNodeOptimizationPass>(feature),
|
||||||
feature => Assert.IsType<TagHelperBinderSyntaxTreePass>(feature),
|
|
||||||
feature => Assert.IsType<DefaultDocumentClassifierPass>(feature),
|
feature => Assert.IsType<DefaultDocumentClassifierPass>(feature),
|
||||||
feature => Assert.IsType<DefaultDirectiveIRPass>(feature),
|
feature => Assert.IsType<DefaultDirectiveIRPass>(feature),
|
||||||
feature => Assert.IsType<DirectiveRemovalIROptimizationPass>(feature),
|
feature => Assert.IsType<DirectiveRemovalIROptimizationPass>(feature),
|
||||||
|
|
@ -165,6 +164,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
phases,
|
phases,
|
||||||
phase => Assert.IsType<DefaultRazorParsingPhase>(phase),
|
phase => Assert.IsType<DefaultRazorParsingPhase>(phase),
|
||||||
phase => Assert.IsType<DefaultRazorSyntaxTreePhase>(phase),
|
phase => Assert.IsType<DefaultRazorSyntaxTreePhase>(phase),
|
||||||
|
phase => Assert.IsType<DefaultRazorTagHelperBinderPhase>(phase),
|
||||||
phase => Assert.IsType<DefaultRazorIRLoweringPhase>(phase),
|
phase => Assert.IsType<DefaultRazorIRLoweringPhase>(phase),
|
||||||
phase => Assert.IsType<DefaultRazorDocumentClassifierPhase>(phase),
|
phase => Assert.IsType<DefaultRazorDocumentClassifierPhase>(phase),
|
||||||
phase => Assert.IsType<DefaultRazorDirectiveClassifierPhase>(phase),
|
phase => Assert.IsType<DefaultRazorDirectiveClassifierPhase>(phase),
|
||||||
|
|
@ -180,7 +180,6 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
feature => Assert.IsType<DefaultRazorTargetExtensionFeature>(feature),
|
feature => Assert.IsType<DefaultRazorTargetExtensionFeature>(feature),
|
||||||
feature => Assert.IsType<DefaultDirectiveSyntaxTreePass>(feature),
|
feature => Assert.IsType<DefaultDirectiveSyntaxTreePass>(feature),
|
||||||
feature => Assert.IsType<HtmlNodeOptimizationPass>(feature),
|
feature => Assert.IsType<HtmlNodeOptimizationPass>(feature),
|
||||||
feature => Assert.IsType<TagHelperBinderSyntaxTreePass>(feature),
|
|
||||||
feature => Assert.IsType<DefaultDocumentClassifierPass>(feature),
|
feature => Assert.IsType<DefaultDocumentClassifierPass>(feature),
|
||||||
feature => Assert.IsType<DefaultDirectiveIRPass>(feature),
|
feature => Assert.IsType<DefaultDirectiveIRPass>(feature),
|
||||||
feature => Assert.IsType<DirectiveRemovalIROptimizationPass>(feature),
|
feature => Assert.IsType<DirectiveRemovalIROptimizationPass>(feature),
|
||||||
|
|
@ -195,6 +194,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
phases,
|
phases,
|
||||||
phase => Assert.IsType<DefaultRazorParsingPhase>(phase),
|
phase => Assert.IsType<DefaultRazorParsingPhase>(phase),
|
||||||
phase => Assert.IsType<DefaultRazorSyntaxTreePhase>(phase),
|
phase => Assert.IsType<DefaultRazorSyntaxTreePhase>(phase),
|
||||||
|
phase => Assert.IsType<DefaultRazorTagHelperBinderPhase>(phase),
|
||||||
phase => Assert.IsType<DefaultRazorIRLoweringPhase>(phase),
|
phase => Assert.IsType<DefaultRazorIRLoweringPhase>(phase),
|
||||||
phase => Assert.IsType<DefaultRazorDocumentClassifierPhase>(phase),
|
phase => Assert.IsType<DefaultRazorDocumentClassifierPhase>(phase),
|
||||||
phase => Assert.IsType<DefaultRazorDirectiveClassifierPhase>(phase),
|
phase => Assert.IsType<DefaultRazorDirectiveClassifierPhase>(phase),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue