MalformedRequiredAttribute_Descriptors =
+ public static readonly TagHelperCollection MalformedRequiredAttribute_TagHelpers =
[
TagHelperDescriptorBuilder.CreateTagHelper("pTagHelper", "SomeAssembly")
.TagMatchingRuleDescriptor(rule =>
@@ -1229,71 +1228,71 @@ public void NestedRequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly10()
[Fact]
public void RequiredAttributeDescriptorsCreateMalformedTagHelperBlocksCorrectly1()
{
- EvaluateData(MalformedRequiredAttribute_Descriptors, "");
+ EvaluateData(MalformedRequiredAttribute_TagHelpers, "");
}
[Fact]
public void RequiredAttributeDescriptorsCreateMalformedTagHelperBlocksCorrectly8()
{
- EvaluateData(MalformedRequiredAttribute_Descriptors, "
");
+ EvaluateData(MalformedRequiredAttribute_TagHelpers, "
");
}
[Fact]
public void RequiredAttributeDescriptorsCreateMalformedTagHelperBlocksCorrectly9()
{
- EvaluateData(MalformedRequiredAttribute_Descriptors, "
PrefixedTagHelperColon_Descriptors =
+ public static readonly TagHelperCollection PrefixedTagHelperColon_TagHelpers =
[
TagHelperDescriptorBuilder.CreateTagHelper("mythTagHelper", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("myth"))
@@ -1308,7 +1307,7 @@ public void RequiredAttributeDescriptorsCreateMalformedTagHelperBlocksCorrectly1
.Build()
];
- public static ImmutableArray PrefixedTagHelperCatchAll_Descriptors =
+ public static readonly TagHelperCollection PrefixedTagHelperCatchAll_TagHelpers =
[
TagHelperDescriptorBuilder.CreateTagHelper("mythTagHelper", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("*"))
@@ -1318,67 +1317,67 @@ public void RequiredAttributeDescriptorsCreateMalformedTagHelperBlocksCorrectly1
[Fact]
public void AllowsPrefixedTagHelpers1()
{
- EvaluateData(PrefixedTagHelperCatchAll_Descriptors, "", tagHelperPrefix: "th:");
+ EvaluateData(PrefixedTagHelperCatchAll_TagHelpers, "", tagHelperPrefix: "th:");
}
[Fact]
public void AllowsPrefixedTagHelpers2()
{
- EvaluateData(PrefixedTagHelperCatchAll_Descriptors, "words and spaces", tagHelperPrefix: "th:");
+ EvaluateData(PrefixedTagHelperCatchAll_TagHelpers, "words and spaces", tagHelperPrefix: "th:");
}
[Fact]
public void AllowsPrefixedTagHelpers3()
{
- EvaluateData(PrefixedTagHelperColon_Descriptors, "", tagHelperPrefix: "th:");
+ EvaluateData(PrefixedTagHelperColon_TagHelpers, "", tagHelperPrefix: "th:");
}
[Fact]
public void AllowsPrefixedTagHelpers4()
{
- EvaluateData(PrefixedTagHelperColon_Descriptors, "", tagHelperPrefix: "th:");
+ EvaluateData(PrefixedTagHelperColon_TagHelpers, "", tagHelperPrefix: "th:");
}
[Fact]
public void AllowsPrefixedTagHelpers5()
{
- EvaluateData(PrefixedTagHelperColon_Descriptors, "", tagHelperPrefix: "th:");
+ EvaluateData(PrefixedTagHelperColon_TagHelpers, "", tagHelperPrefix: "th:");
}
[Fact]
public void AllowsPrefixedTagHelpers6()
{
- EvaluateData(PrefixedTagHelperColon_Descriptors, "", tagHelperPrefix: "th:");
+ EvaluateData(PrefixedTagHelperColon_TagHelpers, "", tagHelperPrefix: "th:");
}
[Fact]
public void AllowsPrefixedTagHelpers7()
{
- EvaluateData(PrefixedTagHelperColon_Descriptors, "!th:myth>", tagHelperPrefix: "th:");
+ EvaluateData(PrefixedTagHelperColon_TagHelpers, "!th:myth>", tagHelperPrefix: "th:");
}
[Fact]
public void AllowsPrefixedTagHelpers8()
{
- EvaluateData(PrefixedTagHelperColon_Descriptors, "", tagHelperPrefix: "th:");
+ EvaluateData(PrefixedTagHelperColon_TagHelpers, "", tagHelperPrefix: "th:");
}
[Fact]
public void AllowsPrefixedTagHelpers9()
{
- EvaluateData(PrefixedTagHelperColon_Descriptors, "", tagHelperPrefix: "th:");
+ EvaluateData(PrefixedTagHelperColon_TagHelpers, "", tagHelperPrefix: "th:");
}
[Fact]
public void AllowsPrefixedTagHelpers10()
{
- EvaluateData(PrefixedTagHelperColon_Descriptors, "words and spaces", tagHelperPrefix: "th:");
+ EvaluateData(PrefixedTagHelperColon_TagHelpers, "words and spaces", tagHelperPrefix: "th:");
}
[Fact]
public void AllowsPrefixedTagHelpers11()
{
- EvaluateData(PrefixedTagHelperColon_Descriptors, "", tagHelperPrefix: "th:");
+ EvaluateData(PrefixedTagHelperColon_TagHelpers, "", tagHelperPrefix: "th:");
}
[Fact]
@@ -1903,7 +1902,7 @@ public void HandlesNonTagHelperStartAndEndVoidTags_Correctly()
RunParseTreeRewriterTest("Foo");
}
- public static ImmutableArray CaseSensitive_Descriptors =
+ public static readonly TagHelperCollection CaseSensitive_TagHelpers =
[
TagHelperDescriptorBuilder.CreateTagHelper("pTagHelper", "SomeAssembly")
.SetCaseSensitive()
@@ -1928,30 +1927,30 @@ public void HandlesNonTagHelperStartAndEndVoidTags_Correctly()
[Fact]
public void HandlesCaseSensitiveTagHelpersCorrectly1()
{
- EvaluateData(CaseSensitive_Descriptors, "");
+ EvaluateData(CaseSensitive_TagHelpers, "");
}
[Fact]
public void HandlesCaseSensitiveTagHelpersCorrectly2()
{
- EvaluateData(CaseSensitive_Descriptors, "");
+ EvaluateData(CaseSensitive_TagHelpers, "");
}
[Fact]
public void HandlesCaseSensitiveTagHelpersCorrectly3()
{
- EvaluateData(CaseSensitive_Descriptors, "");
+ EvaluateData(CaseSensitive_TagHelpers, "");
}
[Fact]
public void HandlesCaseSensitiveTagHelpersCorrectly4()
{
- EvaluateData(CaseSensitive_Descriptors, "");
+ EvaluateData(CaseSensitive_TagHelpers, "");
}
[Fact]
public void HandlesCaseSensitiveTagHelpersCorrectly5()
{
- EvaluateData(CaseSensitive_Descriptors, "");
+ EvaluateData(CaseSensitive_TagHelpers, "");
}
}
diff --git a/src/Compiler/Microsoft.AspNetCore.Razor.Language/legacyTest/Legacy/TagHelperRewritingTestBase.cs b/src/Compiler/Microsoft.AspNetCore.Razor.Language/legacyTest/Legacy/TagHelperRewritingTestBase.cs
index 84b85331014..06dc27ec4d4 100644
--- a/src/Compiler/Microsoft.AspNetCore.Razor.Language/legacyTest/Legacy/TagHelperRewritingTestBase.cs
+++ b/src/Compiler/Microsoft.AspNetCore.Razor.Language/legacyTest/Legacy/TagHelperRewritingTestBase.cs
@@ -1,10 +1,7 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-#nullable disable
-
using System;
-using System.Collections.Generic;
using System.Collections.Immutable;
using Xunit;
@@ -12,39 +9,38 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy;
public class TagHelperRewritingTestBase() : ParserTestBase(layer: TestProject.Layer.Compiler, validateSpanEditHandlers: true, useLegacyTokenizer: true)
{
- internal void RunParseTreeRewriterTest(string documentContent, params string[] tagNames)
+ internal void RunParseTreeRewriterTest(string documentContent, params ImmutableArray tagNames)
{
- var descriptors = BuildDescriptors(tagNames);
+ var tagHelpers = BuildTagHelpers(tagNames);
- EvaluateData(descriptors, documentContent);
+ EvaluateData(tagHelpers, documentContent);
}
- internal ImmutableArray BuildDescriptors(params string[] tagNames)
+ internal static TagHelperCollection BuildTagHelpers(params ImmutableArray tagNames)
{
- var descriptors = new List();
-
- foreach (var tagName in tagNames)
+ return TagHelperCollection.Build(tagNames, (ref builder, tagNames) =>
{
- var descriptor = TagHelperDescriptorBuilder.CreateTagHelper(tagName + "taghelper", "SomeAssembly")
- .TagMatchingRuleDescriptor(rule => rule.RequireTagName(tagName))
- .Build();
- descriptors.Add(descriptor);
- }
-
- return descriptors.ToImmutableArray();
+ foreach (var tagName in tagNames)
+ {
+ var tagHelper = TagHelperDescriptorBuilder.CreateTagHelper(tagName + "taghelper", "SomeAssembly")
+ .TagMatchingRuleDescriptor(rule => rule.RequireTagName(tagName))
+ .Build();
+ builder.Add(tagHelper);
+ }
+ });
}
internal void EvaluateData(
- ImmutableArray descriptors,
+ TagHelperCollection tagHelpers,
string documentContent,
- string tagHelperPrefix = null,
- RazorLanguageVersion languageVersion = null,
+ string? tagHelperPrefix = null,
+ RazorLanguageVersion? languageVersion = null,
RazorFileKind? fileKind = null,
- Action configureParserOptions = null)
+ Action? configureParserOptions = null)
{
var syntaxTree = ParseDocument(languageVersion, documentContent, directives: default, fileKind: fileKind, configureParserOptions: configureParserOptions);
- var binder = new TagHelperBinder(tagHelperPrefix, descriptors);
+ var binder = new TagHelperBinder(tagHelperPrefix, tagHelpers);
var rewrittenTree = TagHelperParseTreeRewriter.Rewrite(syntaxTree, binder);
Assert.Equal(syntaxTree.Root.Width, rewrittenTree.Root.Width);
diff --git a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/DefaultRazorProjectEngineIntegrationTest.cs b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/DefaultRazorProjectEngineIntegrationTest.cs
index d9952f763f7..bd32906760a 100644
--- a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/DefaultRazorProjectEngineIntegrationTest.cs
+++ b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/DefaultRazorProjectEngineIntegrationTest.cs
@@ -124,11 +124,11 @@ public void Process_WithImportsAndTagHelpers_SetsOnCodeDocument()
var projectItem = new TestRazorProjectItem("Index.cshtml");
var importItem = new TestRazorProjectItem("_import.cshtml");
var expectedImports = ImmutableArray.Create(RazorSourceDocument.ReadFrom(importItem));
- var expectedTagHelpers = new[]
- {
+ TagHelperCollection expectedTagHelpers =
+ [
TagHelperDescriptorBuilder.CreateTagHelper("TestTagHelper", "TestAssembly").Build(),
TagHelperDescriptorBuilder.CreateTagHelper("Test2TagHelper", "TestAssembly").Build(),
- };
+ ];
var projectEngine = RazorProjectEngine.Create(RazorConfiguration.Default, TestRazorProjectFileSystem.Empty);
@@ -243,11 +243,11 @@ public void ProcessDesignTime_WithImportsAndTagHelpers_SetsOnCodeDocument()
var projectItem = new TestRazorProjectItem("Index.cshtml");
var importItem = new TestRazorProjectItem("_import.cshtml");
var expectedImports = ImmutableArray.Create(RazorSourceDocument.ReadFrom(importItem));
- var expectedTagHelpers = new[]
- {
+ TagHelperCollection expectedTagHelpers =
+ [
TagHelperDescriptorBuilder.CreateTagHelper("TestTagHelper", "TestAssembly").Build(),
TagHelperDescriptorBuilder.CreateTagHelper("Test2TagHelper", "TestAssembly").Build(),
- };
+ ];
var projectEngine = RazorProjectEngine.Create(RazorConfiguration.Default, TestRazorProjectFileSystem.Empty);
diff --git a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/DefaultRazorTagHelperBinderPhaseTest.cs b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/DefaultRazorTagHelperBinderPhaseTest.cs
index b6cd1878a71..fc2a4bdea95 100644
--- a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/DefaultRazorTagHelperBinderPhaseTest.cs
+++ b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/DefaultRazorTagHelperBinderPhaseTest.cs
@@ -124,7 +124,7 @@ public void Execute_RewritesTagHelpers()
var projectEngine = RazorProjectEngine.Create(builder =>
{
- builder.AddTagHelpers(tagHelper1, tagHelper2);
+ builder.SetTagHelpers(tagHelper1, tagHelper2);
});
var source = CreateTestSourceDocument();
@@ -194,7 +194,7 @@ public void Execute_NullTagHelperDescriptorsFromCodeDocument_FallsBackToTagHelpe
var projectEngine = RazorProjectEngine.Create(builder =>
{
- builder.AddTagHelpers(tagHelper1, tagHelper2);
+ builder.SetTagHelpers(tagHelper1, tagHelper2);
});
var source = CreateTestSourceDocument();
@@ -232,7 +232,7 @@ public void Execute_EmptyTagHelperDescriptorsFromCodeDocument_DoesNotFallbackToT
var projectEngine = RazorProjectEngine.Create(builder =>
{
- builder.AddTagHelpers(tagHelper1, tagHelper2);
+ builder.SetTagHelpers(tagHelper1, tagHelper2);
});
var source = CreateTestSourceDocument();
@@ -347,7 +347,7 @@ public void Execute_TagHelpersFromCodeDocumentAndFeature_PrefersCodeDocument()
var projectEngine = RazorProjectEngine.Create(builder =>
{
- builder.AddTagHelpers(featureTagHelper);
+ builder.SetTagHelpers(featureTagHelper);
});
var source = CreateTestSourceDocument();
@@ -454,7 +454,7 @@ public void Execute_CombinesErrorsOnRewritingErrors()
var projectEngine = RazorProjectEngine.Create(builder =>
{
- builder.AddTagHelpers(tagHelper1, tagHelper2);
+ builder.SetTagHelpers(tagHelper1, tagHelper2);
});
var content =
@@ -594,7 +594,7 @@ public void DirectiveVisitor_ExtractsPrefixFromSyntaxTree(
var parser = new RazorParser();
var syntaxTree = parser.Parse(sourceDocument);
var visitor = new DefaultRazorTagHelperContextDiscoveryPhase.TagHelperDirectiveVisitor();
- visitor.Initialize(descriptors: [], sourceDocument.FilePath);
+ visitor.Initialize(tagHelpers: [], sourceDocument.FilePath);
// Act
visitor.Visit(syntaxTree.Root);
@@ -603,157 +603,142 @@ public void DirectiveVisitor_ExtractsPrefixFromSyntaxTree(
Assert.Equal(expectedPrefix, visitor.TagHelperPrefix);
}
- public static TheoryData ProcessTagHelperMatchesData
- {
- get
+ public static TheoryData ProcessTagHelperMatchesData
+ // source, taghelpers, expected descriptors
+ => new()
{
- // source, taghelpers, expected descriptors
- return new TheoryData
{
- {
- $@"
+ $@"
@addTagHelper *, {AssemblyA}",
- new [] { Valid_PlainTagHelperDescriptor, },
- new [] { Valid_PlainTagHelperDescriptor }
- },
- {
- $@"
+ [Valid_PlainTagHelperDescriptor],
+ [Valid_PlainTagHelperDescriptor]
+ },
+ {
+ $@"
@addTagHelper *, {AssemblyA}
@addTagHelper *, {AssemblyB}",
- new [] { Valid_PlainTagHelperDescriptor, String_TagHelperDescriptor },
- new [] { Valid_PlainTagHelperDescriptor, String_TagHelperDescriptor }
- },
- {
- $@"
+ [Valid_PlainTagHelperDescriptor, String_TagHelperDescriptor],
+ [Valid_PlainTagHelperDescriptor, String_TagHelperDescriptor]
+ },
+ {
+ $@"
@addTagHelper *, {AssemblyA}
@removeTagHelper *, {AssemblyB}",
- new [] { Valid_PlainTagHelperDescriptor, String_TagHelperDescriptor },
- new [] { Valid_PlainTagHelperDescriptor }
- },
- {
- $@"
+ [Valid_PlainTagHelperDescriptor, String_TagHelperDescriptor],
+ [Valid_PlainTagHelperDescriptor]
+ },
+ {
+ $@"
@addTagHelper *, {AssemblyA}
@addTagHelper *, {AssemblyB}
@removeTagHelper *, {AssemblyA}",
- new [] { Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor, String_TagHelperDescriptor },
- new [] { String_TagHelperDescriptor }
- },
- {
- $@"
+ [Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor, String_TagHelperDescriptor],
+ [String_TagHelperDescriptor]
+ },
+ {
+ $@"
@addTagHelper {Valid_PlainTagHelperDescriptor.Name}, {AssemblyA}
@addTagHelper *, {AssemblyA}",
- new [] { Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor, },
- new [] { Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor }
- },
- {
- $@"
+ [Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor],
+ [Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor]
+ },
+ {
+ $@"
@addTagHelper *, {AssemblyA}
@removeTagHelper {Valid_PlainTagHelperDescriptor.Name}, {AssemblyA}",
- new [] { Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor, },
- new [] { Valid_InheritedTagHelperDescriptor }
- },
- {
- $@"
+ [Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor],
+ [Valid_InheritedTagHelperDescriptor]
+ },
+ {
+ $@"
@addTagHelper *, {AssemblyA}
@removeTagHelper *, {AssemblyA}
@addTagHelper *, {AssemblyA}",
- new [] { Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor, },
- new [] { Valid_InheritedTagHelperDescriptor, Valid_PlainTagHelperDescriptor }
- },
- {
- $@"
+ [Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor],
+ [Valid_InheritedTagHelperDescriptor, Valid_PlainTagHelperDescriptor]
+ },
+ {
+ $@"
@addTagHelper *, {AssemblyA}
@addTagHelper *, {AssemblyA}",
- new [] { Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor, },
- new [] { Valid_InheritedTagHelperDescriptor, Valid_PlainTagHelperDescriptor }
- },
- {
- $@"
+ [Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor],
+ [Valid_InheritedTagHelperDescriptor, Valid_PlainTagHelperDescriptor]
+ },
+ {
+ $@"
@addTagHelper Microsoft.AspNetCore.Razor.TagHelpers.ValidPlain*, {AssemblyA}",
- new [] { Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor, },
- new [] { Valid_PlainTagHelperDescriptor }
- },
- {
- $@"
+ [Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor],
+ [Valid_PlainTagHelperDescriptor]
+ },
+ {
+ $@"
@addTagHelper Microsoft.AspNetCore.Razor.TagHelpers.*, {AssemblyA}",
- new [] { Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor, },
- new [] { Valid_PlainTagHelperDescriptor, Valid_PlainTagHelperDescriptor }
- },
- {
- $@"
+ [Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor],
+ [Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor]
+ },
+ {
+ $@"
@addTagHelper *, {AssemblyA}
@removeTagHelper Microsoft.AspNetCore.Razor.TagHelpers.ValidP*, {AssemblyA}
@addTagHelper *, {AssemblyA}",
- new [] { Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor, },
- new [] { Valid_InheritedTagHelperDescriptor, Valid_PlainTagHelperDescriptor }
- },
- {
- $@"
+ [Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor],
+ [Valid_InheritedTagHelperDescriptor, Valid_PlainTagHelperDescriptor]
+ },
+ {
+ $@"
@addTagHelper *, {AssemblyA}
@removeTagHelper Str*, {AssemblyB}",
- new [] { Valid_PlainTagHelperDescriptor, String_TagHelperDescriptor, },
- new [] { Valid_PlainTagHelperDescriptor }
- },
- {
- $@"
+ [Valid_PlainTagHelperDescriptor, String_TagHelperDescriptor],
+ [Valid_PlainTagHelperDescriptor]
+ },
+ {
+ $@"
@addTagHelper *, {AssemblyA}
@removeTagHelper *, {AssemblyB}",
- new [] { Valid_PlainTagHelperDescriptor, String_TagHelperDescriptor, },
- new [] { Valid_PlainTagHelperDescriptor }
- },
- {
- $@"
+ [Valid_PlainTagHelperDescriptor, String_TagHelperDescriptor],
+ [Valid_PlainTagHelperDescriptor]
+ },
+ {
+ $@"
@addTagHelper *, {AssemblyA}
@addTagHelper System.{String_TagHelperDescriptor.Name}, {AssemblyB}",
- new [] { Valid_PlainTagHelperDescriptor, String_TagHelperDescriptor, },
- new [] { Valid_PlainTagHelperDescriptor }
- },
- {
- $@"
+ [Valid_PlainTagHelperDescriptor, String_TagHelperDescriptor],
+ [Valid_PlainTagHelperDescriptor]
+ },
+ {
+ $@"
@addTagHelper *, {AssemblyA}
@addTagHelper *, {AssemblyB}
@removeTagHelper Microsoft.*, {AssemblyA}",
- new [] { Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor, String_TagHelperDescriptor },
- new [] { String_TagHelperDescriptor }
- },
- {
- $@"
+ [Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor, String_TagHelperDescriptor],
+ [String_TagHelperDescriptor]
+ },
+ {
+ $@"
@addTagHelper *, {AssemblyA}
@addTagHelper *, {AssemblyB}
@removeTagHelper ?Microsoft*, {AssemblyA}
@removeTagHelper System.{String_TagHelperDescriptor.Name}, {AssemblyB}",
- new [] { Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor, String_TagHelperDescriptor },
- new []
- {
- Valid_InheritedTagHelperDescriptor,
- Valid_PlainTagHelperDescriptor,
- String_TagHelperDescriptor
- }
- },
- {
- $@"
+ [Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor, String_TagHelperDescriptor],
+ [Valid_InheritedTagHelperDescriptor, Valid_PlainTagHelperDescriptor, String_TagHelperDescriptor]
+ },
+ {
+ $@"
@addTagHelper *, {AssemblyA}
@addTagHelper *, {AssemblyB}
@removeTagHelper TagHelper*, {AssemblyA}
@removeTagHelper System.{String_TagHelperDescriptor.Name}, {AssemblyB}",
- new [] { Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor, String_TagHelperDescriptor },
- new []
- {
- Valid_InheritedTagHelperDescriptor,
- Valid_PlainTagHelperDescriptor,
- String_TagHelperDescriptor
- }
- },
- };
- }
- }
+ [Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor, String_TagHelperDescriptor],
+ [Valid_InheritedTagHelperDescriptor, Valid_PlainTagHelperDescriptor, String_TagHelperDescriptor]
+ }
+ };
[Theory]
[MemberData(nameof(ProcessTagHelperMatchesData))]
public void DirectiveVisitor_FiltersTagHelpersByDirectives(
string source,
- TagHelperDescriptor[] tagHelpers,
- TagHelperDescriptor[] expectedTagHelpers)
+ TagHelperCollection tagHelpers,
+ TagHelperCollection expectedTagHelpers)
{
// Arrange
var sourceDocument = TestRazorSourceDocument.Create(source, filePath: "TestFile");
@@ -767,7 +752,7 @@ public void DirectiveVisitor_FiltersTagHelpersByDirectives(
var results = visitor.GetResults();
// Assert
- Assert.Equal(expectedTagHelpers.Length, results.Length);
+ Assert.Equal(expectedTagHelpers.Count, results.Count);
foreach (var expectedTagHelper in expectedTagHelpers)
{
@@ -775,131 +760,88 @@ public void DirectiveVisitor_FiltersTagHelpersByDirectives(
}
}
- public static TheoryData> ProcessTagHelperMatches_EmptyResultData
- {
- get
+ public static TheoryData ProcessTagHelperMatches_EmptyResultData
+ // source, taghelpers
+ => new()
{
- // source, taghelpers
- return new TheoryData>
{
- {
- $@"
+ $@"
@addTagHelper *, {AssemblyA}
@removeTagHelper *, {AssemblyA}",
- new TagHelperDescriptor[]
- {
- Valid_PlainTagHelperDescriptor,
- }
- },
- {
- $@"
+ [Valid_PlainTagHelperDescriptor]
+ },
+ {
+ $@"
@addTagHelper *, {AssemblyA}
@removeTagHelper {Valid_PlainTagHelperDescriptor.Name}, {AssemblyA}
@removeTagHelper {Valid_InheritedTagHelperDescriptor.Name}, {AssemblyA}",
- new TagHelperDescriptor[]
- {
- Valid_PlainTagHelperDescriptor,
- Valid_InheritedTagHelperDescriptor,
- }
- },
- {
- $@"
+ [Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor]
+ },
+ {
+ $@"
@addTagHelper *, {AssemblyA}
@addTagHelper *, {AssemblyB}
@removeTagHelper *, {AssemblyA}
@removeTagHelper *, {AssemblyB}",
- new TagHelperDescriptor[]
- {
- Valid_PlainTagHelperDescriptor,
- Valid_InheritedTagHelperDescriptor,
- String_TagHelperDescriptor,
- }
- },
- {
- $@"
+ [Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor, String_TagHelperDescriptor]
+ },
+ {
+ $@"
@addTagHelper *, {AssemblyA}
@addTagHelper *, {AssemblyB}
@removeTagHelper {Valid_PlainTagHelperDescriptor.Name}, {AssemblyA}
@removeTagHelper {Valid_InheritedTagHelperDescriptor.Name}, {AssemblyA}
@removeTagHelper {String_TagHelperDescriptor.Name}, {AssemblyB}",
- new TagHelperDescriptor[]
- {
- Valid_PlainTagHelperDescriptor,
- Valid_InheritedTagHelperDescriptor,
- String_TagHelperDescriptor,
- }
- },
- {
- $@"
+ [Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor, String_TagHelperDescriptor]
+ },
+ {
+ $@"
@removeTagHelper *, {AssemblyA}
@removeTagHelper {Valid_PlainTagHelperDescriptor.Name}, {AssemblyA}",
- new TagHelperDescriptor[0]
- },
- {
- $@"
+ []
+ },
+ {
+ $@"
@addTagHelper *, {AssemblyA}
@removeTagHelper Mic*, {AssemblyA}",
- new TagHelperDescriptor[]
- {
- Valid_PlainTagHelperDescriptor,
- }
- },
- {
- $@"
+ [Valid_PlainTagHelperDescriptor]
+ },
+ {
+ $@"
@addTagHelper Mic*, {AssemblyA}
@removeTagHelper {Valid_PlainTagHelperDescriptor.Name}, {AssemblyA}
@removeTagHelper {Valid_InheritedTagHelperDescriptor.Name}, {AssemblyA}",
- new TagHelperDescriptor[]
- {
- Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor
- }
- },
- {
- $@"
+ [Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor]
+ },
+ {
+ $@"
@addTagHelper Microsoft.*, {AssemblyA}
@addTagHelper System.*, {AssemblyB}
@removeTagHelper Microsoft.AspNetCore.Razor.TagHelpers*, {AssemblyA}
@removeTagHelper System.*, {AssemblyB}",
- new TagHelperDescriptor[]
- {
- Valid_PlainTagHelperDescriptor,
- Valid_InheritedTagHelperDescriptor,
- String_TagHelperDescriptor,
- }
- },
- {
- $@"
+ [Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor, String_TagHelperDescriptor]
+ },
+ {
+ $@"
@addTagHelper ?icrosoft.*, {AssemblyA}
@addTagHelper ?ystem.*, {AssemblyB}
@removeTagHelper *?????r, {AssemblyA}
@removeTagHelper Sy??em.*, {AssemblyB}",
- new TagHelperDescriptor[]
- {
- Valid_PlainTagHelperDescriptor,
- Valid_InheritedTagHelperDescriptor,
- String_TagHelperDescriptor,
- }
- },
- {
- $@"
+ [Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor, String_TagHelperDescriptor]
+ },
+ {
+ $@"
@addTagHelper ?i?crosoft.*, {AssemblyA}
@addTagHelper ??ystem.*, {AssemblyB}",
- new TagHelperDescriptor[]
- {
- Valid_PlainTagHelperDescriptor,
- Valid_InheritedTagHelperDescriptor,
- String_TagHelperDescriptor,
- }
- },
- };
- }
- }
+ [Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor, String_TagHelperDescriptor]
+ }
+ };
[Theory]
[MemberData(nameof(ProcessTagHelperMatches_EmptyResultData))]
public void ProcessDirectives_CanReturnEmptyDescriptorsBasedOnDirectiveDescriptors(
string source,
- IReadOnlyList tagHelpers)
+ TagHelperCollection tagHelpers)
{
// Arrange
var sourceDocument = TestRazorSourceDocument.Create(source, filePath: "TestFile");
@@ -922,11 +864,11 @@ public void TagHelperDirectiveVisitor_DoesNotMatch_Components()
// Arrange
var componentDescriptor = CreateComponentDescriptor("counter", "SomeProject.Counter", AssemblyA);
var legacyDescriptor = Valid_PlainTagHelperDescriptor;
- var tagHelpers = new[]
- {
+ TagHelperCollection tagHelpers =
+ [
legacyDescriptor,
- componentDescriptor,
- };
+ componentDescriptor
+ ];
var visitor = new DefaultRazorTagHelperContextDiscoveryPhase.TagHelperDirectiveVisitor();
visitor.Initialize(tagHelpers, filePath: null);
@@ -975,15 +917,15 @@ public void ComponentDirectiveVisitor_DoesNotMatch_LegacyTagHelpers()
var currentNamespace = "SomeProject";
var componentDescriptor = CreateComponentDescriptor("counter", "SomeProject.Counter", AssemblyA);
var legacyDescriptor = Valid_PlainTagHelperDescriptor;
- var descriptors = new[]
- {
+ TagHelperCollection tagHelpers =
+ [
legacyDescriptor,
- componentDescriptor,
- };
+ componentDescriptor
+ ];
var sourceDocument = CreateComponentTestSourceDocument(@"", "C:\\SomeFolder\\SomeProject\\Counter.cshtml");
var tree = RazorSyntaxTree.Parse(sourceDocument);
var visitor = new DefaultRazorTagHelperContextDiscoveryPhase.ComponentDirectiveVisitor();
- visitor.Initialize(descriptors, sourceDocument.FilePath, currentNamespace);
+ visitor.Initialize(tagHelpers, sourceDocument.FilePath, currentNamespace);
// Act
visitor.Visit(tree);
@@ -1001,11 +943,11 @@ public void ComponentDirectiveVisitor_AddsErrorOnLegacyTagHelperDirectives()
var currentNamespace = "SomeProject";
var componentDescriptor = CreateComponentDescriptor("counter", "SomeProject.Counter", AssemblyA);
var legacyDescriptor = Valid_PlainTagHelperDescriptor;
- var descriptors = new[]
- {
+ TagHelperCollection tagHelpers =
+ [
legacyDescriptor,
- componentDescriptor,
- };
+ componentDescriptor
+ ];
var filePath = "C:\\SomeFolder\\SomeProject\\Counter.cshtml";
var content = @"
@tagHelperPrefix th:
@@ -1015,7 +957,7 @@ public void ComponentDirectiveVisitor_AddsErrorOnLegacyTagHelperDirectives()
var sourceDocument = CreateComponentTestSourceDocument(content, filePath);
var tree = RazorSyntaxTree.Parse(sourceDocument);
var visitor = new DefaultRazorTagHelperContextDiscoveryPhase.ComponentDirectiveVisitor();
- visitor.Initialize(descriptors, sourceDocument.FilePath, currentNamespace);
+ visitor.Initialize(tagHelpers, sourceDocument.FilePath, currentNamespace);
// Act
visitor.Visit(tree);
@@ -1040,17 +982,17 @@ public void ComponentDirectiveVisitor_MatchesFullyQualifiedComponents()
"SomeProject.SomeOtherFolder.Counter",
AssemblyA,
fullyQualified: true);
- var descriptors = new[]
- {
- componentDescriptor,
- };
+ TagHelperCollection tagHelpers =
+ [
+ componentDescriptor
+ ];
var filePath = "C:\\SomeFolder\\SomeProject\\Counter.cshtml";
var content = @"
";
var sourceDocument = CreateComponentTestSourceDocument(content, filePath);
var tree = RazorSyntaxTree.Parse(sourceDocument);
var visitor = new DefaultRazorTagHelperContextDiscoveryPhase.ComponentDirectiveVisitor();
- visitor.Initialize(descriptors, sourceDocument.FilePath, currentNamespace);
+ visitor.Initialize(tagHelpers, sourceDocument.FilePath, currentNamespace);
// Act
visitor.Visit(tree);
@@ -1077,25 +1019,25 @@ public void ComponentDirectiveVisitor_ComponentInScope_MatchesChildContent()
"SomeProject",
"Counter",
childContent: true);
- var descriptors = new[]
- {
+ TagHelperCollection tagHelpers =
+ [
componentDescriptor,
- childContentDescriptor,
- };
+ childContentDescriptor
+ ];
var filePath = "C:\\SomeFolder\\SomeProject\\Counter.cshtml";
var content = @"
";
var sourceDocument = CreateComponentTestSourceDocument(content, filePath);
var tree = RazorSyntaxTree.Parse(sourceDocument);
var visitor = new DefaultRazorTagHelperContextDiscoveryPhase.ComponentDirectiveVisitor();
- visitor.Initialize(descriptors, sourceDocument.FilePath, currentNamespace);
+ visitor.Initialize(tagHelpers, sourceDocument.FilePath, currentNamespace);
// Act
visitor.Visit(tree);
var results = visitor.GetResults();
// Assert
- Assert.Equal(2, results.Length);
+ Assert.Equal(2, results.Count);
}
[Fact]
@@ -1112,18 +1054,18 @@ public void ComponentDirectiveVisitor_NullCurrentNamespace_MatchesOnlyFullyQuali
"SomeProject.SomeOtherFolder.Counter",
AssemblyA,
fullyQualified: true);
- var descriptors = new[]
- {
+ TagHelperCollection tagHelpers =
+ [
componentDescriptor,
- fullyQualifiedComponent,
- };
+ fullyQualifiedComponent
+ ];
var filePath = "C:\\SomeFolder\\SomeProject\\Counter.cshtml";
var content = @"
";
var sourceDocument = CreateComponentTestSourceDocument(content, filePath);
var tree = RazorSyntaxTree.Parse(sourceDocument);
var visitor = new DefaultRazorTagHelperContextDiscoveryPhase.ComponentDirectiveVisitor();
- visitor.Initialize(descriptors, sourceDocument.FilePath, currentNamespace);
+ visitor.Initialize(tagHelpers, sourceDocument.FilePath, currentNamespace);
// Act
visitor.Visit(tree);
@@ -1147,11 +1089,11 @@ public void ComponentDirectiveVisitor_MatchesIfNamespaceInUsing()
"Foo",
"SomeProject.SomeOtherFolder.Foo",
AssemblyA);
- var descriptors = new[]
- {
+ TagHelperCollection tagHelpers =
+ [
componentDescriptor,
- anotherComponentDescriptor,
- };
+ anotherComponentDescriptor
+ ];
var filePath = "C:\\SomeFolder\\SomeProject\\Counter.cshtml";
var content = @"
@using SomeProject.SomeOtherFolder
@@ -1159,14 +1101,14 @@ @using SomeProject.SomeOtherFolder
var sourceDocument = CreateComponentTestSourceDocument(content, filePath);
var tree = RazorSyntaxTree.Parse(sourceDocument);
var visitor = new DefaultRazorTagHelperContextDiscoveryPhase.ComponentDirectiveVisitor();
- visitor.Initialize(descriptors, sourceDocument.FilePath, currentNamespace);
+ visitor.Initialize(tagHelpers, sourceDocument.FilePath, currentNamespace);
// Act
visitor.Visit(tree);
var results = visitor.GetResults();
// Assert
- Assert.Equal(2, results.Length);
+ Assert.Equal(2, results.Count);
}
[Fact]
@@ -1178,10 +1120,10 @@ public void ComponentDirectiveVisitor_MatchesIfNamespaceInUsing_GlobalPrefix()
"Counter",
"SomeProject.SomeOtherFolder.Counter",
AssemblyA);
- var descriptors = new[]
- {
- componentDescriptor,
- };
+ TagHelperCollection tagHelpers =
+ [
+ componentDescriptor
+ ];
var filePath = "C:\\SomeFolder\\SomeProject\\Counter.cshtml";
var content = """
@using global::SomeProject.SomeOtherFolder
@@ -1189,7 +1131,7 @@ public void ComponentDirectiveVisitor_MatchesIfNamespaceInUsing_GlobalPrefix()
var sourceDocument = CreateComponentTestSourceDocument(content, filePath);
var tree = RazorSyntaxTree.Parse(sourceDocument);
var visitor = new DefaultRazorTagHelperContextDiscoveryPhase.ComponentDirectiveVisitor();
- visitor.Initialize(descriptors, sourceDocument.FilePath, currentNamespace);
+ visitor.Initialize(tagHelpers, sourceDocument.FilePath, currentNamespace);
// Act
visitor.Visit(tree);
@@ -1213,11 +1155,11 @@ public void ComponentDirectiveVisitor_DoesNotMatchForUsingAliasAndStaticUsings()
"Foo",
"SomeProject.SomeOtherFolder.Foo",
AssemblyA);
- var descriptors = new[]
- {
- componentDescriptor,
- anotherComponentDescriptor,
- };
+ TagHelperCollection tagHelpers =
+ [
+ componentDescriptor,
+ anotherComponentDescriptor
+ ];
var filePath = "C:\\SomeFolder\\SomeProject\\Counter.cshtml";
var content = @"
@using Bar = SomeProject.SomeOtherFolder
@@ -1226,7 +1168,7 @@ @using static SomeProject.SomeOtherFolder.Foo
var sourceDocument = CreateComponentTestSourceDocument(content, filePath);
var tree = RazorSyntaxTree.Parse(sourceDocument);
var visitor = new DefaultRazorTagHelperContextDiscoveryPhase.ComponentDirectiveVisitor();
- visitor.Initialize(descriptors, sourceDocument.FilePath, currentNamespace);
+ visitor.Initialize(tagHelpers, sourceDocument.FilePath, currentNamespace);
// Act
visitor.Visit(tree);
diff --git a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/IntegrationTests/CodeGenerationIntegrationTest.cs b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/IntegrationTests/CodeGenerationIntegrationTest.cs
index c9a50288e04..849f4beaa13 100644
--- a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/IntegrationTests/CodeGenerationIntegrationTest.cs
+++ b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/IntegrationTests/CodeGenerationIntegrationTest.cs
@@ -1,7 +1,6 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
using System.Runtime.CompilerServices;
@@ -371,19 +370,19 @@ private void RunTimeTest(string testName)
AssertCSharpDiagnosticsMatchBaseline(codeDocument, testName);
}
- private void RunTagHelpersTest(IEnumerable descriptors, [CallerMemberName] string testName = "")
+ private void RunTagHelpersTest(TagHelperCollection tagHelpers, [CallerMemberName] string testName = "")
{
if (designTime)
{
- RunDesignTimeTagHelpersTest(descriptors, testName);
+ RunDesignTimeTagHelpersTest(tagHelpers, testName);
}
else
{
- RunRuntimeTagHelpersTest(descriptors, testName);
+ RunRuntimeTagHelpersTest(tagHelpers, testName);
}
}
- private void RunRuntimeTagHelpersTest(IEnumerable descriptors, string testName)
+ private void RunRuntimeTagHelpersTest(TagHelperCollection tagHelpers, string testName)
{
// Arrange
var projectEngine = CreateProjectEngine(RazorExtensions.Register);
@@ -391,10 +390,10 @@ private void RunRuntimeTagHelpersTest(IEnumerable descripto
var projectItem = CreateProjectItemFromFile(testName: testName);
var imports = GetImports(projectEngine, projectItem);
- AddTagHelperStubs(descriptors);
+ AddTagHelperStubs(tagHelpers);
// Act
- var codeDocument = projectEngine.Process(RazorSourceDocument.ReadFrom(projectItem), RazorFileKind.Legacy, imports, descriptors.ToList());
+ var codeDocument = projectEngine.Process(RazorSourceDocument.ReadFrom(projectItem), RazorFileKind.Legacy, imports, tagHelpers);
// Assert
AssertDocumentNodeMatchesBaseline(codeDocument.GetRequiredDocumentNode(), testName);
@@ -402,7 +401,7 @@ private void RunRuntimeTagHelpersTest(IEnumerable descripto
AssertCSharpDiagnosticsMatchBaseline(codeDocument, testName);
}
- private void RunDesignTimeTagHelpersTest(IEnumerable descriptors, string testName)
+ private void RunDesignTimeTagHelpersTest(TagHelperCollection tagHelpers, string testName)
{
// Arrange
var projectEngine = CreateProjectEngine(RazorExtensions.Register);
@@ -410,10 +409,10 @@ private void RunDesignTimeTagHelpersTest(IEnumerable descri
var projectItem = CreateProjectItemFromFile(testName: testName);
var imports = GetImports(projectEngine, projectItem);
- AddTagHelperStubs(descriptors);
+ AddTagHelperStubs(tagHelpers);
// Act
- var codeDocument = projectEngine.ProcessDesignTime(RazorSourceDocument.ReadFrom(projectItem), RazorFileKind.Legacy, imports, descriptors.ToList());
+ var codeDocument = projectEngine.ProcessDesignTime(RazorSourceDocument.ReadFrom(projectItem), RazorFileKind.Legacy, imports, tagHelpers);
// Assert
AssertDocumentNodeMatchesBaseline(codeDocument.GetRequiredDocumentNode(), testName);
@@ -435,9 +434,9 @@ private static ImmutableArray GetImports(RazorProjectEngine
return result.ToImmutable();
}
- private void AddTagHelperStubs(IEnumerable descriptors)
+ private void AddTagHelperStubs(TagHelperCollection tagHelpers)
{
- var tagHelperClasses = descriptors.Select(descriptor =>
+ var tagHelperClasses = tagHelpers.Select(descriptor =>
{
var typeName = descriptor.TypeName;
var namespaceSeparatorIndex = typeName.LastIndexOf('.');
diff --git a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/IntegrationTests/TagHelpersIntegrationTest.cs b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/IntegrationTests/TagHelpersIntegrationTest.cs
index 7aae3295dbc..37440b08e53 100644
--- a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/IntegrationTests/TagHelpersIntegrationTest.cs
+++ b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/IntegrationTests/TagHelpersIntegrationTest.cs
@@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using Xunit;
+using static Microsoft.AspNetCore.Mvc.Razor.Extensions.ViewComponentsApi;
namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests;
@@ -13,15 +14,15 @@ public class TagHelpersIntegrationTest() : IntegrationTestBase(layer: TestProjec
public void SimpleTagHelpers()
{
// Arrange
- var descriptors = new[]
- {
+ TagHelperCollection tagHelpers =
+ [
CreateTagHelperDescriptor(
tagName: "input",
typeName: "InputTagHelper",
assemblyName: "TestAssembly")
- };
+ ];
- var projectEngine = CreateProjectEngine(builder => builder.AddTagHelpers(descriptors));
+ var projectEngine = CreateProjectEngine(builder => builder.SetTagHelpers(tagHelpers));
var projectItem = CreateProjectItemFromFile();
// Act
@@ -35,22 +36,22 @@ public void SimpleTagHelpers()
public void TagHelpersWithBoundAttributes()
{
// Arrange
- var descriptors = new[]
- {
+ TagHelperCollection tagHelpers =
+ [
CreateTagHelperDescriptor(
tagName: "input",
typeName: "InputTagHelper",
assemblyName: "TestAssembly",
- attributes: new Action[]
- {
+ attributes:
+ [
builder => builder
.Name("bound")
.PropertyName("FooProp")
.TypeName("System.String"),
- })
- };
+ ])
+ ];
- var projectEngine = CreateProjectEngine(builder => builder.AddTagHelpers(descriptors));
+ var projectEngine = CreateProjectEngine(builder => builder.SetTagHelpers(tagHelpers));
var projectItem = CreateProjectItemFromFile();
// Act
@@ -64,8 +65,8 @@ public void TagHelpersWithBoundAttributes()
public void NestedTagHelpers()
{
// Arrange
- var descriptors = new[]
- {
+ TagHelperCollection tagHelpers =
+ [
CreateTagHelperDescriptor(
tagName: "p",
typeName: "PTagHelper",
@@ -78,16 +79,16 @@ public void NestedTagHelpers()
tagName: "input",
typeName: "InputTagHelper",
assemblyName: "TestAssembly",
- attributes: new Action[]
- {
+ attributes:
+ [
builder => builder
.Name("value")
.PropertyName("FooProp")
.TypeName("System.String"),
- })
- };
+ ])
+ ];
- var projectEngine = CreateProjectEngine(builder => builder.AddTagHelpers(descriptors));
+ var projectEngine = CreateProjectEngine(builder => builder.SetTagHelpers(tagHelpers));
var projectItem = CreateProjectItemFromFile();
// Act
diff --git a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/IntegrationTests/TestTagHelperDescriptors.cs b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/IntegrationTests/TestTagHelperDescriptors.cs
index eaa229621bb..85d9d549423 100644
--- a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/IntegrationTests/TestTagHelperDescriptors.cs
+++ b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/IntegrationTests/TestTagHelperDescriptors.cs
@@ -1,460 +1,461 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-#nullable disable
-
using System;
using System.Collections.Generic;
using System.Reflection;
+using Xunit;
namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests;
public class TestTagHelperDescriptors
{
- public static IEnumerable SimpleTagHelperDescriptors
+ public static TagHelperCollection SimpleTagHelperDescriptors
{
get
{
- return new[]
- {
- CreateTagHelperDescriptor(
- tagName: "span",
- typeName: "SpanTagHelper",
- assemblyName: "TestAssembly"),
- CreateTagHelperDescriptor(
- tagName: "div",
- typeName: "DivTagHelper",
- assemblyName: "TestAssembly"),
- CreateTagHelperDescriptor(
- tagName: "input",
- typeName: "InputTagHelper",
- assemblyName: "TestAssembly",
- attributes: new Action[]
- {
- builder => builder
- .Name("value")
- .PropertyName("FooProp")
- .TypeName("System.String"),
- builder => builder
- .Name("bound")
- .PropertyName("BoundProp")
- .TypeName("System.String"),
- builder => builder
- .Name("age")
- .PropertyName("AgeProp")
- .TypeName("System.Int32"),
- builder => builder
- .Name("alive")
- .PropertyName("AliveProp")
- .TypeName("System.Boolean"),
- builder => builder
- .Name("tag")
- .PropertyName("TagProp")
- .TypeName("System.Object"),
- builder => builder
- .Name("tuple-dictionary")
- .PropertyName("DictionaryOfBoolAndStringTupleProperty")
- .TypeName(typeof(IDictionary).Namespace + ".IDictionary")
- .AsDictionaryAttribute("tuple-prefix-", typeof((bool, string)).FullName)
- })
- };
+ return
+ [
+ CreateTagHelperDescriptor(
+ tagName: "span",
+ typeName: "SpanTagHelper",
+ assemblyName: "TestAssembly"),
+ CreateTagHelperDescriptor(
+ tagName: "div",
+ typeName: "DivTagHelper",
+ assemblyName: "TestAssembly"),
+ CreateTagHelperDescriptor(
+ tagName: "input",
+ typeName: "InputTagHelper",
+ assemblyName: "TestAssembly",
+ attributes:
+ [
+ builder => builder
+ .Name("value")
+ .PropertyName("FooProp")
+ .TypeName("System.String"),
+ builder => builder
+ .Name("bound")
+ .PropertyName("BoundProp")
+ .TypeName("System.String"),
+ builder => builder
+ .Name("age")
+ .PropertyName("AgeProp")
+ .TypeName("System.Int32"),
+ builder => builder
+ .Name("alive")
+ .PropertyName("AliveProp")
+ .TypeName("System.Boolean"),
+ builder => builder
+ .Name("tag")
+ .PropertyName("TagProp")
+ .TypeName("System.Object"),
+ builder => builder
+ .Name("tuple-dictionary")
+ .PropertyName("DictionaryOfBoolAndStringTupleProperty")
+ .TypeName(typeof(IDictionary).Namespace + ".IDictionary")
+ .AsDictionaryAttribute("tuple-prefix-", typeof((bool, string)).FullName)
+ ])
+ ];
}
}
- public static IEnumerable MinimizedBooleanTagHelperDescriptors
+ public static TagHelperCollection MinimizedBooleanTagHelperDescriptors
{
get
{
- return new[]
- {
- CreateTagHelperDescriptor(
- tagName: "span",
- typeName: "SpanTagHelper",
- assemblyName: "TestAssembly"),
- CreateTagHelperDescriptor(
- tagName: "div",
- typeName: "DivTagHelper",
- assemblyName: "TestAssembly"),
- CreateTagHelperDescriptor(
- tagName: "input",
- typeName: "InputTagHelper",
- assemblyName: "TestAssembly",
- attributes: new Action[]
- {
- builder => builder
- .Name("value")
- .PropertyName("FooProp")
- .TypeName("System.String"),
- builder => builder
- .Name("bound")
- .PropertyName("BoundProp")
- .TypeName("System.Boolean"),
- builder => builder
- .Name("age")
- .PropertyName("AgeProp")
- .TypeName("System.Int32"),
- })
- };
+ return
+ [
+ CreateTagHelperDescriptor(
+ tagName: "span",
+ typeName: "SpanTagHelper",
+ assemblyName: "TestAssembly"),
+ CreateTagHelperDescriptor(
+ tagName: "div",
+ typeName: "DivTagHelper",
+ assemblyName: "TestAssembly"),
+ CreateTagHelperDescriptor(
+ tagName: "input",
+ typeName: "InputTagHelper",
+ assemblyName: "TestAssembly",
+ attributes:
+ [
+ builder => builder
+ .Name("value")
+ .PropertyName("FooProp")
+ .TypeName("System.String"),
+ builder => builder
+ .Name("bound")
+ .PropertyName("BoundProp")
+ .TypeName("System.Boolean"),
+ builder => builder
+ .Name("age")
+ .PropertyName("AgeProp")
+ .TypeName("System.Int32"),
+ ])
+ ];
}
}
- public static IEnumerable CssSelectorTagHelperDescriptors
+ public static TagHelperCollection CssSelectorTagHelperDescriptors
{
get
{
- var inputTypePropertyInfo = typeof(TestType).GetRuntimeProperty("Type");
- var inputCheckedPropertyInfo = typeof(TestType).GetRuntimeProperty("Checked");
+ var inputTypePropertyInfo = GetTestTypeRuntimeProperty("Type");
+ var inputCheckedPropertyInfo = GetTestTypeRuntimeProperty("Checked");
- return new[]
- {
- CreateTagHelperDescriptor(
- tagName: "a",
- typeName: "TestNamespace.ATagHelper",
- assemblyName: "TestAssembly",
- ruleBuilders: new Action[]
- {
- builder => builder
- .RequireAttributeDescriptor(attribute => attribute
- .Name("href", RequiredAttributeNameComparison.FullMatch)
- .Value("~/", RequiredAttributeValueComparison.FullMatch)),
- }),
- CreateTagHelperDescriptor(
- tagName: "a",
- typeName: "TestNamespace.ATagHelperMultipleSelectors",
- assemblyName: "TestAssembly",
- ruleBuilders: new Action[]
- {
- builder => builder
- .RequireAttributeDescriptor(attribute => attribute
- .Name("href", RequiredAttributeNameComparison.FullMatch)
- .Value("~/", RequiredAttributeValueComparison.PrefixMatch))
- .RequireAttributeDescriptor(attribute => attribute
- .Name("href", RequiredAttributeNameComparison.FullMatch)
- .Value("?hello=world", RequiredAttributeValueComparison.SuffixMatch)),
- }),
- CreateTagHelperDescriptor(
- tagName: "input",
- typeName: "TestNamespace.InputTagHelper",
- assemblyName: "TestAssembly",
- attributes: new Action[]
- {
- builder => BuildBoundAttributeDescriptorFromPropertyInfo(builder, "type", inputTypePropertyInfo),
- },
- ruleBuilders: new Action[]
- {
- builder => builder
- .RequireAttributeDescriptor(attribute => attribute
- .Name("type", RequiredAttributeNameComparison.FullMatch)
- .Value("text", RequiredAttributeValueComparison.FullMatch)),
- }),
- CreateTagHelperDescriptor(
- tagName: "input",
- typeName: "TestNamespace.InputTagHelper2",
- assemblyName: "TestAssembly",
- attributes: new Action[]
- {
- builder => BuildBoundAttributeDescriptorFromPropertyInfo(builder, "type", inputTypePropertyInfo),
- },
- ruleBuilders: new Action[]
- {
- builder => builder
- .RequireAttributeDescriptor(attribute => attribute
- .Name("ty", RequiredAttributeNameComparison.PrefixMatch)),
- }),
- CreateTagHelperDescriptor(
- tagName: "*",
- typeName: "TestNamespace.CatchAllTagHelper",
- assemblyName: "TestAssembly",
- ruleBuilders: new Action[]
- {
- builder => builder
- .RequireAttributeDescriptor(attribute => attribute
- .Name("href", RequiredAttributeNameComparison.FullMatch)
- .Value("~/", RequiredAttributeValueComparison.PrefixMatch)),
- }),
- CreateTagHelperDescriptor(
- tagName: "*",
- typeName: "TestNamespace.CatchAllTagHelper2",
- assemblyName: "TestAssembly",
- ruleBuilders: new Action[]
- {
- builder => builder
- .RequireAttributeDescriptor(attribute => attribute
- .Name("type", RequiredAttributeNameComparison.FullMatch)),
- }),
- };
+ return
+ [
+ CreateTagHelperDescriptor(
+ tagName: "a",
+ typeName: "TestNamespace.ATagHelper",
+ assemblyName: "TestAssembly",
+ ruleBuilders:
+ [
+ builder => builder
+ .RequireAttributeDescriptor(attribute => attribute
+ .Name("href", RequiredAttributeNameComparison.FullMatch)
+ .Value("~/", RequiredAttributeValueComparison.FullMatch)),
+ ]),
+ CreateTagHelperDescriptor(
+ tagName: "a",
+ typeName: "TestNamespace.ATagHelperMultipleSelectors",
+ assemblyName: "TestAssembly",
+ ruleBuilders:
+ [
+ builder => builder
+ .RequireAttributeDescriptor(attribute => attribute
+ .Name("href", RequiredAttributeNameComparison.FullMatch)
+ .Value("~/", RequiredAttributeValueComparison.PrefixMatch))
+ .RequireAttributeDescriptor(attribute => attribute
+ .Name("href", RequiredAttributeNameComparison.FullMatch)
+ .Value("?hello=world", RequiredAttributeValueComparison.SuffixMatch)),
+ ]),
+ CreateTagHelperDescriptor(
+ tagName: "input",
+ typeName: "TestNamespace.InputTagHelper",
+ assemblyName: "TestAssembly",
+ attributes:
+ [
+ builder => BuildBoundAttributeDescriptorFromPropertyInfo(builder, "type", inputTypePropertyInfo),
+ ],
+ ruleBuilders:
+ [
+ builder => builder
+ .RequireAttributeDescriptor(attribute => attribute
+ .Name("type", RequiredAttributeNameComparison.FullMatch)
+ .Value("text", RequiredAttributeValueComparison.FullMatch)),
+ ]),
+ CreateTagHelperDescriptor(
+ tagName: "input",
+ typeName: "TestNamespace.InputTagHelper2",
+ assemblyName: "TestAssembly",
+ attributes:
+ [
+ builder => BuildBoundAttributeDescriptorFromPropertyInfo(builder, "type", inputTypePropertyInfo),
+ ],
+ ruleBuilders:
+ [
+ builder => builder
+ .RequireAttributeDescriptor(attribute => attribute
+ .Name("ty", RequiredAttributeNameComparison.PrefixMatch)),
+ ]),
+ CreateTagHelperDescriptor(
+ tagName: "*",
+ typeName: "TestNamespace.CatchAllTagHelper",
+ assemblyName: "TestAssembly",
+ ruleBuilders:
+ [
+ builder => builder
+ .RequireAttributeDescriptor(attribute => attribute
+ .Name("href", RequiredAttributeNameComparison.FullMatch)
+ .Value("~/", RequiredAttributeValueComparison.PrefixMatch)),
+ ]),
+ CreateTagHelperDescriptor(
+ tagName: "*",
+ typeName: "TestNamespace.CatchAllTagHelper2",
+ assemblyName: "TestAssembly",
+ ruleBuilders:
+ [
+ builder => builder
+ .RequireAttributeDescriptor(attribute => attribute
+ .Name("type", RequiredAttributeNameComparison.FullMatch)),
+ ]),
+ ];
}
}
- public static IEnumerable EnumTagHelperDescriptors
+ public static TagHelperCollection EnumTagHelperDescriptors
{
get
{
- return new[]
- {
+ return
+ [
CreateTagHelperDescriptor(
tagName: "*",
typeName: "TestNamespace.CatchAllTagHelper",
assemblyName: "TestAssembly",
- attributes: new Action[]
- {
+ attributes:
+ [
builder => builder
.Name("catch-all")
.PropertyName("CatchAll")
.AsEnum()
.TypeName("Microsoft.AspNetCore.Razor.Language.IntegrationTests.TestTagHelperDescriptors.MyEnum"),
- }),
+ ]),
CreateTagHelperDescriptor(
tagName: "input",
typeName: "TestNamespace.InputTagHelper",
assemblyName: "TestAssembly",
- attributes: new Action[]
- {
+ attributes:
+ [
builder => builder
.Name("value")
.PropertyName("Value")
.AsEnum()
.TypeName("Microsoft.AspNetCore.Razor.Language.IntegrationTests.TestTagHelperDescriptors.MyEnum"),
- }),
- };
+ ]),
+ ];
}
}
- public static IEnumerable SymbolBoundTagHelperDescriptors
+ public static TagHelperCollection SymbolBoundTagHelperDescriptors
{
get
{
- return new[]
- {
- CreateTagHelperDescriptor(
- tagName: "*",
- typeName: "TestNamespace.CatchAllTagHelper",
- assemblyName: "TestAssembly",
- attributes: new Action[]
- {
- builder => builder
- .Name("[item]")
- .PropertyName("ListItems")
- .TypeName("System.Collections.Generic.List"),
- builder => builder
- .Name("[(item)]")
- .PropertyName("ArrayItems")
- .TypeName(typeof(string[]).FullName),
- builder => builder
- .Name("(click)")
- .PropertyName("Event1")
- .TypeName(typeof(Action).FullName),
- builder => builder
- .Name("(^click)")
- .PropertyName("Event2")
- .TypeName(typeof(Action).FullName),
- builder => builder
- .Name("*something")
- .PropertyName("StringProperty1")
- .TypeName(typeof(string).FullName),
- builder => builder
- .Name("#local")
- .PropertyName("StringProperty2")
- .TypeName(typeof(string).FullName),
- },
- ruleBuilders: new Action[]
- {
- builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("bound")),
- }),
- };
+ return
+ [
+ CreateTagHelperDescriptor(
+ tagName: "*",
+ typeName: "TestNamespace.CatchAllTagHelper",
+ assemblyName: "TestAssembly",
+ attributes:
+ [
+ builder => builder
+ .Name("[item]")
+ .PropertyName("ListItems")
+ .TypeName("System.Collections.Generic.List"),
+ builder => builder
+ .Name("[(item)]")
+ .PropertyName("ArrayItems")
+ .TypeName(typeof(string[]).FullName),
+ builder => builder
+ .Name("(click)")
+ .PropertyName("Event1")
+ .TypeName(typeof(Action).FullName),
+ builder => builder
+ .Name("(^click)")
+ .PropertyName("Event2")
+ .TypeName(typeof(Action).FullName),
+ builder => builder
+ .Name("*something")
+ .PropertyName("StringProperty1")
+ .TypeName(typeof(string).FullName),
+ builder => builder
+ .Name("#local")
+ .PropertyName("StringProperty2")
+ .TypeName(typeof(string).FullName),
+ ],
+ ruleBuilders:
+ [
+ builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("bound")),
+ ]),
+ ];
}
}
- public static IEnumerable MinimizedTagHelpers_Descriptors
+ public static TagHelperCollection MinimizedTagHelpers_Descriptors
{
get
{
- return new[]
- {
- CreateTagHelperDescriptor(
- tagName: "*",
- typeName: "TestNamespace.CatchAllTagHelper",
- assemblyName: "TestAssembly",
- attributes: new Action[]
- {
- builder => builder
- .Name("catchall-bound-string")
- .PropertyName("BoundRequiredString")
- .TypeName(typeof(string).FullName),
- },
- ruleBuilders: new Action[]
- {
- builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("catchall-unbound-required")),
- }),
- CreateTagHelperDescriptor(
- tagName: "input",
- typeName: "TestNamespace.InputTagHelper",
- assemblyName: "TestAssembly",
- attributes: new Action[]
- {
- builder => builder
- .Name("input-bound-required-string")
- .PropertyName("BoundRequiredString")
- .TypeName(typeof(string).FullName),
- builder => builder
- .Name("input-bound-string")
- .PropertyName("BoundString")
- .TypeName(typeof(string).FullName),
- },
- ruleBuilders: new Action[]
- {
- builder => builder
- .RequireAttributeDescriptor(attribute => attribute.Name("input-bound-required-string"))
- .RequireAttributeDescriptor(attribute => attribute.Name("input-unbound-required")),
- }),
- CreateTagHelperDescriptor(
- tagName: "div",
- typeName: "DivTagHelper",
- assemblyName: "TestAssembly",
- attributes: new Action[]
- {
- builder => builder
- .Name("boundbool")
- .PropertyName("BoundBoolProp")
- .TypeName(typeof(bool).FullName),
- builder => builder
- .Name("booldict")
- .PropertyName("BoolDictProp")
- .TypeName("System.Collections.Generic.IDictionary")
- .AsDictionaryAttribute("booldict-prefix-", typeof(bool).FullName),
- }),
- };
+ return
+ [
+ CreateTagHelperDescriptor(
+ tagName: "*",
+ typeName: "TestNamespace.CatchAllTagHelper",
+ assemblyName: "TestAssembly",
+ attributes:
+ [
+ builder => builder
+ .Name("catchall-bound-string")
+ .PropertyName("BoundRequiredString")
+ .TypeName(typeof(string).FullName),
+ ],
+ ruleBuilders:
+ [
+ builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("catchall-unbound-required")),
+ ]),
+ CreateTagHelperDescriptor(
+ tagName: "input",
+ typeName: "TestNamespace.InputTagHelper",
+ assemblyName: "TestAssembly",
+ attributes:
+ [
+ builder => builder
+ .Name("input-bound-required-string")
+ .PropertyName("BoundRequiredString")
+ .TypeName(typeof(string).FullName),
+ builder => builder
+ .Name("input-bound-string")
+ .PropertyName("BoundString")
+ .TypeName(typeof(string).FullName),
+ ],
+ ruleBuilders:
+ [
+ builder => builder
+ .RequireAttributeDescriptor(attribute => attribute.Name("input-bound-required-string"))
+ .RequireAttributeDescriptor(attribute => attribute.Name("input-unbound-required")),
+ ]),
+ CreateTagHelperDescriptor(
+ tagName: "div",
+ typeName: "DivTagHelper",
+ assemblyName: "TestAssembly",
+ attributes:
+ [
+ builder => builder
+ .Name("boundbool")
+ .PropertyName("BoundBoolProp")
+ .TypeName(typeof(bool).FullName),
+ builder => builder
+ .Name("booldict")
+ .PropertyName("BoolDictProp")
+ .TypeName("System.Collections.Generic.IDictionary")
+ .AsDictionaryAttribute("booldict-prefix-", typeof(bool).FullName),
+ ]),
+ ];
}
}
- public static IEnumerable DynamicAttributeTagHelpers_Descriptors
+ public static TagHelperCollection DynamicAttributeTagHelpers_Descriptors
{
get
{
- return new[]
- {
+ return
+ [
CreateTagHelperDescriptor(
tagName: "input",
typeName: "TestNamespace.InputTagHelper",
assemblyName: "TestAssembly",
- attributes: new Action[]
- {
+ attributes:
+ [
builder => builder
.Name("bound")
.PropertyName("Bound")
.TypeName(typeof(string).FullName)
- }),
- };
+ ]),
+ ];
}
}
- public static IEnumerable DuplicateTargetTagHelperDescriptors
+ public static TagHelperCollection DuplicateTargetTagHelperDescriptors
{
get
{
- var typePropertyInfo = typeof(TestType).GetRuntimeProperty("Type");
- var checkedPropertyInfo = typeof(TestType).GetRuntimeProperty("Checked");
- return new[]
- {
- CreateTagHelperDescriptor(
- tagName: "*",
- typeName: "TestNamespace.CatchAllTagHelper",
- assemblyName: "TestAssembly",
- attributes: new Action[]
- {
- builder => BuildBoundAttributeDescriptorFromPropertyInfo(builder, "type", typePropertyInfo),
- builder => BuildBoundAttributeDescriptorFromPropertyInfo(builder, "checked", checkedPropertyInfo),
- },
- ruleBuilders: new Action[]
- {
- builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("type")),
- builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("checked"))
- }),
- CreateTagHelperDescriptor(
- tagName: "input",
- typeName: "TestNamespace.InputTagHelper",
- assemblyName: "TestAssembly",
- attributes: new Action[]
- {
- builder => BuildBoundAttributeDescriptorFromPropertyInfo(builder, "type", typePropertyInfo),
- builder => BuildBoundAttributeDescriptorFromPropertyInfo(builder, "checked", checkedPropertyInfo),
- },
- ruleBuilders: new Action[]
- {
- builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("type")),
- builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("checked"))
- })
- };
+ var typePropertyInfo = GetTestTypeRuntimeProperty("Type");
+ var checkedPropertyInfo = GetTestTypeRuntimeProperty("Checked");
+
+ return
+ [
+ CreateTagHelperDescriptor(
+ tagName: "*",
+ typeName: "TestNamespace.CatchAllTagHelper",
+ assemblyName: "TestAssembly",
+ attributes:
+ [
+ builder => BuildBoundAttributeDescriptorFromPropertyInfo(builder, "type", typePropertyInfo),
+ builder => BuildBoundAttributeDescriptorFromPropertyInfo(builder, "checked", checkedPropertyInfo),
+ ],
+ ruleBuilders:
+ [
+ builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("type")),
+ builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("checked"))
+ ]),
+ CreateTagHelperDescriptor(
+ tagName: "input",
+ typeName: "TestNamespace.InputTagHelper",
+ assemblyName: "TestAssembly",
+ attributes:
+ [
+ builder => BuildBoundAttributeDescriptorFromPropertyInfo(builder, "type", typePropertyInfo),
+ builder => BuildBoundAttributeDescriptorFromPropertyInfo(builder, "checked", checkedPropertyInfo),
+ ],
+ ruleBuilders:
+ [
+ builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("type")),
+ builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("checked"))
+ ])
+ ];
}
}
- public static IEnumerable AttributeTargetingTagHelperDescriptors
+ public static TagHelperCollection AttributeTargetingTagHelperDescriptors
{
get
{
- var inputTypePropertyInfo = typeof(TestType).GetRuntimeProperty("Type");
- var inputCheckedPropertyInfo = typeof(TestType).GetRuntimeProperty("Checked");
- return new[]
- {
- CreateTagHelperDescriptor(
- tagName: "p",
- typeName: "TestNamespace.PTagHelper",
- assemblyName: "TestAssembly",
- ruleBuilders: new Action[]
- {
- builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("class")),
- }),
- CreateTagHelperDescriptor(
- tagName: "input",
- typeName: "TestNamespace.InputTagHelper",
- assemblyName: "TestAssembly",
- attributes: new Action[]
- {
- builder => BuildBoundAttributeDescriptorFromPropertyInfo(builder, "type", inputTypePropertyInfo),
- },
- ruleBuilders: new Action[]
- {
- builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("type")),
- }),
- CreateTagHelperDescriptor(
- tagName: "input",
- typeName: "TestNamespace.InputTagHelper2",
- assemblyName: "TestAssembly",
- attributes: new Action[]
- {
- builder => BuildBoundAttributeDescriptorFromPropertyInfo(builder, "type", inputTypePropertyInfo),
- builder => BuildBoundAttributeDescriptorFromPropertyInfo(builder, "checked", inputCheckedPropertyInfo),
- },
- ruleBuilders: new Action[]
- {
- builder => builder
- .RequireAttributeDescriptor(attribute => attribute.Name("type"))
- .RequireAttributeDescriptor(attribute => attribute.Name("checked")),
- }),
- CreateTagHelperDescriptor(
- tagName: "*",
- typeName: "TestNamespace.CatchAllTagHelper",
- assemblyName: "TestAssembly",
- ruleBuilders: new Action[]
- {
- builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("catchAll")),
- }),
- };
+ var inputTypePropertyInfo = GetTestTypeRuntimeProperty("Type");
+ var inputCheckedPropertyInfo = GetTestTypeRuntimeProperty("Checked");
+
+ return
+ [
+ CreateTagHelperDescriptor(
+ tagName: "p",
+ typeName: "TestNamespace.PTagHelper",
+ assemblyName: "TestAssembly",
+ ruleBuilders:
+ [
+ builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("class")),
+ ]),
+ CreateTagHelperDescriptor(
+ tagName: "input",
+ typeName: "TestNamespace.InputTagHelper",
+ assemblyName: "TestAssembly",
+ attributes:
+ [
+ builder => BuildBoundAttributeDescriptorFromPropertyInfo(builder, "type", inputTypePropertyInfo),
+ ],
+ ruleBuilders:
+ [
+ builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("type")),
+ ]),
+ CreateTagHelperDescriptor(
+ tagName: "input",
+ typeName: "TestNamespace.InputTagHelper2",
+ assemblyName: "TestAssembly",
+ attributes:
+ [
+ builder => BuildBoundAttributeDescriptorFromPropertyInfo(builder, "type", inputTypePropertyInfo),
+ builder => BuildBoundAttributeDescriptorFromPropertyInfo(builder, "checked", inputCheckedPropertyInfo),
+ ],
+ ruleBuilders:
+ [
+ builder => builder
+ .RequireAttributeDescriptor(attribute => attribute.Name("type"))
+ .RequireAttributeDescriptor(attribute => attribute.Name("checked")),
+ ]),
+ CreateTagHelperDescriptor(
+ tagName: "*",
+ typeName: "TestNamespace.CatchAllTagHelper",
+ assemblyName: "TestAssembly",
+ ruleBuilders:
+ [
+ builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("catchAll")),
+ ]),
+ ];
}
}
- public static IEnumerable PrefixedAttributeTagHelperDescriptors
+ public static TagHelperCollection PrefixedAttributeTagHelperDescriptors
{
get
{
- return new[]
- {
+ return
+ [
CreateTagHelperDescriptor(
tagName: "input",
typeName: "TestNamespace.InputTagHelper1",
assemblyName: "TestAssembly",
- attributes: new Action[]
- {
+ attributes:
+ [
builder => builder
.Name("int-prefix-grabber")
.PropertyName("IntProperty")
@@ -473,13 +474,13 @@ public static IEnumerable PrefixedAttributeTagHelperDescrip
.PropertyName("StringDictionaryProperty")
.TypeName("Namespace.DictionaryWithoutParameterlessConstructor")
.AsDictionaryAttribute("string-prefix-", typeof(string).FullName),
- }),
+ ]),
CreateTagHelperDescriptor(
tagName: "input",
typeName: "TestNamespace.InputTagHelper2",
assemblyName: "TestAssembly",
- attributes: new Action[]
- {
+ attributes:
+ [
builder => builder
.Name("int-dictionary")
.PropertyName("IntDictionaryProperty")
@@ -490,78 +491,79 @@ public static IEnumerable PrefixedAttributeTagHelperDescrip
.PropertyName("StringDictionaryProperty")
.TypeName("Namespace.DictionaryWithoutParameterlessConstructor")
.AsDictionaryAttribute("string-prefix-", typeof(string).FullName),
- }),
- };
+ ]),
+ ];
}
}
- public static IEnumerable TagHelpersInSectionDescriptors
+ public static TagHelperCollection TagHelpersInSectionDescriptors
{
get
{
- var propertyInfo = typeof(TestType).GetRuntimeProperty("BoundProperty");
- return new[]
- {
- CreateTagHelperDescriptor(
- tagName: "MyTagHelper",
- typeName: "TestNamespace.MyTagHelper",
- assemblyName: "TestAssembly",
- attributes: new Action[]
- {
- builder => BuildBoundAttributeDescriptorFromPropertyInfo(builder, "BoundProperty", propertyInfo),
- }),
- CreateTagHelperDescriptor(
- tagName: "NestedTagHelper",
- typeName: "TestNamespace.NestedTagHelper",
- assemblyName: "TestAssembly"),
- };
+ var propertyInfo = GetTestTypeRuntimeProperty("BoundProperty");
+
+ return
+ [
+ CreateTagHelperDescriptor(
+ tagName: "MyTagHelper",
+ typeName: "TestNamespace.MyTagHelper",
+ assemblyName: "TestAssembly",
+ attributes:
+ [
+ builder => BuildBoundAttributeDescriptorFromPropertyInfo(builder, "BoundProperty", propertyInfo),
+ ]),
+ CreateTagHelperDescriptor(
+ tagName: "NestedTagHelper",
+ typeName: "TestNamespace.NestedTagHelper",
+ assemblyName: "TestAssembly"),
+ ];
}
}
- public static IEnumerable DefaultPAndInputTagHelperDescriptors
+ public static TagHelperCollection DefaultPAndInputTagHelperDescriptors
{
get
{
- var pAgePropertyInfo = typeof(TestType).GetRuntimeProperty("Age");
- var inputTypePropertyInfo = typeof(TestType).GetRuntimeProperty("Type");
- var checkedPropertyInfo = typeof(TestType).GetRuntimeProperty("Checked");
+ var pAgePropertyInfo = GetTestTypeRuntimeProperty("Age");
+ var inputTypePropertyInfo = GetTestTypeRuntimeProperty("Type");
+ var checkedPropertyInfo = GetTestTypeRuntimeProperty("Checked");
- return new[]
- {
- CreateTagHelperDescriptor(
- tagName: "p",
- typeName: "TestNamespace.PTagHelper",
- assemblyName: "TestAssembly",
- attributes: new Action[]
- {
- builder => BuildBoundAttributeDescriptorFromPropertyInfo(builder, "age", pAgePropertyInfo),
- },
- ruleBuilders: new Action[]
- {
- builder => builder.RequireTagStructure(TagStructure.NormalOrSelfClosing)
- }),
- CreateTagHelperDescriptor(
- tagName: "input",
- typeName: "TestNamespace.InputTagHelper",
- assemblyName: "TestAssembly",
- attributes: new Action[]
- {
- builder => BuildBoundAttributeDescriptorFromPropertyInfo(builder, "type", inputTypePropertyInfo),
- },
- ruleBuilders: new Action[]
- {
- builder => builder.RequireTagStructure(TagStructure.WithoutEndTag)
- }),
- CreateTagHelperDescriptor(
- tagName: "input",
- typeName: "TestNamespace.InputTagHelper2",
- assemblyName: "TestAssembly",
- attributes: new Action[]
- {
- builder => BuildBoundAttributeDescriptorFromPropertyInfo(builder, "type", inputTypePropertyInfo),
- builder => BuildBoundAttributeDescriptorFromPropertyInfo(builder, "checked", checkedPropertyInfo),
- }),
- };
+ return
+ [
+ CreateTagHelperDescriptor(
+ tagName: "p",
+ typeName: "TestNamespace.PTagHelper",
+ assemblyName: "TestAssembly",
+ attributes:
+ [
+ builder => BuildBoundAttributeDescriptorFromPropertyInfo(builder, "age", pAgePropertyInfo),
+ ],
+ ruleBuilders:
+ [
+ builder => builder.RequireTagStructure(TagStructure.NormalOrSelfClosing)
+ ]),
+ CreateTagHelperDescriptor(
+ tagName: "input",
+ typeName: "TestNamespace.InputTagHelper",
+ assemblyName: "TestAssembly",
+ attributes:
+ [
+ builder => BuildBoundAttributeDescriptorFromPropertyInfo(builder, "type", inputTypePropertyInfo),
+ ],
+ ruleBuilders:
+ [
+ builder => builder.RequireTagStructure(TagStructure.WithoutEndTag)
+ ]),
+ CreateTagHelperDescriptor(
+ tagName: "input",
+ typeName: "TestNamespace.InputTagHelper2",
+ assemblyName: "TestAssembly",
+ attributes:
+ [
+ builder => BuildBoundAttributeDescriptorFromPropertyInfo(builder, "type", inputTypePropertyInfo),
+ builder => BuildBoundAttributeDescriptorFromPropertyInfo(builder, "checked", checkedPropertyInfo),
+ ]),
+ ];
}
}
@@ -569,8 +571,8 @@ private static TagHelperDescriptor CreateTagHelperDescriptor(
string tagName,
string typeName,
string assemblyName,
- IEnumerable> attributes = null,
- IEnumerable> ruleBuilders = null)
+ IEnumerable>? attributes = null,
+ IEnumerable>? ruleBuilders = null)
{
var builder = TagHelperDescriptorBuilder.CreateTagHelper(typeName, assemblyName);
builder.SetTypeName(typeName, typeNamespace: null, typeNameIdentifier: null);
@@ -604,6 +606,14 @@ private static TagHelperDescriptor CreateTagHelperDescriptor(
return descriptor;
}
+ private static PropertyInfo GetTestTypeRuntimeProperty(string name)
+ {
+ var result = typeof(TestType).GetRuntimeProperty(name);
+ Assert.NotNull(result);
+
+ return result;
+ }
+
private static void BuildBoundAttributeDescriptorFromPropertyInfo(
BoundAttributeDescriptorBuilder builder,
string name,
@@ -624,11 +634,11 @@ private class TestType
{
public int Age { get; set; }
- public string Type { get; set; }
+ public string? Type { get; set; }
public bool Checked { get; set; }
- public string BoundProperty { get; set; }
+ public string? BoundProperty { get; set; }
}
public static readonly string Code = """
diff --git a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/Legacy/TagHelperBlockRewriterTest.cs b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/Legacy/TagHelperBlockRewriterTest.cs
index 3bbcb7584ee..b1c2d8b7d0f 100644
--- a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/Legacy/TagHelperBlockRewriterTest.cs
+++ b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/Legacy/TagHelperBlockRewriterTest.cs
@@ -3,7 +3,6 @@
using System;
using System.Collections.Generic;
-using System.Collections.Immutable;
using System.Globalization;
using Microsoft.AspNetCore.Razor.Language.Components;
using Roslyn.Test.Utilities;
@@ -13,7 +12,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy;
public class TagHelperBlockRewriterTest : TagHelperRewritingTestBase
{
- public static ImmutableArray SymbolBoundAttributes_Descriptors =
+ public static readonly TagHelperCollection SymbolBoundAttributes_TagHelpers =
[
TagHelperDescriptorBuilder.CreateTagHelper("CatchAllTagHelper", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule
@@ -49,46 +48,46 @@ public class TagHelperBlockRewriterTest : TagHelperRewritingTestBase
[Fact]
public void CanHandleSymbolBoundAttributes1()
{
- EvaluateData(SymbolBoundAttributes_Descriptors, "");
+ EvaluateData(SymbolBoundAttributes_TagHelpers, "");
}
[Fact]
public void CanHandleSymbolBoundAttributes2()
{
- EvaluateData(SymbolBoundAttributes_Descriptors, "");
+ EvaluateData(SymbolBoundAttributes_TagHelpers, "");
}
[Fact]
public void CanHandleSymbolBoundAttributes3()
{
- EvaluateData(SymbolBoundAttributes_Descriptors, "");
+ EvaluateData(SymbolBoundAttributes_TagHelpers, "");
}
[Fact]
public void CanHandleSymbolBoundAttributes4()
{
- EvaluateData(SymbolBoundAttributes_Descriptors, "");
+ EvaluateData(SymbolBoundAttributes_TagHelpers, "");
}
[Fact]
public void CanHandleSymbolBoundAttributes5()
{
- EvaluateData(SymbolBoundAttributes_Descriptors, "");
+ EvaluateData(SymbolBoundAttributes_TagHelpers, "");
}
[Fact]
public void CanHandleSymbolBoundAttributes6()
{
- EvaluateData(SymbolBoundAttributes_Descriptors, "");
+ EvaluateData(SymbolBoundAttributes_TagHelpers, "");
}
[Fact]
public void CanHandleSymbolBoundAttributes7()
{
- EvaluateData(SymbolBoundAttributes_Descriptors, "");
+ EvaluateData(SymbolBoundAttributes_TagHelpers, "");
}
- public static ImmutableArray WithoutEndTag_Descriptors =
+ public static readonly TagHelperCollection WithoutEndTag_TagHelpers =
[
TagHelperDescriptorBuilder.CreateTagHelper("InputTagHelper", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule
@@ -100,34 +99,34 @@ public void CanHandleSymbolBoundAttributes7()
[Fact]
public void CanHandleWithoutEndTagTagStructure1()
{
- EvaluateData(WithoutEndTag_Descriptors, "");
+ EvaluateData(WithoutEndTag_TagHelpers, "");
}
[Fact]
public void CanHandleWithoutEndTagTagStructure2()
{
- EvaluateData(WithoutEndTag_Descriptors, "");
+ EvaluateData(WithoutEndTag_TagHelpers, "");
}
[Fact]
public void CanHandleWithoutEndTagTagStructure3()
{
- EvaluateData(WithoutEndTag_Descriptors, "");
+ EvaluateData(WithoutEndTag_TagHelpers, "");
}
[Fact]
public void CanHandleWithoutEndTagTagStructure4()
{
- EvaluateData(WithoutEndTag_Descriptors, "");
+ EvaluateData(WithoutEndTag_TagHelpers, "");
}
[Fact]
public void CanHandleWithoutEndTagTagStructure5()
{
- EvaluateData(WithoutEndTag_Descriptors, "");
+ EvaluateData(WithoutEndTag_TagHelpers, "");
}
- public static ImmutableArray GetTagStructureCompatibilityDescriptors(TagStructure structure1, TagStructure structure2)
+ public static TagHelperCollection GetTagStructureCompatibilityTagHelpers(TagStructure structure1, TagStructure structure2)
{
return
[
@@ -148,7 +147,7 @@ public static ImmutableArray GetTagStructureCompatibilityDe
public void AllowsCompatibleTagStructures1()
{
// Arrange
- var descriptors = GetTagStructureCompatibilityDescriptors(TagStructure.Unspecified, TagStructure.Unspecified);
+ var descriptors = GetTagStructureCompatibilityTagHelpers(TagStructure.Unspecified, TagStructure.Unspecified);
// Act & Assert
EvaluateData(descriptors, "");
@@ -158,7 +157,7 @@ public void AllowsCompatibleTagStructures1()
public void AllowsCompatibleTagStructures2()
{
// Arrange
- var descriptors = GetTagStructureCompatibilityDescriptors(TagStructure.Unspecified, TagStructure.Unspecified);
+ var descriptors = GetTagStructureCompatibilityTagHelpers(TagStructure.Unspecified, TagStructure.Unspecified);
// Act & Assert
EvaluateData(descriptors, "");
@@ -168,7 +167,7 @@ public void AllowsCompatibleTagStructures2()
public void AllowsCompatibleTagStructures3()
{
// Arrange
- var descriptors = GetTagStructureCompatibilityDescriptors(TagStructure.Unspecified, TagStructure.WithoutEndTag);
+ var descriptors = GetTagStructureCompatibilityTagHelpers(TagStructure.Unspecified, TagStructure.WithoutEndTag);
// Act & Assert
EvaluateData(descriptors, "");
@@ -178,7 +177,7 @@ public void AllowsCompatibleTagStructures3()
public void AllowsCompatibleTagStructures4()
{
// Arrange
- var descriptors = GetTagStructureCompatibilityDescriptors(TagStructure.WithoutEndTag, TagStructure.WithoutEndTag);
+ var descriptors = GetTagStructureCompatibilityTagHelpers(TagStructure.WithoutEndTag, TagStructure.WithoutEndTag);
// Act & Assert
EvaluateData(descriptors, "");
@@ -188,7 +187,7 @@ public void AllowsCompatibleTagStructures4()
public void AllowsCompatibleTagStructures5()
{
// Arrange
- var descriptors = GetTagStructureCompatibilityDescriptors(TagStructure.Unspecified, TagStructure.NormalOrSelfClosing);
+ var descriptors = GetTagStructureCompatibilityTagHelpers(TagStructure.Unspecified, TagStructure.NormalOrSelfClosing);
// Act & Assert
EvaluateData(descriptors, "");
@@ -198,7 +197,7 @@ public void AllowsCompatibleTagStructures5()
public void AllowsCompatibleTagStructures6()
{
// Arrange
- var descriptors = GetTagStructureCompatibilityDescriptors(TagStructure.Unspecified, TagStructure.WithoutEndTag);
+ var descriptors = GetTagStructureCompatibilityTagHelpers(TagStructure.Unspecified, TagStructure.WithoutEndTag);
// Act & Assert
EvaluateData(descriptors, "");
@@ -208,7 +207,7 @@ public void AllowsCompatibleTagStructures6()
public void AllowsCompatibleTagStructures7()
{
// Arrange
- var descriptors = GetTagStructureCompatibilityDescriptors(TagStructure.NormalOrSelfClosing, TagStructure.Unspecified);
+ var descriptors = GetTagStructureCompatibilityTagHelpers(TagStructure.NormalOrSelfClosing, TagStructure.Unspecified);
// Act & Assert
EvaluateData(descriptors, "");
@@ -218,7 +217,7 @@ public void AllowsCompatibleTagStructures7()
public void AllowsCompatibleTagStructures8()
{
// Arrange
- var descriptors = GetTagStructureCompatibilityDescriptors(TagStructure.WithoutEndTag, TagStructure.Unspecified);
+ var descriptors = GetTagStructureCompatibilityTagHelpers(TagStructure.WithoutEndTag, TagStructure.Unspecified);
// Act & Assert
EvaluateData(descriptors, "");
@@ -228,7 +227,7 @@ public void AllowsCompatibleTagStructures8()
public void AllowsCompatibleTagStructures_DirectiveAttribute_SelfClosing()
{
// Arrange
- ImmutableArray descriptors =
+ TagHelperCollection descriptors =
[
TagHelperDescriptorBuilder.CreateEventHandler("InputTagHelper1", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule
@@ -247,7 +246,7 @@ public void AllowsCompatibleTagStructures_DirectiveAttribute_SelfClosing()
public void AllowsCompatibleTagStructures_DirectiveAttribute_Void()
{
// Arrange
- ImmutableArray descriptors =
+ TagHelperCollection descriptors =
[
TagHelperDescriptorBuilder.CreateEventHandler("InputTagHelper1", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule
@@ -430,7 +429,7 @@ public void CreatesErrorForMalformedTagHelper8()
RunParseTreeRewriterTest("
", "strong", "p");
}
- public static ImmutableArray CodeTagHelperAttributes_Descriptors =
+ public static TagHelperCollection CodeTagHelperAttributes_TagHelpers =
[
TagHelperDescriptorBuilder.CreateTagHelper("PersonTagHelper", "personAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("person"))
@@ -460,85 +459,85 @@ public void CreatesErrorForMalformedTagHelper8()
[Fact]
public void UnderstandsMultipartNonStringTagHelperAttributes()
{
- EvaluateData(CodeTagHelperAttributes_Descriptors, " 123)()\" />");
+ EvaluateData(CodeTagHelperAttributes_TagHelpers, " 123)()\" />");
}
[Fact]
public void CreatesMarkupCodeSpansForNonStringTagHelperAttributes1()
{
- EvaluateData(CodeTagHelperAttributes_Descriptors, "");
+ EvaluateData(CodeTagHelperAttributes_TagHelpers, "");
}
[Fact]
public void CreatesMarkupCodeSpansForNonStringTagHelperAttributes2()
{
- EvaluateData(CodeTagHelperAttributes_Descriptors, "");
+ EvaluateData(CodeTagHelperAttributes_TagHelpers, "");
}
[Fact]
public void CreatesMarkupCodeSpansForNonStringTagHelperAttributes3()
{
- EvaluateData(CodeTagHelperAttributes_Descriptors, "");
+ EvaluateData(CodeTagHelperAttributes_TagHelpers, "");
}
[Fact]
public void CreatesMarkupCodeSpansForNonStringTagHelperAttributes4()
{
- EvaluateData(CodeTagHelperAttributes_Descriptors, "");
+ EvaluateData(CodeTagHelperAttributes_TagHelpers, "");
}
[Fact]
public void CreatesMarkupCodeSpansForNonStringTagHelperAttributes5()
{
- EvaluateData(CodeTagHelperAttributes_Descriptors, "");
+ EvaluateData(CodeTagHelperAttributes_TagHelpers, "");
}
[Fact]
public void CreatesMarkupCodeSpansForNonStringTagHelperAttributes6()
{
- EvaluateData(CodeTagHelperAttributes_Descriptors, "");
+ EvaluateData(CodeTagHelperAttributes_TagHelpers, "");
}
[Fact]
public void CreatesMarkupCodeSpansForNonStringTagHelperAttributes7()
{
- EvaluateData(CodeTagHelperAttributes_Descriptors, "");
+ EvaluateData(CodeTagHelperAttributes_TagHelpers, "");
}
[Fact]
public void CreatesMarkupCodeSpansForNonStringTagHelperAttributes8()
{
- EvaluateData(CodeTagHelperAttributes_Descriptors, "");
+ EvaluateData(CodeTagHelperAttributes_TagHelpers, "");
}
[Fact]
public void CreatesMarkupCodeSpansForNonStringTagHelperAttributes9()
{
- EvaluateData(CodeTagHelperAttributes_Descriptors, "");
+ EvaluateData(CodeTagHelperAttributes_TagHelpers, "");
}
[Fact]
public void CreatesMarkupCodeSpansForNonStringTagHelperAttributes10()
{
- EvaluateData(CodeTagHelperAttributes_Descriptors, "");
+ EvaluateData(CodeTagHelperAttributes_TagHelpers, "");
}
[Fact]
public void CreatesMarkupCodeSpansForNonStringTagHelperAttributes11()
{
- EvaluateData(CodeTagHelperAttributes_Descriptors, "");
+ EvaluateData(CodeTagHelperAttributes_TagHelpers, "");
}
[Fact]
public void CreatesMarkupCodeSpansForNonStringTagHelperAttributes12()
{
- EvaluateData(CodeTagHelperAttributes_Descriptors, "");
+ EvaluateData(CodeTagHelperAttributes_TagHelpers, "");
}
[Fact, WorkItem("https://github.com/dotnet/razor/issues/10186")]
public void CreatesMarkupCodeSpansForNonStringTagHelperAttributes13()
{
- EvaluateData(CodeTagHelperAttributes_Descriptors, """
+ EvaluateData(CodeTagHelperAttributes_TagHelpers, """
@{
var count = "1";
}
@@ -549,7 +548,7 @@ public void CreatesMarkupCodeSpansForNonStringTagHelperAttributes13()
[Fact, WorkItem("https://github.com/dotnet/razor/issues/10186")]
public void CreatesMarkupCodeSpansForNonStringTagHelperAttributes14()
{
- EvaluateData(CodeTagHelperAttributes_Descriptors, """
+ EvaluateData(CodeTagHelperAttributes_TagHelpers, """
@{
var @string = "1";
}
@@ -560,7 +559,7 @@ public void CreatesMarkupCodeSpansForNonStringTagHelperAttributes14()
[Fact, WorkItem("https://github.com/dotnet/razor/issues/10186")]
public void CreatesMarkupCodeSpansForNonStringTagHelperAttributes15()
{
- EvaluateData(CodeTagHelperAttributes_Descriptors, """
+ EvaluateData(CodeTagHelperAttributes_TagHelpers, """
@{
var count = "1";
}
@@ -571,7 +570,7 @@ public void CreatesMarkupCodeSpansForNonStringTagHelperAttributes15()
[Fact, WorkItem("https://github.com/dotnet/razor/issues/10186")]
public void CreatesMarkupCodeSpansForNonStringTagHelperAttributes16()
{
- EvaluateData(CodeTagHelperAttributes_Descriptors, """
+ EvaluateData(CodeTagHelperAttributes_TagHelpers, """
@{
var count = "1";
}
@@ -582,7 +581,7 @@ public void CreatesMarkupCodeSpansForNonStringTagHelperAttributes16()
[Fact, WorkItem("https://github.com/dotnet/razor/issues/10186")]
public void CreatesMarkupCodeSpansForNonStringTagHelperAttributes17()
{
- EvaluateData(CodeTagHelperAttributes_Descriptors, """
+ EvaluateData(CodeTagHelperAttributes_TagHelpers, """
@{
var count = 1;
}
@@ -593,7 +592,7 @@ public void CreatesMarkupCodeSpansForNonStringTagHelperAttributes17()
[Fact, WorkItem("https://github.com/dotnet/razor/issues/10186")]
public void CreatesMarkupCodeSpansForNonStringTagHelperAttributes18()
{
- EvaluateData(CodeTagHelperAttributes_Descriptors, """
+ EvaluateData(CodeTagHelperAttributes_TagHelpers, """
@{
var count = 1;
}
@@ -604,7 +603,7 @@ public void CreatesMarkupCodeSpansForNonStringTagHelperAttributes18()
[Fact, WorkItem("https://github.com/dotnet/razor/issues/10186")]
public void CreatesMarkupCodeSpansForNonStringTagHelperAttributes19()
{
- EvaluateData(CodeTagHelperAttributes_Descriptors, """
+ EvaluateData(CodeTagHelperAttributes_TagHelpers, """
@{
var count = 1;
}
@@ -615,7 +614,7 @@ public void CreatesMarkupCodeSpansForNonStringTagHelperAttributes19()
[Fact, WorkItem("https://github.com/dotnet/razor/issues/10186")]
public void CreatesMarkupCodeSpansForNonStringTagHelperAttributes20()
{
- EvaluateData(CodeTagHelperAttributes_Descriptors, """
+ EvaluateData(CodeTagHelperAttributes_TagHelpers, """
@{
var isAlive = true;
}
@@ -626,7 +625,7 @@ public void CreatesMarkupCodeSpansForNonStringTagHelperAttributes20()
[Fact, WorkItem("https://github.com/dotnet/razor/issues/10186")]
public void CreatesMarkupCodeSpansForNonStringTagHelperAttributes21()
{
- EvaluateData(CodeTagHelperAttributes_Descriptors, """
+ EvaluateData(CodeTagHelperAttributes_TagHelpers, """
@{
var obj = new { Prop = (object)1 };
}
@@ -637,7 +636,7 @@ public void CreatesMarkupCodeSpansForNonStringTagHelperAttributes21()
[Fact, WorkItem("https://github.com/dotnet/razor/issues/10186")]
public void CreatesMarkupCodeSpansForNonStringTagHelperAttributes22()
{
- EvaluateData(CodeTagHelperAttributes_Descriptors, """
+ EvaluateData(CodeTagHelperAttributes_TagHelpers, """
@{
var obj = new { Prop = (object)1 };
}
@@ -668,7 +667,7 @@ public void CreatesMarkupCodeSpansForNonStringTagHelperAttributes23()
[Fact, WorkItem("https://github.com/dotnet/razor/issues/10426")]
public void CreatesMarkupCodeSpans_EscapedExpression_01()
{
- EvaluateData(CodeTagHelperAttributes_Descriptors, """
+ EvaluateData(CodeTagHelperAttributes_TagHelpers, """
""");
}
@@ -676,7 +675,7 @@ public void CreatesMarkupCodeSpans_EscapedExpression_01()
[Fact, WorkItem("https://github.com/dotnet/razor/issues/10426")]
public void CreatesMarkupCodeSpans_EscapedExpression_02()
{
- EvaluateData(CodeTagHelperAttributes_Descriptors, """
+ EvaluateData(CodeTagHelperAttributes_TagHelpers, """
""");
}
@@ -684,7 +683,7 @@ public void CreatesMarkupCodeSpans_EscapedExpression_02()
[Fact, WorkItem("https://github.com/dotnet/razor/issues/10426")]
public void CreatesMarkupCodeSpans_EscapedExpression_03()
{
- EvaluateData(CodeTagHelperAttributes_Descriptors, """
+ EvaluateData(CodeTagHelperAttributes_TagHelpers, """
""");
}
@@ -692,7 +691,7 @@ public void CreatesMarkupCodeSpans_EscapedExpression_03()
[Fact, WorkItem("https://github.com/dotnet/razor/issues/10426")]
public void CreatesMarkupCodeSpans_EscapedExpression_04()
{
- EvaluateData(CodeTagHelperAttributes_Descriptors, """
+ EvaluateData(CodeTagHelperAttributes_TagHelpers, """
""");
}
@@ -700,7 +699,7 @@ public void CreatesMarkupCodeSpans_EscapedExpression_04()
[Fact, WorkItem("https://github.com/dotnet/razor/issues/10426")]
public void CreatesMarkupCodeSpans_EscapedExpression_05()
{
- EvaluateData(CodeTagHelperAttributes_Descriptors, """
+ EvaluateData(CodeTagHelperAttributes_TagHelpers, """
""");
}
@@ -708,7 +707,7 @@ public void CreatesMarkupCodeSpans_EscapedExpression_05()
[Fact, WorkItem("https://github.com/dotnet/razor/issues/10426")]
public void CreatesMarkupCodeSpans_EscapedExpression_06()
{
- EvaluateData(CodeTagHelperAttributes_Descriptors, """
+ EvaluateData(CodeTagHelperAttributes_TagHelpers, """
""");
}
@@ -716,7 +715,7 @@ public void CreatesMarkupCodeSpans_EscapedExpression_06()
[Fact, WorkItem("https://github.com/dotnet/razor/issues/10426")]
public void CreatesMarkupCodeSpans_EscapedExpression_07()
{
- EvaluateData(CodeTagHelperAttributes_Descriptors, """
+ EvaluateData(CodeTagHelperAttributes_TagHelpers, """
""");
}
@@ -724,7 +723,7 @@ public void CreatesMarkupCodeSpans_EscapedExpression_07()
[Fact, WorkItem("https://github.com/dotnet/razor/issues/10426")]
public void CreatesMarkupCodeSpans_EscapedExpression_08()
{
- EvaluateData(CodeTagHelperAttributes_Descriptors, """
+ EvaluateData(CodeTagHelperAttributes_TagHelpers, """
""");
}
@@ -732,7 +731,7 @@ public void CreatesMarkupCodeSpans_EscapedExpression_08()
[Fact, WorkItem("https://github.com/dotnet/razor/issues/10426")]
public void CreatesMarkupCodeSpans_EscapedExpression_09()
{
- EvaluateData(CodeTagHelperAttributes_Descriptors, """
+ EvaluateData(CodeTagHelperAttributes_TagHelpers, """
""");
}
@@ -740,7 +739,7 @@ public void CreatesMarkupCodeSpans_EscapedExpression_09()
[Fact, WorkItem("https://github.com/dotnet/razor/issues/10426")]
public void CreatesMarkupCodeSpans_EscapedExpression_10()
{
- EvaluateData(CodeTagHelperAttributes_Descriptors, """
+ EvaluateData(CodeTagHelperAttributes_TagHelpers, """
""");
}
@@ -1057,7 +1056,7 @@ public void UnderstandsEmptyAttributeTagHelpers5()
RunParseTreeRewriterTest("", "p");
}
- public static ImmutableArray EmptyTagHelperBoundAttribute_Descriptors =
+ public static TagHelperCollection EmptyTagHelperBoundAttribute_TagHelpers =
[
TagHelperDescriptorBuilder.CreateTagHelper("mythTagHelper", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("myth"))
@@ -1075,85 +1074,85 @@ public void UnderstandsEmptyAttributeTagHelpers5()
[Fact]
public void CreatesErrorForEmptyTagHelperBoundAttributes1()
{
- EvaluateData(EmptyTagHelperBoundAttribute_Descriptors, "");
+ EvaluateData(EmptyTagHelperBoundAttribute_TagHelpers, "");
}
[Fact]
public void CreatesErrorForEmptyTagHelperBoundAttributes2()
{
- EvaluateData(EmptyTagHelperBoundAttribute_Descriptors, "");
+ EvaluateData(EmptyTagHelperBoundAttribute_TagHelpers, "");
}
[Fact]
public void CreatesErrorForEmptyTagHelperBoundAttributes3()
{
- EvaluateData(EmptyTagHelperBoundAttribute_Descriptors, "");
+ EvaluateData(EmptyTagHelperBoundAttribute_TagHelpers, "");
}
[Fact]
public void CreatesErrorForEmptyTagHelperBoundAttributes4()
{
- EvaluateData(EmptyTagHelperBoundAttribute_Descriptors, "");
+ EvaluateData(EmptyTagHelperBoundAttribute_TagHelpers, "");
}
[Fact]
public void CreatesErrorForEmptyTagHelperBoundAttributes5()
{
- EvaluateData(EmptyTagHelperBoundAttribute_Descriptors, "");
+ EvaluateData(EmptyTagHelperBoundAttribute_TagHelpers, "");
}
[Fact]
public void CreatesErrorForEmptyTagHelperBoundAttributes6()
{
- EvaluateData(EmptyTagHelperBoundAttribute_Descriptors, "");
+ EvaluateData(EmptyTagHelperBoundAttribute_TagHelpers, "");
}
[Fact]
public void CreatesErrorForEmptyTagHelperBoundAttributes7()
{
- EvaluateData(EmptyTagHelperBoundAttribute_Descriptors, "");
+ EvaluateData(EmptyTagHelperBoundAttribute_TagHelpers, "");
}
[Fact]
public void CreatesErrorForEmptyTagHelperBoundAttributes8()
{
- EvaluateData(EmptyTagHelperBoundAttribute_Descriptors, "");
+ EvaluateData(EmptyTagHelperBoundAttribute_TagHelpers, "");
}
[Fact]
public void CreatesErrorForEmptyTagHelperBoundAttributes9()
{
- EvaluateData(EmptyTagHelperBoundAttribute_Descriptors, "");
+ EvaluateData(EmptyTagHelperBoundAttribute_TagHelpers, "");
}
[Fact]
public void CreatesErrorForEmptyTagHelperBoundAttributes10()
{
- EvaluateData(EmptyTagHelperBoundAttribute_Descriptors, "");
+ EvaluateData(EmptyTagHelperBoundAttribute_TagHelpers, "");
}
[Fact]
public void CreatesErrorForEmptyTagHelperBoundAttributes11()
{
- EvaluateData(EmptyTagHelperBoundAttribute_Descriptors, "");
+ EvaluateData(EmptyTagHelperBoundAttribute_TagHelpers, "");
}
[Fact]
public void CreatesErrorForEmptyTagHelperBoundAttributes12()
{
- EvaluateData(EmptyTagHelperBoundAttribute_Descriptors, "");
+ EvaluateData(EmptyTagHelperBoundAttribute_TagHelpers, "");
}
[Fact]
public void CreatesErrorForEmptyTagHelperBoundAttributes13()
{
- EvaluateData(EmptyTagHelperBoundAttribute_Descriptors, "");
+ EvaluateData(EmptyTagHelperBoundAttribute_TagHelpers, "");
}
[Fact]
public void CreatesErrorForEmptyTagHelperBoundAttributes14()
{
- EvaluateData(EmptyTagHelperBoundAttribute_Descriptors, "");
+ EvaluateData(EmptyTagHelperBoundAttribute_TagHelpers, "");
}
[Fact]
@@ -1469,7 +1468,7 @@ public void GeneratesExpectedOutputForUnboundDataDashAttributes_Block7()
RunParseTreeRewriterTest(document, "input");
}
- public static ImmutableArray MinimizedAttribute_Descriptors =
+ public static TagHelperCollection MinimizedAttribute_TagHelpers =
[
TagHelperDescriptorBuilder.CreateTagHelper("InputTagHelper1", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule
@@ -1525,7 +1524,7 @@ public void UnderstandsMinimizedAttributes_Document1()
var document = "";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1535,7 +1534,7 @@ public void UnderstandsMinimizedAttributes_Document2()
var document = "";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1545,7 +1544,7 @@ public void UnderstandsMinimizedAttributes_Document3()
var document = "";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1555,7 +1554,7 @@ public void UnderstandsMinimizedAttributes_Document4()
var document = "";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1565,7 +1564,7 @@ public void UnderstandsMinimizedAttributes_Document5()
var document = "";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1575,7 +1574,7 @@ public void UnderstandsMinimizedAttributes_Document6()
var document = "";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1585,7 +1584,7 @@ public void UnderstandsMinimizedAttributes_Document7()
var document = "";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1595,7 +1594,7 @@ public void UnderstandsMinimizedAttributes_Document8()
var document = "";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1605,7 +1604,7 @@ public void UnderstandsMinimizedAttributes_Document9()
var document = "";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1615,7 +1614,7 @@ public void UnderstandsMinimizedAttributes_Document10()
var document = "";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1625,7 +1624,7 @@ public void UnderstandsMinimizedAttributes_Document11()
var document = "";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1635,7 +1634,7 @@ public void UnderstandsMinimizedAttributes_Document12()
var document = "";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1645,7 +1644,7 @@ public void UnderstandsMinimizedAttributes_Document13()
var document = "";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1655,7 +1654,7 @@ public void UnderstandsMinimizedAttributes_Document14()
var document = "";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1665,7 +1664,7 @@ public void UnderstandsMinimizedAttributes_Document15()
var document = "";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1675,7 +1674,7 @@ public void UnderstandsMinimizedAttributes_Document16()
var document = "";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1685,7 +1684,7 @@ public void UnderstandsMinimizedAttributes_Document17()
var document = "";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1695,7 +1694,7 @@ public void UnderstandsMinimizedAttributes_Document18()
var document = "";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1705,7 +1704,7 @@ public void UnderstandsMinimizedAttributes_Document19()
var document = "";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1715,7 +1714,7 @@ public void UnderstandsMinimizedAttributes_Document20()
var document = "";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1725,7 +1724,7 @@ public void UnderstandsMinimizedAttributes_Document21()
var document = "";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1735,7 +1734,7 @@ public void UnderstandsMinimizedAttributes_Document22()
var document = "";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1745,7 +1744,7 @@ public void UnderstandsMinimizedAttributes_Document23()
var document = "";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1755,7 +1754,7 @@ public void UnderstandsMinimizedAttributes_Document24()
var document = "";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1765,7 +1764,7 @@ public void UnderstandsMinimizedAttributes_Document25()
var document = "";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1775,7 +1774,7 @@ public void UnderstandsMinimizedAttributes_Document26()
var document = "";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1785,7 +1784,7 @@ public void UnderstandsMinimizedAttributes_Document27()
var document = "";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1795,7 +1794,7 @@ public void UnderstandsMinimizedAttributes_Document28()
var document = "";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1805,7 +1804,7 @@ public void UnderstandsMinimizedAttributes_Document29()
var document = "";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1816,7 +1815,7 @@ public void UnderstandsMinimizedAttributes_Document30()
var document = $"";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1827,7 +1826,7 @@ public void UnderstandsMinimizedAttributes_Document31()
var document = $"";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1838,7 +1837,7 @@ public void UnderstandsMinimizedAttributes_Document32()
var document = $"";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1849,7 +1848,7 @@ public void UnderstandsMinimizedAttributes_Document33()
var document = $"";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1862,7 +1861,7 @@ public void UnderstandsMinimizedAttributes_Block1()
document = $"@{{{document}}}";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1875,7 +1874,7 @@ public void UnderstandsMinimizedAttributes_Block2()
document = $"@{{{document}}}";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1888,7 +1887,7 @@ public void UnderstandsMinimizedAttributes_Block3()
document = $"@{{{document}}}";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1901,7 +1900,7 @@ public void UnderstandsMinimizedAttributes_Block4()
document = $"@{{{document}}}";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1914,7 +1913,7 @@ public void UnderstandsMinimizedAttributes_Block5()
document = $"@{{{document}}}";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1927,7 +1926,7 @@ public void UnderstandsMinimizedAttributes_Block6()
document = $"@{{{document}}}";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1940,7 +1939,7 @@ public void UnderstandsMinimizedAttributes_Block7()
document = $"@{{{document}}}";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1953,7 +1952,7 @@ public void UnderstandsMinimizedAttributes_Block8()
document = $"@{{{document}}}";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1966,7 +1965,7 @@ public void UnderstandsMinimizedAttributes_Block9()
document = $"@{{{document}}}";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1979,7 +1978,7 @@ public void UnderstandsMinimizedAttributes_Block10()
document = $"@{{{document}}}";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -1992,7 +1991,7 @@ public void UnderstandsMinimizedAttributes_Block11()
document = $"@{{{document}}}";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -2005,7 +2004,7 @@ public void UnderstandsMinimizedAttributes_Block12()
document = $"@{{{document}}}";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -2018,7 +2017,7 @@ public void UnderstandsMinimizedAttributes_Block13()
document = $"@{{{document}}}";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -2031,7 +2030,7 @@ public void UnderstandsMinimizedAttributes_Block14()
document = $"@{{{document}}}";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -2044,7 +2043,7 @@ public void UnderstandsMinimizedAttributes_Block15()
document = $"@{{{document}}}";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -2057,7 +2056,7 @@ public void UnderstandsMinimizedAttributes_Block16()
document = $"@{{{document}}}";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -2070,7 +2069,7 @@ public void UnderstandsMinimizedAttributes_Block17()
document = $"@{{{document}}}";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -2083,7 +2082,7 @@ public void UnderstandsMinimizedAttributes_Block18()
document = $"@{{{document}}}";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -2096,7 +2095,7 @@ public void UnderstandsMinimizedAttributes_Block19()
document = $"@{{{document}}}";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -2109,7 +2108,7 @@ public void UnderstandsMinimizedAttributes_Block20()
document = $"@{{{document}}}";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -2122,7 +2121,7 @@ public void UnderstandsMinimizedAttributes_Block21()
document = $"@{{{document}}}";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -2135,7 +2134,7 @@ public void UnderstandsMinimizedAttributes_Block22()
document = $"@{{{document}}}";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -2148,7 +2147,7 @@ public void UnderstandsMinimizedAttributes_Block23()
document = $"@{{{document}}}";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -2161,7 +2160,7 @@ public void UnderstandsMinimizedAttributes_Block24()
document = $"@{{{document}}}";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -2174,7 +2173,7 @@ public void UnderstandsMinimizedAttributes_Block25()
document = $"@{{{document}}}";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -2187,7 +2186,7 @@ public void UnderstandsMinimizedAttributes_Block26()
document = $"@{{{document}}}";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -2200,7 +2199,7 @@ public void UnderstandsMinimizedAttributes_Block27()
document = $"@{{{document}}}";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -2213,7 +2212,7 @@ public void UnderstandsMinimizedAttributes_Block28()
document = $"@{{{document}}}";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -2226,7 +2225,7 @@ public void UnderstandsMinimizedAttributes_Block29()
document = $"@{{{document}}}";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -2240,7 +2239,7 @@ public void UnderstandsMinimizedAttributes_Block30()
document = $"@{{{document}}}";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -2254,7 +2253,7 @@ public void UnderstandsMinimizedAttributes_Block31()
document = $"@{{{document}}}";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -2268,7 +2267,7 @@ public void UnderstandsMinimizedAttributes_Block32()
document = $"@{{{document}}}";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
@@ -2282,55 +2281,55 @@ public void UnderstandsMinimizedAttributes_Block33()
document = $"@{{{document}}}";
// Act & Assert
- EvaluateData(MinimizedAttribute_Descriptors, document);
+ EvaluateData(MinimizedAttribute_TagHelpers, document);
}
[Fact]
public void UnderstandsMinimizedAttributes_PartialTags1()
{
- EvaluateData(MinimizedAttribute_Descriptors, " descriptors =
+ TagHelperCollection descriptors =
[
TagHelperDescriptorBuilder.CreateTagHelper("InputTagHelper", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule
@@ -2364,7 +2363,7 @@ public void FeatureDisabled_AddsErrorForMinimizedBooleanBoundAttributes()
{
// Arrange
var document = "";
- ImmutableArray descriptors =
+ TagHelperCollection descriptors =
[
TagHelperDescriptorBuilder.CreateTagHelper("InputTagHelper", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule
@@ -2390,7 +2389,7 @@ public void Rewrites_ComponentDirectiveAttributes()
{
// Arrange
var document = @"";
- ImmutableArray descriptors =
+ TagHelperCollection descriptors =
[
TagHelperDescriptorBuilder.Create(TagHelperKind.Bind, "Bind", ComponentsApi.AssemblyName)
.TypeName(
@@ -2434,7 +2433,7 @@ public void Rewrites_MinimizedComponentDirectiveAttributes()
{
// Arrange
var document = @"";
- ImmutableArray descriptors =
+ TagHelperCollection descriptors =
[
TagHelperDescriptorBuilder.Create(TagHelperKind.Bind, "Bind", ComponentsApi.AssemblyName)
.TypeName(
@@ -2477,7 +2476,8 @@ public void Rewrites_MinimizedComponentDirectiveAttributes()
public void TagHelper_AttributeAfterRazorComment()
{
// Arrange
- var descriptors = ImmutableArray.Create(
+ TagHelperCollection tagHelpers =
+ [
TagHelperDescriptorBuilder.CreateTagHelper("PTagHelper", "TestAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("p"))
.BoundAttributeDescriptor(attribute => attribute
@@ -2488,10 +2488,11 @@ public void TagHelper_AttributeAfterRazorComment()
.Name("not-visible")
.PropertyName("NotVisible")
.TypeName(typeof(bool).FullName))
- .Build());
+ .Build()
+ ];
// Act & Assert
- EvaluateData(descriptors, """
+ EvaluateData(tagHelpers, """
rule.RequireTagName("p"))
.BoundAttributeDescriptor(attribute => attribute
@@ -2519,10 +2521,11 @@ public void TagHelper_MultipleAttributesAfterRazorComment()
.Name("attr-3")
.PropertyName("Attr3")
.TypeName(typeof(string).FullName))
- .Build());
+ .Build()
+ ];
// Act & Assert
- EvaluateData(descriptors, """
+ EvaluateData(tagHelpers, """
""");
}
@@ -2531,7 +2534,8 @@ public void TagHelper_MultipleAttributesAfterRazorComment()
public void TagHelper_MultipleInterleavedRazorComments()
{
// Arrange
- var descriptors = ImmutableArray.Create(
+ TagHelperCollection tagHelpers =
+ [
TagHelperDescriptorBuilder.CreateTagHelper("InputTagHelper", "TestAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("input"))
.BoundAttributeDescriptor(attribute => attribute
@@ -2542,10 +2546,11 @@ public void TagHelper_MultipleInterleavedRazorComments()
.Name("value")
.PropertyName("Value")
.TypeName(typeof(string).FullName))
- .Build());
+ .Build()
+ ];
// Act & Assert
- EvaluateData(descriptors, """
+ EvaluateData(tagHelpers, """
""");
}
@@ -2554,7 +2559,8 @@ public void TagHelper_MultipleInterleavedRazorComments()
public void TagHelper_MinimizedAttributeAfterRazorComment()
{
// Arrange
- var descriptors = ImmutableArray.Create(
+ TagHelperCollection tagHelpers =
+ [
TagHelperDescriptorBuilder.CreateTagHelper("InputTagHelper", "TestAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("input"))
.BoundAttributeDescriptor(attribute => attribute
@@ -2565,10 +2571,11 @@ public void TagHelper_MinimizedAttributeAfterRazorComment()
.Name("checked")
.PropertyName("Checked")
.TypeName(typeof(bool).FullName))
- .Build());
+ .Build()
+ ];
// Act & Assert
- EvaluateData(descriptors, """
+ EvaluateData(tagHelpers, """
""");
}
diff --git a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/Legacy/TagHelperParseTreeRewriterTest.cs b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/Legacy/TagHelperParseTreeRewriterTest.cs
index 1af193083e2..5047a11285b 100644
--- a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/Legacy/TagHelperParseTreeRewriterTest.cs
+++ b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/Legacy/TagHelperParseTreeRewriterTest.cs
@@ -3,7 +3,6 @@
using System;
using System.Collections.Generic;
-using System.Collections.Immutable;
using System.Linq;
using Microsoft.AspNetCore.Razor.Language.Syntax;
using Xunit;
@@ -66,7 +65,7 @@ public void GetAttributeNameValuePairs_ParsesPairsCorrectly(
Assert.Equal(expectedPairs, pairs);
}
- public static ImmutableArray PartialRequiredParentTags_Descriptors =
+ public static readonly TagHelperCollection PartialRequiredParentTags_TagHelpers =
[
TagHelperDescriptorBuilder.CreateTagHelper("StrongTagHelper", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("strong"))
@@ -84,45 +83,45 @@ public void GetAttributeNameValuePairs_ParsesPairsCorrectly(
public void UnderstandsPartialRequiredParentTags1()
{
var document = "";
- EvaluateData(PartialRequiredParentTags_Descriptors, document);
+ EvaluateData(PartialRequiredParentTags_TagHelpers, document);
}
[Fact]
public void UnderstandsPartialRequiredParentTags2()
{
var document = "";
- EvaluateData(PartialRequiredParentTags_Descriptors, document);
+ EvaluateData(PartialRequiredParentTags_TagHelpers, document);
}
[Fact]
public void UnderstandsPartialRequiredParentTags3()
{
var document = "
";
- EvaluateData(PartialRequiredParentTags_Descriptors, document);
+ EvaluateData(PartialRequiredParentTags_TagHelpers, document);
}
[Fact]
public void UnderstandsPartialRequiredParentTags4()
{
var document = "<<
";
- EvaluateData(PartialRequiredParentTags_Descriptors, document);
+ EvaluateData(PartialRequiredParentTags_TagHelpers, document);
}
[Fact]
public void UnderstandsPartialRequiredParentTags5()
{
var document = "<<
";
- EvaluateData(PartialRequiredParentTags_Descriptors, document);
+ EvaluateData(PartialRequiredParentTags_TagHelpers, document);
}
[Fact]
public void UnderstandsPartialRequiredParentTags6()
{
var document = "<<<
";
- EvaluateData(PartialRequiredParentTags_Descriptors, document);
+ EvaluateData(PartialRequiredParentTags_TagHelpers, document);
}
- public static ImmutableArray NestedVoidSelfClosingRequiredParent_Descriptors =
+ public static readonly TagHelperCollection NestedVoidSelfClosingRequiredParent_TagHelpers =
[
TagHelperDescriptorBuilder.CreateTagHelper("InputTagHelper", "SomeAssembly")
.TagMatchingRuleDescriptor(rule =>
@@ -145,7 +144,7 @@ public void UnderstandsPartialRequiredParentTags6()
.Build(),
];
- public static ImmutableArray CatchAllAttribute_Descriptors =
+ public static readonly TagHelperCollection CatchAllAttribute_TagHelpers =
[
TagHelperDescriptorBuilder.CreateEventHandler("InputTagHelper1", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule
@@ -161,66 +160,66 @@ public void UnderstandsPartialRequiredParentTags6()
public void UnderstandsInvalidHtml()
{
var document = @" {}"">Miscolored!";
- EvaluateData(CatchAllAttribute_Descriptors, document);
+ EvaluateData(CatchAllAttribute_TagHelpers, document);
}
[Fact]
public void UnderstandsNestedVoidSelfClosingRequiredParent1()
{
var document = "";
- EvaluateData(NestedVoidSelfClosingRequiredParent_Descriptors, document);
+ EvaluateData(NestedVoidSelfClosingRequiredParent_TagHelpers, document);
}
[Fact]
public void UnderstandsNestedVoidSelfClosingRequiredParent2()
{
var document = "
";
- EvaluateData(NestedVoidSelfClosingRequiredParent_Descriptors, document);
+ EvaluateData(NestedVoidSelfClosingRequiredParent_TagHelpers, document);
}
[Fact]
public void UnderstandsNestedVoidSelfClosingRequiredParent3()
{
var document = "
";
- EvaluateData(NestedVoidSelfClosingRequiredParent_Descriptors, document);
+ EvaluateData(NestedVoidSelfClosingRequiredParent_TagHelpers, document);
}
[Fact]
public void UnderstandsNestedVoidSelfClosingRequiredParent4()
{
var document = "
";
- EvaluateData(NestedVoidSelfClosingRequiredParent_Descriptors, document);
+ EvaluateData(NestedVoidSelfClosingRequiredParent_TagHelpers, document);
}
[Fact]
public void UnderstandsNestedVoidSelfClosingRequiredParent5()
{
var document = "";
- EvaluateData(NestedVoidSelfClosingRequiredParent_Descriptors, document);
+ EvaluateData(NestedVoidSelfClosingRequiredParent_TagHelpers, document);
}
[Fact]
public void UnderstandsNestedVoidSelfClosingRequiredParent6()
{
var document = "
";
- EvaluateData(NestedVoidSelfClosingRequiredParent_Descriptors, document);
+ EvaluateData(NestedVoidSelfClosingRequiredParent_TagHelpers, document);
}
[Fact]
public void UnderstandsNestedVoidSelfClosingRequiredParent7()
{
var document = "
";
- EvaluateData(NestedVoidSelfClosingRequiredParent_Descriptors, document);
+ EvaluateData(NestedVoidSelfClosingRequiredParent_TagHelpers, document);
}
[Fact]
public void UnderstandsNestedVoidSelfClosingRequiredParent8()
{
var document = "
";
- EvaluateData(NestedVoidSelfClosingRequiredParent_Descriptors, document);
+ EvaluateData(NestedVoidSelfClosingRequiredParent_TagHelpers, document);
}
- public static ImmutableArray NestedRequiredParent_Descriptors =
+ public static readonly TagHelperCollection NestedRequiredParent_TagHelpers =
[
TagHelperDescriptorBuilder.CreateTagHelper("StrongTagHelper", "SomeAssembly")
.TagMatchingRuleDescriptor(rule =>
@@ -241,35 +240,35 @@ public void UnderstandsNestedVoidSelfClosingRequiredParent8()
public void UnderstandsNestedRequiredParent1()
{
var document = "";
- EvaluateData(NestedRequiredParent_Descriptors, document);
+ EvaluateData(NestedRequiredParent_TagHelpers, document);
}
[Fact]
public void UnderstandsNestedRequiredParent2()
{
var document = "
";
- EvaluateData(NestedRequiredParent_Descriptors, document);
+ EvaluateData(NestedRequiredParent_TagHelpers, document);
}
[Fact]
public void UnderstandsNestedRequiredParent3()
{
var document = "
";
- EvaluateData(NestedRequiredParent_Descriptors, document);
+ EvaluateData(NestedRequiredParent_TagHelpers, document);
}
[Fact]
public void UnderstandsNestedRequiredParent4()
{
var document = "";
- EvaluateData(NestedRequiredParent_Descriptors, document);
+ EvaluateData(NestedRequiredParent_TagHelpers, document);
}
[Fact]
public void UnderstandsNestedRequiredParent5()
{
var document = "
";
- EvaluateData(NestedRequiredParent_Descriptors, document);
+ EvaluateData(NestedRequiredParent_TagHelpers, document);
}
[Fact]
@@ -277,7 +276,7 @@ public void UnderstandsTagHelperPrefixAndAllowedChildren()
{
// Arrange
var documentContent = "";
- ImmutableArray descriptors =
+ TagHelperCollection tagHelpers =
[
TagHelperDescriptorBuilder.CreateTagHelper("PTagHelper", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("p"))
@@ -290,7 +289,7 @@ public void UnderstandsTagHelperPrefixAndAllowedChildren()
// Act & Assert
EvaluateData(
- descriptors,
+ tagHelpers,
documentContent,
tagHelperPrefix: "th:");
}
@@ -300,7 +299,7 @@ public void UnderstandsTagHelperPrefixAndAllowedChildrenAndRequireParent()
{
// Arrange
var documentContent = "";
- ImmutableArray descriptors =
+ TagHelperCollection tagHelpers =
[
TagHelperDescriptorBuilder.CreateTagHelper("PTagHelper", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("p"))
@@ -313,7 +312,7 @@ public void UnderstandsTagHelperPrefixAndAllowedChildrenAndRequireParent()
// Act & Assert
EvaluateData(
- descriptors,
+ tagHelpers,
documentContent,
tagHelperPrefix: "th:");
}
@@ -324,7 +323,7 @@ public void InvalidStructure_UnderstandsTHPrefixAndAllowedChildrenAndRequirePare
// Rewrite_InvalidStructure_UnderstandsTagHelperPrefixAndAllowedChildrenAndRequireParent
// Arrange
var documentContent = "";
- ImmutableArray descriptors =
+ TagHelperCollection tagHelpers =
[
TagHelperDescriptorBuilder.CreateTagHelper("PTagHelper", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("p"))
@@ -337,7 +336,7 @@ public void InvalidStructure_UnderstandsTHPrefixAndAllowedChildrenAndRequirePare
// Act & Assert
EvaluateData(
- descriptors,
+ tagHelpers,
documentContent,
tagHelperPrefix: "th:");
}
@@ -347,7 +346,7 @@ public void NonTagHelperChild_UnderstandsTagHelperPrefixAndAllowedChildren()
{
// Arrange
var documentContent = "";
- ImmutableArray descriptors =
+ TagHelperCollection tagHelpers =
[
TagHelperDescriptorBuilder.CreateTagHelper("PTagHelper", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("p"))
@@ -357,7 +356,7 @@ public void NonTagHelperChild_UnderstandsTagHelperPrefixAndAllowedChildren()
// Act & Assert
EvaluateData(
- descriptors,
+ tagHelpers,
documentContent,
tagHelperPrefix: "th:");
}
@@ -429,7 +428,7 @@ public void CanHandleInvalidChildrenWithWhitespace()
""";
- ImmutableArray descriptors =
+ TagHelperCollection tagHelpers =
[
TagHelperDescriptorBuilder.CreateTagHelper("PTagHelper", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("p"))
@@ -438,7 +437,7 @@ public void CanHandleInvalidChildrenWithWhitespace()
];
// Act & Assert
- EvaluateData(descriptors, documentContent);
+ EvaluateData(tagHelpers, documentContent);
}
[Fact]
@@ -446,7 +445,7 @@ public void RecoversWhenRequiredAttributeMismatchAndRestrictedChildren()
{
// Arrange
var documentContent = "";
- ImmutableArray descriptors =
+ TagHelperCollection tagHelpers =
[
TagHelperDescriptorBuilder.CreateTagHelper("StrongTagHelper", "SomeAssembly")
.TagMatchingRuleDescriptor(rule =>
@@ -458,7 +457,7 @@ public void RecoversWhenRequiredAttributeMismatchAndRestrictedChildren()
];
// Act & Assert
- EvaluateData(descriptors, documentContent);
+ EvaluateData(tagHelpers, documentContent);
}
[Fact]
@@ -466,7 +465,7 @@ public void CanHandleMultipleTagHelpersWithAllowedChildren_OneNull()
{
// Arrange
var documentContent = "Hello World
";
- ImmutableArray descriptors =
+ TagHelperCollection tagHelpers =
[
TagHelperDescriptorBuilder.CreateTagHelper("PTagHelper1", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("p"))
@@ -488,7 +487,7 @@ public void CanHandleMultipleTagHelpersWithAllowedChildren_OneNull()
];
// Act & Assert
- EvaluateData(descriptors, documentContent);
+ EvaluateData(tagHelpers, documentContent);
}
[Fact]
@@ -496,7 +495,7 @@ public void CanHandleMultipleTagHelpersWithAllowedChildren()
{
// Arrange
var documentContent = "Hello World
";
- ImmutableArray descriptors =
+ TagHelperCollection tagHelpers =
[
TagHelperDescriptorBuilder.CreateTagHelper("PTagHelper1", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("p"))
@@ -518,7 +517,7 @@ public void CanHandleMultipleTagHelpersWithAllowedChildren()
];
// Act & Assert
- EvaluateData(descriptors, documentContent);
+ EvaluateData(tagHelpers, documentContent);
}
[Fact]
@@ -526,10 +525,10 @@ public void UnderstandsAllowedChildren1()
{
// Arrange
var documentContent = "
";
- var descriptors = GetAllowedChildrenTagHelperDescriptors(["br"]);
+ var tagHelpers = GetAllowedChildrenTagHelpers(["br"]);
// Act & Assert
- EvaluateData(descriptors, documentContent);
+ EvaluateData(tagHelpers, documentContent);
}
[Fact]
@@ -541,10 +540,10 @@ public void UnderstandsAllowedChildren2()
""";
- var descriptors = GetAllowedChildrenTagHelperDescriptors(["br"]);
+ var tagHelpers = GetAllowedChildrenTagHelpers(["br"]);
// Act & Assert
- EvaluateData(descriptors, documentContent);
+ EvaluateData(tagHelpers, documentContent);
}
[Fact]
@@ -552,10 +551,10 @@ public void UnderstandsAllowedChildren3()
{
// Arrange
var documentContent = "
";
- var descriptors = GetAllowedChildrenTagHelperDescriptors(["strong"]);
+ var tagHelpers = GetAllowedChildrenTagHelpers(["strong"]);
// Act & Assert
- EvaluateData(descriptors, documentContent);
+ EvaluateData(tagHelpers, documentContent);
}
[Fact]
@@ -563,10 +562,10 @@ public void UnderstandsAllowedChildren4()
{
// Arrange
var documentContent = "Hello
";
- var descriptors = GetAllowedChildrenTagHelperDescriptors(["strong"]);
+ var tagHelpers = GetAllowedChildrenTagHelpers(["strong"]);
// Act & Assert
- EvaluateData(descriptors, documentContent);
+ EvaluateData(tagHelpers, documentContent);
}
[Fact]
@@ -574,10 +573,10 @@ public void UnderstandsAllowedChildren5()
{
// Arrange
var documentContent = "
";
- var descriptors = GetAllowedChildrenTagHelperDescriptors(["br", "strong"]);
+ var tagHelpers = GetAllowedChildrenTagHelpers(["br", "strong"]);
// Act & Assert
- EvaluateData(descriptors, documentContent);
+ EvaluateData(tagHelpers, documentContent);
}
[Fact]
@@ -585,10 +584,10 @@ public void UnderstandsAllowedChildren6()
{
// Arrange
var documentContent = "
Hello
";
- var descriptors = GetAllowedChildrenTagHelperDescriptors(["strong"]);
+ var tagHelpers = GetAllowedChildrenTagHelpers(["strong"]);
// Act & Assert
- EvaluateData(descriptors, documentContent);
+ EvaluateData(tagHelpers, documentContent);
}
[Fact]
@@ -596,10 +595,10 @@ public void UnderstandsAllowedChildren7()
{
// Arrange
var documentContent = "Title:
Something
";
- var descriptors = GetAllowedChildrenTagHelperDescriptors(["strong"]);
+ var tagHelpers = GetAllowedChildrenTagHelpers(["strong"]);
// Act & Assert
- EvaluateData(descriptors, documentContent);
+ EvaluateData(tagHelpers, documentContent);
}
[Fact]
@@ -607,10 +606,10 @@ public void UnderstandsAllowedChildren8()
{
// Arrange
var documentContent = "Title:
Something
";
- var descriptors = GetAllowedChildrenTagHelperDescriptors(["strong", "br"]);
+ var tagHelpers = GetAllowedChildrenTagHelpers(["strong", "br"]);
// Act & Assert
- EvaluateData(descriptors, documentContent);
+ EvaluateData(tagHelpers, documentContent);
}
[Fact]
@@ -618,10 +617,10 @@ public void UnderstandsAllowedChildren9()
{
// Arrange
var documentContent = " Title:
Something
";
- var descriptors = GetAllowedChildrenTagHelperDescriptors(["strong", "br"]);
+ var tagHelpers = GetAllowedChildrenTagHelpers(["strong", "br"]);
// Act & Assert
- EvaluateData(descriptors, documentContent);
+ EvaluateData(tagHelpers, documentContent);
}
[Fact]
@@ -629,10 +628,10 @@ public void UnderstandsAllowedChildren10()
{
// Arrange
var documentContent = "Title:
A Very Cool
Something
";
- var descriptors = GetAllowedChildrenTagHelperDescriptors(["strong"]);
+ var tagHelpers = GetAllowedChildrenTagHelpers(["strong"]);
// Act & Assert
- EvaluateData(descriptors, documentContent);
+ EvaluateData(tagHelpers, documentContent);
}
[Fact]
@@ -640,10 +639,10 @@ public void UnderstandsAllowedChildren11()
{
// Arrange
var documentContent = "Title:
A Very Cool
Something
";
- var descriptors = GetAllowedChildrenTagHelperDescriptors(["custom"]);
+ var tagHelpers = GetAllowedChildrenTagHelpers(["custom"]);
// Act & Assert
- EvaluateData(descriptors, documentContent);
+ EvaluateData(tagHelpers, documentContent);
}
[Fact]
@@ -651,10 +650,10 @@ public void UnderstandsAllowedChildren12()
{
// Arrange
var documentContent = "";
- var descriptors = GetAllowedChildrenTagHelperDescriptors(["custom"]);
+ var tagHelpers = GetAllowedChildrenTagHelpers(["custom"]);
// Act & Assert
- EvaluateData(descriptors, documentContent);
+ EvaluateData(tagHelpers, documentContent);
}
[Fact]
@@ -662,10 +661,10 @@ public void UnderstandsAllowedChildren13()
{
// Arrange
var documentContent = "<
";
- var descriptors = GetAllowedChildrenTagHelperDescriptors(["custom"]);
+ var tagHelpers = GetAllowedChildrenTagHelpers(["custom"]);
// Act & Assert
- EvaluateData(descriptors, documentContent);
+ EvaluateData(tagHelpers, documentContent);
}
[Fact]
@@ -673,13 +672,13 @@ public void UnderstandsAllowedChildren14()
{
// Arrange
var documentContent = "
:Hello:
";
- var descriptors = GetAllowedChildrenTagHelperDescriptors(["custom", "strong"]);
+ var tagHelpers = GetAllowedChildrenTagHelpers(["custom", "strong"]);
// Act & Assert
- EvaluateData(descriptors, documentContent);
+ EvaluateData(tagHelpers, documentContent);
}
- private static ImmutableArray GetAllowedChildrenTagHelperDescriptors(string[] allowedChildren)
+ private static TagHelperCollection GetAllowedChildrenTagHelpers(string[] allowedChildren)
{
var pTagHelperBuilder = TagHelperDescriptorBuilder.CreateTagHelper("PTagHelper", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("p"));
@@ -722,13 +721,13 @@ public void AllowsSimpleHtmlCommentsAsChildren()
pTagHelperBuilder.AllowChildTag(childTag);
}
- ImmutableArray descriptors =
+ TagHelperCollection tagHelpers =
[
pTagHelperBuilder.Build()
];
// Act & Assert
- EvaluateData(descriptors, document);
+ EvaluateData(tagHelpers, document);
}
[Fact]
@@ -747,14 +746,14 @@ public void DoesntAllowSimpleHtmlCommentsAsChildrenWhenFeatureFlagIsOff()
pTagHelperBuilder.AllowChildTag(childTag);
}
- ImmutableArray descriptors =
+ TagHelperCollection tagHelpers =
[
pTagHelperBuilder.Build()
];
// Act & Assert
EvaluateData(
- descriptors,
+ tagHelpers,
document,
languageVersion: RazorLanguageVersion.Version_2_0,
fileKind: RazorFileKind.Legacy);
@@ -778,13 +777,13 @@ public void FailsForContentWithCommentsAsChildren()
pTagHelperBuilder.AllowChildTag(childTag);
}
- ImmutableArray descriptors =
+ TagHelperCollection tagHelpers =
[
pTagHelperBuilder.Build()
];
// Act & Assert
- EvaluateData(descriptors, document);
+ EvaluateData(tagHelpers, document);
}
[Fact]
@@ -804,13 +803,13 @@ public void AllowsRazorCommentsAsChildren()
pTagHelperBuilder.AllowChildTag(childTag);
}
- ImmutableArray descriptors =
+ TagHelperCollection tagHelpers =
[
pTagHelperBuilder.Build()
];
// Act & Assert
- EvaluateData(descriptors, document);
+ EvaluateData(tagHelpers, document);
}
[Fact]
@@ -833,13 +832,13 @@ public void AllowsRazorMarkupInHtmlComment()
pTagHelperBuilder.AllowChildTag(childTag);
}
- ImmutableArray descriptors =
+ TagHelperCollection tagHelpers =
[
pTagHelperBuilder.Build()
];
// Act & Assert
- EvaluateData(descriptors, document);
+ EvaluateData(tagHelpers, document);
}
[Fact]
@@ -847,7 +846,7 @@ public void UnderstandsNullTagNameWithAllowedChildrenForCatchAll()
{
// Arrange
var documentContent = "";
- ImmutableArray descriptors =
+ TagHelperCollection tagHelpers =
[
TagHelperDescriptorBuilder.CreateTagHelper("PTagHelper", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("p"))
@@ -859,7 +858,7 @@ public void UnderstandsNullTagNameWithAllowedChildrenForCatchAll()
];
// Act & Assert
- EvaluateData(descriptors, documentContent);
+ EvaluateData(tagHelpers, documentContent);
}
[Fact]
@@ -867,7 +866,7 @@ public void UnderstandsNullTagNameWithAllowedChildrenForCatchAllWithPrefix()
{
// Arrange
var documentContent = "";
- ImmutableArray descriptors =
+ TagHelperCollection tagHelpers =
[
TagHelperDescriptorBuilder.CreateTagHelper("PTagHelper", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("p"))
@@ -879,7 +878,7 @@ public void UnderstandsNullTagNameWithAllowedChildrenForCatchAllWithPrefix()
];
// Act & Assert
- EvaluateData(descriptors, documentContent, "th:");
+ EvaluateData(tagHelpers, documentContent, "th:");
}
[Fact]
@@ -887,7 +886,7 @@ public void CanHandleStartTagOnlyTagTagMode()
{
// Arrange
var documentContent = "";
- ImmutableArray descriptors =
+ TagHelperCollection tagHelpers =
[
TagHelperDescriptorBuilder.CreateTagHelper("InputTagHelper", "SomeAssembly")
.TagMatchingRuleDescriptor(rule =>
@@ -898,7 +897,7 @@ public void CanHandleStartTagOnlyTagTagMode()
];
// Act & Assert
- EvaluateData(descriptors, documentContent);
+ EvaluateData(tagHelpers, documentContent);
}
[Fact]
@@ -906,7 +905,7 @@ public void CreatesErrorForWithoutEndTagTagStructureForEndTags()
{
// Arrange
var documentContent = "";
- ImmutableArray descriptors =
+ TagHelperCollection tagHelpers =
[
TagHelperDescriptorBuilder.CreateTagHelper("InputTagHelper", "SomeAssembly")
.TagMatchingRuleDescriptor(rule =>
@@ -917,7 +916,7 @@ public void CreatesErrorForWithoutEndTagTagStructureForEndTags()
];
// Act & Assert
- EvaluateData(descriptors, documentContent);
+ EvaluateData(tagHelpers, documentContent);
}
[Fact]
@@ -925,7 +924,7 @@ public void CreatesErrorForInconsistentTagStructures()
{
// Arrange
var documentContent = "";
- ImmutableArray descriptors =
+ TagHelperCollection tagHelpers =
[
TagHelperDescriptorBuilder.CreateTagHelper("InputTagHelper1", "SomeAssembly")
.TagMatchingRuleDescriptor(rule =>
@@ -942,10 +941,10 @@ public void CreatesErrorForInconsistentTagStructures()
];
// Act & Assert
- EvaluateData(descriptors, documentContent);
+ EvaluateData(tagHelpers, documentContent);
}
- public static ImmutableArray RequiredAttribute_Descriptors =
+ public static readonly TagHelperCollection RequiredAttribute_TagHelpers =
[
TagHelperDescriptorBuilder.CreateTagHelper("pTagHelper", "SomeAssembly")
.TagMatchingRuleDescriptor(rule =>
@@ -971,184 +970,184 @@ public void CreatesErrorForInconsistentTagStructures()
[Fact]
public void RequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly1()
{
- EvaluateData(RequiredAttribute_Descriptors, "");
+ EvaluateData(RequiredAttribute_TagHelpers, "");
}
[Fact]
public void RequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly2()
{
- EvaluateData(RequiredAttribute_Descriptors, "");
+ EvaluateData(RequiredAttribute_TagHelpers, "");
}
[Fact]
public void RequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly3()
{
- EvaluateData(RequiredAttribute_Descriptors, "");
+ EvaluateData(RequiredAttribute_TagHelpers, "");
}
[Fact]
public void RequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly4()
{
- EvaluateData(RequiredAttribute_Descriptors, "");
+ EvaluateData(RequiredAttribute_TagHelpers, "");
}
[Fact]
public void RequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly5()
{
- EvaluateData(RequiredAttribute_Descriptors, "");
+ EvaluateData(RequiredAttribute_TagHelpers, "");
}
[Fact]
public void RequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly6()
{
- EvaluateData(RequiredAttribute_Descriptors, "");
+ EvaluateData(RequiredAttribute_TagHelpers, "");
}
[Fact]
public void RequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly7()
{
- EvaluateData(RequiredAttribute_Descriptors, "words and spaces
");
+ EvaluateData(RequiredAttribute_TagHelpers, "words and spaces
");
}
[Fact]
public void RequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly8()
{
- EvaluateData(RequiredAttribute_Descriptors, "words and spaces
");
+ EvaluateData(RequiredAttribute_TagHelpers, "words and spaces
");
}
[Fact]
public void RequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly9()
{
- EvaluateData(RequiredAttribute_Descriptors, "wordsandspaces
");
+ EvaluateData(RequiredAttribute_TagHelpers, "wordsandspaces
");
}
[Fact]
public void RequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly10()
{
- EvaluateData(RequiredAttribute_Descriptors, "");
+ EvaluateData(RequiredAttribute_TagHelpers, "");
}
[Fact]
public void RequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly11()
{
- EvaluateData(RequiredAttribute_Descriptors, "");
+ EvaluateData(RequiredAttribute_TagHelpers, "");
}
[Fact]
public void RequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly12()
{
- EvaluateData(RequiredAttribute_Descriptors, "words and spaces");
+ EvaluateData(RequiredAttribute_TagHelpers, "words and spaces");
}
[Fact]
public void RequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly13()
{
- EvaluateData(RequiredAttribute_Descriptors, "words and spaces");
+ EvaluateData(RequiredAttribute_TagHelpers, "words and spaces");
}
[Fact]
public void RequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly14()
{
- EvaluateData(RequiredAttribute_Descriptors, "");
+ EvaluateData(RequiredAttribute_TagHelpers, "");
}
[Fact]
public void RequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly15()
{
- EvaluateData(RequiredAttribute_Descriptors, "");
+ EvaluateData(RequiredAttribute_TagHelpers, "");
}
[Fact]
public void RequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly16()
{
- EvaluateData(RequiredAttribute_Descriptors, "");
+ EvaluateData(RequiredAttribute_TagHelpers, "");
}
[Fact]
public void RequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly17()
{
- EvaluateData(RequiredAttribute_Descriptors, "");
+ EvaluateData(RequiredAttribute_TagHelpers, "");
}
[Fact]
public void RequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly18()
{
- EvaluateData(RequiredAttribute_Descriptors, "words and spaces
");
+ EvaluateData(RequiredAttribute_TagHelpers, "words and spaces
");
}
[Fact]
public void RequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly19()
{
- EvaluateData(RequiredAttribute_Descriptors, "");
+ EvaluateData(RequiredAttribute_TagHelpers, "");
}
[Fact]
public void RequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly20()
{
- EvaluateData(RequiredAttribute_Descriptors, "");
+ EvaluateData(RequiredAttribute_TagHelpers, "");
}
[Fact]
public void RequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly21()
{
- EvaluateData(RequiredAttribute_Descriptors, "words and spaces
");
+ EvaluateData(RequiredAttribute_TagHelpers, "words and spaces
");
}
[Fact]
public void RequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly22()
{
- EvaluateData(RequiredAttribute_Descriptors, "words and spaces
");
+ EvaluateData(RequiredAttribute_TagHelpers, "words and spaces
");
}
[Fact]
public void RequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly23()
{
- EvaluateData(RequiredAttribute_Descriptors, "wordsandspaces
");
+ EvaluateData(RequiredAttribute_TagHelpers, "wordsandspaces
");
}
[Fact]
public void RequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly24()
{
- EvaluateData(RequiredAttribute_Descriptors, "");
+ EvaluateData(RequiredAttribute_TagHelpers, "");
}
[Fact]
public void RequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly25()
{
- EvaluateData(RequiredAttribute_Descriptors, "words and spaces
");
+ EvaluateData(RequiredAttribute_TagHelpers, "words and spaces
");
}
[Fact]
public void RequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly26()
{
- EvaluateData(RequiredAttribute_Descriptors, "");
+ EvaluateData(RequiredAttribute_TagHelpers, "");
}
[Fact]
public void RequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly27()
{
- EvaluateData(RequiredAttribute_Descriptors, "words and spaces
");
+ EvaluateData(RequiredAttribute_TagHelpers, "words and spaces
");
}
[Fact]
public void RequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly28()
{
- EvaluateData(RequiredAttribute_Descriptors, "words and spaces
");
+ EvaluateData(RequiredAttribute_TagHelpers, "words and spaces
");
}
[Fact]
public void RequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly29()
{
- EvaluateData(RequiredAttribute_Descriptors, "words and spaces
");
+ EvaluateData(RequiredAttribute_TagHelpers, "words and spaces
");
}
[Fact]
public void RequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly30()
{
- EvaluateData(RequiredAttribute_Descriptors, "wordsandspaces
");
+ EvaluateData(RequiredAttribute_TagHelpers, "wordsandspaces
");
}
- public static ImmutableArray NestedRequiredAttribute_Descriptors =
+ public static readonly TagHelperCollection NestedRequiredAttribute_TagHelpers =
[
TagHelperDescriptorBuilder.CreateTagHelper("pTagHelper", "SomeAssembly")
.TagMatchingRuleDescriptor(rule =>
@@ -1167,64 +1166,64 @@ public void RequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly30()
[Fact]
public void NestedRequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly1()
{
- EvaluateData(NestedRequiredAttribute_Descriptors, "");
+ EvaluateData(NestedRequiredAttribute_TagHelpers, "");
}
[Fact]
public void NestedRequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly2()
{
- EvaluateData(NestedRequiredAttribute_Descriptors, "");
+ EvaluateData(NestedRequiredAttribute_TagHelpers, "");
}
[Fact]
public void NestedRequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly3()
{
- EvaluateData(NestedRequiredAttribute_Descriptors, "
");
+ EvaluateData(NestedRequiredAttribute_TagHelpers, "
");
}
[Fact]
public void NestedRequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly4()
{
- EvaluateData(NestedRequiredAttribute_Descriptors, "
");
+ EvaluateData(NestedRequiredAttribute_TagHelpers, "
");
}
[Fact]
public void NestedRequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly5()
{
- EvaluateData(NestedRequiredAttribute_Descriptors, "
");
+ EvaluateData(NestedRequiredAttribute_TagHelpers, "
");
}
[Fact]
public void NestedRequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly6()
{
- EvaluateData(NestedRequiredAttribute_Descriptors, "
");
+ EvaluateData(NestedRequiredAttribute_TagHelpers, "
");
}
[Fact]
public void NestedRequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly7()
{
- EvaluateData(NestedRequiredAttribute_Descriptors, "");
+ EvaluateData(NestedRequiredAttribute_TagHelpers, "");
}
[Fact]
public void NestedRequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly8()
{
- EvaluateData(NestedRequiredAttribute_Descriptors, "");
+ EvaluateData(NestedRequiredAttribute_TagHelpers, "");
}
[Fact]
public void NestedRequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly9()
{
- EvaluateData(NestedRequiredAttribute_Descriptors, "");
+ EvaluateData(NestedRequiredAttribute_TagHelpers, "");
}
[Fact]
public void NestedRequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly10()
{
- EvaluateData(NestedRequiredAttribute_Descriptors, "");
+ EvaluateData(NestedRequiredAttribute_TagHelpers, "");
}
- public static ImmutableArray MalformedRequiredAttribute_Descriptors =
+ public static readonly TagHelperCollection MalformedRequiredAttribute_TagHelpers =
[
TagHelperDescriptorBuilder.CreateTagHelper("pTagHelper", "SomeAssembly")
.TagMatchingRuleDescriptor(rule =>
@@ -1237,71 +1236,71 @@ public void NestedRequiredAttributeDescriptorsCreateTagHelperBlocksCorrectly10()
[Fact]
public void RequiredAttributeDescriptorsCreateMalformedTagHelperBlocksCorrectly1()
{
- EvaluateData(MalformedRequiredAttribute_Descriptors, "");
+ EvaluateData(MalformedRequiredAttribute_TagHelpers, "");
}
[Fact]
public void RequiredAttributeDescriptorsCreateMalformedTagHelperBlocksCorrectly8()
{
- EvaluateData(MalformedRequiredAttribute_Descriptors, "
");
+ EvaluateData(MalformedRequiredAttribute_TagHelpers, "
");
}
[Fact]
public void RequiredAttributeDescriptorsCreateMalformedTagHelperBlocksCorrectly9()
{
- EvaluateData(MalformedRequiredAttribute_Descriptors, "
PrefixedTagHelperColon_Descriptors =
+ public static readonly TagHelperCollection PrefixedTagHelperColon_TagHelpers =
[
TagHelperDescriptorBuilder.CreateTagHelper("mythTagHelper", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("myth"))
@@ -1316,7 +1315,7 @@ public void RequiredAttributeDescriptorsCreateMalformedTagHelperBlocksCorrectly1
.Build()
];
- public static ImmutableArray PrefixedTagHelperCatchAll_Descriptors =
+ public static readonly TagHelperCollection PrefixedTagHelperCatchAll_TagHelpers =
[
TagHelperDescriptorBuilder.CreateTagHelper("mythTagHelper", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("*"))
@@ -1326,67 +1325,67 @@ public void RequiredAttributeDescriptorsCreateMalformedTagHelperBlocksCorrectly1
[Fact]
public void AllowsPrefixedTagHelpers1()
{
- EvaluateData(PrefixedTagHelperCatchAll_Descriptors, "", tagHelperPrefix: "th:");
+ EvaluateData(PrefixedTagHelperCatchAll_TagHelpers, "", tagHelperPrefix: "th:");
}
[Fact]
public void AllowsPrefixedTagHelpers2()
{
- EvaluateData(PrefixedTagHelperCatchAll_Descriptors, "words and spaces", tagHelperPrefix: "th:");
+ EvaluateData(PrefixedTagHelperCatchAll_TagHelpers, "words and spaces", tagHelperPrefix: "th:");
}
[Fact]
public void AllowsPrefixedTagHelpers3()
{
- EvaluateData(PrefixedTagHelperColon_Descriptors, "", tagHelperPrefix: "th:");
+ EvaluateData(PrefixedTagHelperColon_TagHelpers, "", tagHelperPrefix: "th:");
}
[Fact]
public void AllowsPrefixedTagHelpers4()
{
- EvaluateData(PrefixedTagHelperColon_Descriptors, "", tagHelperPrefix: "th:");
+ EvaluateData(PrefixedTagHelperColon_TagHelpers, "", tagHelperPrefix: "th:");
}
[Fact]
public void AllowsPrefixedTagHelpers5()
{
- EvaluateData(PrefixedTagHelperColon_Descriptors, "", tagHelperPrefix: "th:");
+ EvaluateData(PrefixedTagHelperColon_TagHelpers, "", tagHelperPrefix: "th:");
}
[Fact]
public void AllowsPrefixedTagHelpers6()
{
- EvaluateData(PrefixedTagHelperColon_Descriptors, "", tagHelperPrefix: "th:");
+ EvaluateData(PrefixedTagHelperColon_TagHelpers, "", tagHelperPrefix: "th:");
}
[Fact]
public void AllowsPrefixedTagHelpers7()
{
- EvaluateData(PrefixedTagHelperColon_Descriptors, "!th:myth>", tagHelperPrefix: "th:");
+ EvaluateData(PrefixedTagHelperColon_TagHelpers, "!th:myth>", tagHelperPrefix: "th:");
}
[Fact]
public void AllowsPrefixedTagHelpers8()
{
- EvaluateData(PrefixedTagHelperColon_Descriptors, "", tagHelperPrefix: "th:");
+ EvaluateData(PrefixedTagHelperColon_TagHelpers, "", tagHelperPrefix: "th:");
}
[Fact]
public void AllowsPrefixedTagHelpers9()
{
- EvaluateData(PrefixedTagHelperColon_Descriptors, "", tagHelperPrefix: "th:");
+ EvaluateData(PrefixedTagHelperColon_TagHelpers, "", tagHelperPrefix: "th:");
}
[Fact]
public void AllowsPrefixedTagHelpers10()
{
- EvaluateData(PrefixedTagHelperColon_Descriptors, "words and spaces", tagHelperPrefix: "th:");
+ EvaluateData(PrefixedTagHelperColon_TagHelpers, "words and spaces", tagHelperPrefix: "th:");
}
[Fact]
public void AllowsPrefixedTagHelpers11()
{
- EvaluateData(PrefixedTagHelperColon_Descriptors, "", tagHelperPrefix: "th:");
+ EvaluateData(PrefixedTagHelperColon_TagHelpers, "", tagHelperPrefix: "th:");
}
[Fact]
@@ -1911,7 +1910,7 @@ public void HandlesNonTagHelperStartAndEndVoidTags_Correctly()
RunParseTreeRewriterTest("Foo");
}
- public static ImmutableArray CaseSensitive_Descriptors =
+ public static readonly TagHelperCollection CaseSensitive_TagHelpers =
[
TagHelperDescriptorBuilder.CreateTagHelper("pTagHelper", "SomeAssembly")
.SetCaseSensitive()
@@ -1936,30 +1935,30 @@ public void HandlesNonTagHelperStartAndEndVoidTags_Correctly()
[Fact]
public void HandlesCaseSensitiveTagHelpersCorrectly1()
{
- EvaluateData(CaseSensitive_Descriptors, "");
+ EvaluateData(CaseSensitive_TagHelpers, "");
}
[Fact]
public void HandlesCaseSensitiveTagHelpersCorrectly2()
{
- EvaluateData(CaseSensitive_Descriptors, "");
+ EvaluateData(CaseSensitive_TagHelpers, "");
}
[Fact]
public void HandlesCaseSensitiveTagHelpersCorrectly3()
{
- EvaluateData(CaseSensitive_Descriptors, "");
+ EvaluateData(CaseSensitive_TagHelpers, "");
}
[Fact]
public void HandlesCaseSensitiveTagHelpersCorrectly4()
{
- EvaluateData(CaseSensitive_Descriptors, "");
+ EvaluateData(CaseSensitive_TagHelpers, "");
}
[Fact]
public void HandlesCaseSensitiveTagHelpersCorrectly5()
{
- EvaluateData(CaseSensitive_Descriptors, "");
+ EvaluateData(CaseSensitive_TagHelpers, "");
}
}
diff --git a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/Legacy/TagHelperRewritingTestBase.cs b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/Legacy/TagHelperRewritingTestBase.cs
index aca41009202..6b163169ab5 100644
--- a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/Legacy/TagHelperRewritingTestBase.cs
+++ b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/Legacy/TagHelperRewritingTestBase.cs
@@ -1,10 +1,7 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-#nullable disable
-
using System;
-using System.Collections.Generic;
using System.Collections.Immutable;
using Xunit;
@@ -12,39 +9,38 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy;
public class TagHelperRewritingTestBase() : ParserTestBase(layer: TestProject.Layer.Compiler)
{
- internal void RunParseTreeRewriterTest(string documentContent, params string[] tagNames)
+ internal void RunParseTreeRewriterTest(string documentContent, params ImmutableArray tagNames)
{
- var descriptors = BuildDescriptors(tagNames);
+ var tagHelpers = BuildTagHelpers(tagNames);
- EvaluateData(descriptors, documentContent);
+ EvaluateData(tagHelpers, documentContent);
}
- internal ImmutableArray BuildDescriptors(params string[] tagNames)
+ internal static TagHelperCollection BuildTagHelpers(params ImmutableArray tagNames)
{
- var descriptors = new List();
-
- foreach (var tagName in tagNames)
+ return TagHelperCollection.Build(tagNames, (ref builder, tagNames) =>
{
- var descriptor = TagHelperDescriptorBuilder.CreateTagHelper(tagName + "taghelper", "SomeAssembly")
- .TagMatchingRuleDescriptor(rule => rule.RequireTagName(tagName))
- .Build();
- descriptors.Add(descriptor);
- }
-
- return descriptors.ToImmutableArray();
+ foreach (var tagName in tagNames)
+ {
+ var tagHelper = TagHelperDescriptorBuilder.CreateTagHelper(tagName + "taghelper", "SomeAssembly")
+ .TagMatchingRuleDescriptor(rule => rule.RequireTagName(tagName))
+ .Build();
+ builder.Add(tagHelper);
+ }
+ });
}
internal void EvaluateData(
- ImmutableArray descriptors,
+ TagHelperCollection tagHelpers,
string documentContent,
- string tagHelperPrefix = null,
- RazorLanguageVersion languageVersion = null,
+ string? tagHelperPrefix = null,
+ RazorLanguageVersion? languageVersion = null,
RazorFileKind? fileKind = null,
- Action configureParserOptions = null)
+ Action? configureParserOptions = null)
{
var syntaxTree = ParseDocument(languageVersion, documentContent, directives: default, fileKind: fileKind, configureParserOptions: configureParserOptions);
- var binder = new TagHelperBinder(tagHelperPrefix, descriptors);
+ var binder = new TagHelperBinder(tagHelperPrefix, tagHelpers);
var rewrittenTree = TagHelperParseTreeRewriter.Rewrite(syntaxTree, binder);
Assert.Equal(syntaxTree.Root.Width, rewrittenTree.Root.Width);
diff --git a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/RazorCodeDocumentExtensionsTest.cs b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/RazorCodeDocumentExtensionsTest.cs
index 0948fa7b0d7..22865048809 100644
--- a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/RazorCodeDocumentExtensionsTest.cs
+++ b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/RazorCodeDocumentExtensionsTest.cs
@@ -32,10 +32,10 @@ public void GetAndSetTagHelpers_ReturnsTagHelpers()
// Arrange
var codeDocument = TestRazorCodeDocument.CreateEmpty();
- var expected = new[]
- {
+ TagHelperCollection expected =
+ [
TagHelperDescriptorBuilder.CreateTagHelper("TestTagHelper", "TestAssembly").Build()
- };
+ ];
codeDocument.SetTagHelpers(expected);
@@ -52,7 +52,7 @@ public void GetAndSetTagHelperContext_ReturnsTagHelperContext()
// Arrange
var codeDocument = TestRazorCodeDocument.CreateEmpty();
- var expected = TagHelperDocumentContext.Create(prefix: null, tagHelpers: []);
+ var expected = TagHelperDocumentContext.Create(tagHelpers: []);
codeDocument.SetTagHelperContext(expected);
// Act
diff --git a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/TagHelperBinderTest.cs b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/TagHelperBinderTest.cs
index b5e72bb7d24..6c9f4738086 100644
--- a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/TagHelperBinderTest.cs
+++ b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/TagHelperBinderTest.cs
@@ -1,12 +1,9 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-#nullable disable
-
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
-using System.Linq;
using Xunit;
namespace Microsoft.AspNetCore.Razor.Language;
@@ -20,25 +17,26 @@ public void GetBinding_ReturnsBindingWithInformation()
var divTagHelper = TagHelperDescriptorBuilder.CreateTagHelper("DivTagHelper", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.Build();
- ImmutableArray expectedDescriptors = [divTagHelper];
+ TagHelperCollection expectedTagHelpers = [divTagHelper];
var expectedAttributes = ImmutableArray.Create(
new KeyValuePair("class", "something"));
- var tagHelperBinder = new TagHelperBinder("th:", expectedDescriptors);
+ var binder = new TagHelperBinder("th:", expectedTagHelpers);
// Act
- var bindingResult = tagHelperBinder.GetBinding(
+ var binding = binder.GetBinding(
tagName: "th:div",
attributes: expectedAttributes,
parentTagName: "body",
parentIsTagHelper: false);
// Assert
- Assert.Equal(expectedDescriptors, bindingResult.Descriptors);
- Assert.Equal("th:div", bindingResult.TagName);
- Assert.Equal("body", bindingResult.ParentTagName);
- Assert.Equal>(expectedAttributes, bindingResult.Attributes);
- Assert.Equal("th:", bindingResult.TagNamePrefix);
- Assert.Equal(divTagHelper.TagMatchingRules, bindingResult.GetBoundRules(divTagHelper));
+ Assert.NotNull(binding);
+ Assert.Equal(expectedTagHelpers, binding.TagHelpers);
+ Assert.Equal("th:div", binding.TagName);
+ Assert.Equal("body", binding.ParentTagName);
+ Assert.Equal>(expectedAttributes, binding.Attributes);
+ Assert.Equal("th:", binding.TagNamePrefix);
+ Assert.Equal(divTagHelper.TagMatchingRules, binding.GetBoundRules(divTagHelper));
}
[Fact]
@@ -50,37 +48,37 @@ public void GetBinding_With_Multiple_TagNameRules_SingleHelper()
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("a"))
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("img"))
.Build();
- ImmutableArray expectedDescriptors = [multiTagHelper];
- var tagHelperBinder = new TagHelperBinder("", expectedDescriptors);
+ TagHelperCollection expectedTagHelpers = [multiTagHelper];
+ var binder = new TagHelperBinder("", expectedTagHelpers);
TestTagName("div", multiTagHelper.TagMatchingRules[0]);
TestTagName("a", multiTagHelper.TagMatchingRules[1]);
TestTagName("img", multiTagHelper.TagMatchingRules[2]);
TestTagName("p", null);
TestTagName("*", null);
- void TestTagName(string tagName, TagMatchingRuleDescriptor expectedBindingResult)
+
+ void TestTagName(string tagName, TagMatchingRuleDescriptor? expectedBindingResult)
{
// Act
- var bindingResult = tagHelperBinder.GetBinding(
-
+ var binding = binder.GetBinding(
tagName: tagName,
- attributes: ImmutableArray>.Empty,
+ attributes: [],
parentTagName: "body",
parentIsTagHelper: false);
// Assert
if (expectedBindingResult == null)
{
- Assert.Null(bindingResult);
+ Assert.Null(binding);
return;
}
else
{
- Assert.NotNull(bindingResult);
- Assert.Equal(expectedDescriptors, bindingResult.Descriptors);
+ Assert.NotNull(binding);
+ Assert.Equal(expectedTagHelpers, binding.TagHelpers);
- Assert.Equal(tagName, bindingResult.TagName);
- var mapping = Assert.Single(bindingResult.GetBoundRules(multiTagHelper));
+ Assert.Equal(tagName, binding.TagName);
+ var mapping = Assert.Single(binding.GetBoundRules(multiTagHelper));
Assert.Equal(expectedBindingResult, mapping);
}
}
@@ -102,7 +100,7 @@ public void GetBinding_With_Multiple_TagNameRules_MultipleHelpers()
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("table"))
.Build();
- var tagHelperBinder = new TagHelperBinder("", [multiTagHelper1, multiTagHelper2]);
+ var binder = new TagHelperBinder("", [multiTagHelper1, multiTagHelper2]);
TestTagName("div", [multiTagHelper1, multiTagHelper2], [multiTagHelper1.TagMatchingRules[0], multiTagHelper2.TagMatchingRules[0]]);
TestTagName("a", [multiTagHelper1], [multiTagHelper1.TagMatchingRules[1]]);
@@ -111,38 +109,38 @@ public void GetBinding_With_Multiple_TagNameRules_MultipleHelpers()
TestTagName("table", [multiTagHelper2], [multiTagHelper2.TagMatchingRules[2]]);
TestTagName("*", null, null);
-
- void TestTagName(string tagName, TagHelperDescriptor[] expectedDescriptors, TagMatchingRuleDescriptor[] expectedBindingResults)
+ void TestTagName(string tagName, TagHelperCollection? expectedTagHelpers, TagMatchingRuleDescriptor[]? expectedBindingResults)
{
// Act
- var bindingResult = tagHelperBinder.GetBinding(
+ var binding = binder.GetBinding(
tagName: tagName,
attributes: [],
parentTagName: "body",
parentIsTagHelper: false);
// Assert
- if (expectedDescriptors is null)
+ if (expectedTagHelpers is null)
{
- Assert.Null(bindingResult);
+ Assert.Null(binding);
}
else
{
- Assert.NotNull(bindingResult);
- Assert.Equal(expectedDescriptors, bindingResult.Descriptors);
+ Assert.NotNull(binding);
+ Assert.Equal(expectedTagHelpers, binding.TagHelpers);
+ Assert.NotNull(expectedBindingResults);
- Assert.Equal(tagName, bindingResult.TagName);
+ Assert.Equal(tagName, binding.TagName);
- for (int i = 0; i < expectedDescriptors.Length; i++)
+ for (var i = 0; i < expectedTagHelpers.Count; i++)
{
- var mapping = Assert.Single(bindingResult.GetBoundRules(expectedDescriptors[i]));
+ var mapping = Assert.Single(binding.GetBoundRules(expectedTagHelpers[i]));
Assert.Equal(expectedBindingResults[i], mapping);
}
}
}
}
- public static TheoryData RequiredParentData
+ public static TheoryData RequiredParentData
{
get
{
@@ -163,37 +161,34 @@ public static TheoryData RequiredParentData
.RequireParentTag("p"))
.Build();
- return new TheoryData<
- string, // tagName
- string, // parentTagName
- ImmutableArray, // availableDescriptors
- ImmutableArray> // expectedDescriptors
+ // tagName, parentTagName, availableTagHelpers, expectedTagHelpers
+ return new()
+ {
+ {
+ "strong",
+ "p",
+ [strongPDivParent],
+ [strongPDivParent]
+ },
{
- {
- "strong",
- "p",
- [strongPDivParent],
- [strongPDivParent]
- },
- {
- "strong",
- "div",
- [strongPDivParent, catchAllPParent],
- [strongPDivParent]
- },
- {
- "strong",
- "p",
- [strongPDivParent, catchAllPParent],
- [strongPDivParent, catchAllPParent]
- },
- {
- "custom",
- "p",
- [strongPDivParent, catchAllPParent],
- [catchAllPParent]
- },
- };
+ "strong",
+ "div",
+ [strongPDivParent, catchAllPParent],
+ [strongPDivParent]
+ },
+ {
+ "strong",
+ "p",
+ [strongPDivParent, catchAllPParent],
+ [strongPDivParent, catchAllPParent]
+ },
+ {
+ "custom",
+ "p",
+ [strongPDivParent, catchAllPParent],
+ [catchAllPParent]
+ }
+ };
}
}
@@ -202,24 +197,25 @@ public static TheoryData RequiredParentData
public void GetBinding_ReturnsBindingResultWithDescriptorsParentTags(
string tagName,
string parentTagName,
- ImmutableArray availableDescriptors,
- ImmutableArray expectedDescriptors)
+ TagHelperCollection availableTagHelpers,
+ TagHelperCollection expectedTagHelpers)
{
// Arrange
- var tagHelperBinder = new TagHelperBinder(null, availableDescriptors);
+ var binder = new TagHelperBinder(null, availableTagHelpers);
// Act
- var bindingResult = tagHelperBinder.GetBinding(
+ var binding = binder.GetBinding(
tagName,
- attributes: ImmutableArray>.Empty,
+ attributes: [],
parentTagName: parentTagName,
parentIsTagHelper: false);
// Assert
- Assert.Equal(expectedDescriptors, bindingResult.Descriptors);
+ Assert.NotNull(binding);
+ Assert.Equal(expectedTagHelpers, binding.TagHelpers);
}
- public static TheoryData RequiredAttributeData
+ public static TheoryData>, TagHelperCollection, TagHelperCollection?> RequiredAttributeData
{
get
{
@@ -257,100 +253,97 @@ public static TheoryData RequiredAttributeData
.RequireAttributeDescriptor(attribute => attribute
.Name("prefix-", RequiredAttributeNameComparison.PrefixMatch)))
.Build();
- ImmutableArray defaultAvailableDescriptors =
+ TagHelperCollection defaultAvailableDescriptors =
[divDescriptor, inputDescriptor, catchAllDescriptor, catchAllDescriptor2];
- ImmutableArray defaultWildcardDescriptors =
+ TagHelperCollection defaultWildcardDescriptors =
[inputWildcardPrefixDescriptor, catchAllWildcardPrefixDescriptor];
Func> kvp =
(name) => new KeyValuePair(name, "test value");
- return new TheoryData<
- string, // tagName
- ImmutableArray>, // providedAttributes
- ImmutableArray, // availableDescriptors
- ImmutableArray> // expectedDescriptors
+ // tagName, providedAttributes, availableTagHelpers, expectedTagHelpers
+ return new()
+ {
+ {
+ "div",
+ ImmutableArray.Create(kvp("custom")),
+ defaultAvailableDescriptors,
+ default
+ },
+ { "div", ImmutableArray.Create(kvp("style")), defaultAvailableDescriptors, [divDescriptor] },
+ { "div", ImmutableArray.Create(kvp("class")), defaultAvailableDescriptors, [catchAllDescriptor] },
+ {
+ "div",
+ ImmutableArray.Create(kvp("class"), kvp("style")),
+ defaultAvailableDescriptors,
+ [divDescriptor, catchAllDescriptor]
+ },
+ {
+ "div",
+ ImmutableArray.Create(kvp("class"), kvp("style"), kvp("custom")),
+ defaultAvailableDescriptors,
+ [divDescriptor, catchAllDescriptor, catchAllDescriptor2]
+ },
{
- {
- "div",
- ImmutableArray.Create(kvp("custom")),
- defaultAvailableDescriptors,
- default
- },
- { "div", ImmutableArray.Create(kvp("style")), defaultAvailableDescriptors, [divDescriptor] },
- { "div", ImmutableArray.Create(kvp("class")), defaultAvailableDescriptors, [catchAllDescriptor] },
- {
- "div",
- ImmutableArray.Create(kvp("class"), kvp("style")),
- defaultAvailableDescriptors,
- [divDescriptor, catchAllDescriptor]
- },
- {
- "div",
- ImmutableArray.Create(kvp("class"), kvp("style"), kvp("custom")),
- defaultAvailableDescriptors,
- [divDescriptor, catchAllDescriptor, catchAllDescriptor2]
- },
- {
- "input",
- ImmutableArray.Create(kvp("class"), kvp("style")),
- defaultAvailableDescriptors,
- [inputDescriptor, catchAllDescriptor]
- },
- {
- "input",
- ImmutableArray.Create(kvp("nodashprefixA")),
- defaultWildcardDescriptors,
- [inputWildcardPrefixDescriptor]
- },
- {
- "input",
- ImmutableArray.Create(kvp("nodashprefix-ABC-DEF"), kvp("random")),
- defaultWildcardDescriptors,
- [inputWildcardPrefixDescriptor]
- },
- {
- "input",
- ImmutableArray.Create(kvp("prefixABCnodashprefix")),
- defaultWildcardDescriptors,
- default
- },
- {
- "input",
- ImmutableArray.Create(kvp("prefix-")),
- defaultWildcardDescriptors,
- default
- },
- {
- "input",
- ImmutableArray.Create(kvp("nodashprefix")),
- defaultWildcardDescriptors,
- default
- },
- {
- "input",
- ImmutableArray.Create(kvp("prefix-A")),
- defaultWildcardDescriptors,
- [catchAllWildcardPrefixDescriptor]
- },
- {
- "input",
- ImmutableArray.Create(kvp("prefix-ABC-DEF"), kvp("random")),
- defaultWildcardDescriptors,
- [catchAllWildcardPrefixDescriptor]
- },
- {
- "input",
- ImmutableArray.Create(kvp("prefix-abc"), kvp("nodashprefix-def")),
- defaultWildcardDescriptors,
- [inputWildcardPrefixDescriptor, catchAllWildcardPrefixDescriptor]
- },
- {
- "input",
- ImmutableArray.Create(kvp("class"), kvp("prefix-abc"), kvp("onclick"), kvp("nodashprefix-def"), kvp("style")),
- defaultWildcardDescriptors,
- [inputWildcardPrefixDescriptor, catchAllWildcardPrefixDescriptor]
- },
- };
+ "input",
+ ImmutableArray.Create(kvp("class"), kvp("style")),
+ defaultAvailableDescriptors,
+ [inputDescriptor, catchAllDescriptor]
+ },
+ {
+ "input",
+ ImmutableArray.Create(kvp("nodashprefixA")),
+ defaultWildcardDescriptors,
+ [inputWildcardPrefixDescriptor]
+ },
+ {
+ "input",
+ ImmutableArray.Create(kvp("nodashprefix-ABC-DEF"), kvp("random")),
+ defaultWildcardDescriptors,
+ [inputWildcardPrefixDescriptor]
+ },
+ {
+ "input",
+ ImmutableArray.Create(kvp("prefixABCnodashprefix")),
+ defaultWildcardDescriptors,
+ null
+ },
+ {
+ "input",
+ ImmutableArray.Create(kvp("prefix-")),
+ defaultWildcardDescriptors,
+ null
+ },
+ {
+ "input",
+ ImmutableArray.Create(kvp("nodashprefix")),
+ defaultWildcardDescriptors,
+ null
+ },
+ {
+ "input",
+ ImmutableArray.Create(kvp("prefix-A")),
+ defaultWildcardDescriptors,
+ [catchAllWildcardPrefixDescriptor]
+ },
+ {
+ "input",
+ ImmutableArray.Create(kvp("prefix-ABC-DEF"), kvp("random")),
+ defaultWildcardDescriptors,
+ [catchAllWildcardPrefixDescriptor]
+ },
+ {
+ "input",
+ ImmutableArray.Create(kvp("prefix-abc"), kvp("nodashprefix-def")),
+ defaultWildcardDescriptors,
+ [inputWildcardPrefixDescriptor, catchAllWildcardPrefixDescriptor]
+ },
+ {
+ "input",
+ ImmutableArray.Create(kvp("class"), kvp("prefix-abc"), kvp("onclick"), kvp("nodashprefix-def"), kvp("style")),
+ defaultWildcardDescriptors,
+ [inputWildcardPrefixDescriptor, catchAllWildcardPrefixDescriptor]
+ },
+ };
}
}
@@ -359,24 +352,24 @@ public static TheoryData RequiredAttributeData
public void GetBinding_ReturnsBindingResultDescriptorsWithRequiredAttributes(
string tagName,
ImmutableArray> providedAttributes,
- ImmutableArray availableDescriptors,
- ImmutableArray expectedDescriptors)
+ TagHelperCollection availableTagHelpers,
+ TagHelperCollection? expectedTagHelpers)
{
// Arrange
- var tagHelperBinder = new TagHelperBinder(null, availableDescriptors);
+ var binder = new TagHelperBinder(null, availableTagHelpers);
// Act
- var bindingResult = tagHelperBinder.GetBinding(tagName, providedAttributes, parentTagName: "p", parentIsTagHelper: false);
- var descriptors = bindingResult?.Descriptors ?? default;
+ var binding = binder.GetBinding(tagName, providedAttributes, parentTagName: "p", parentIsTagHelper: false);
+ var tagHelpers = binding?.TagHelpers;
// Assert
- if (expectedDescriptors.IsDefault)
+ if (expectedTagHelpers is null)
{
- Assert.True(descriptors.IsDefault);
+ Assert.Null(tagHelpers);
}
else
{
- Assert.Equal(expectedDescriptors, descriptors);
+ Assert.Equal(expectedTagHelpers, tagHelpers);
}
}
@@ -384,72 +377,75 @@ public void GetBinding_ReturnsBindingResultDescriptorsWithRequiredAttributes(
public void GetBinding_ReturnsNullBindingResultPrefixAsTagName()
{
// Arrange
- var catchAllDescriptor = TagHelperDescriptorBuilder.CreateTagHelper("foo1", "SomeAssembly")
+ var catchAllTagHelper = TagHelperDescriptorBuilder.CreateTagHelper("foo1", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName(TagHelperMatchingConventions.ElementCatchAllName))
.Build();
- ImmutableArray descriptors = [catchAllDescriptor];
- var tagHelperBinder = new TagHelperBinder("th", descriptors);
+ TagHelperCollection tagHelpers = [catchAllTagHelper];
+ var tagHelperBinder = new TagHelperBinder("th", tagHelpers);
// Act
- var bindingResult = tagHelperBinder.GetBinding(
+ var binding = tagHelperBinder.GetBinding(
tagName: "th",
- attributes: ImmutableArray>.Empty,
+ attributes: [],
parentTagName: "p",
parentIsTagHelper: false);
// Assert
- Assert.Null(bindingResult);
+ Assert.Null(binding);
}
[Fact]
public void GetBinding_ReturnsBindingResultCatchAllDescriptorsForPrefixedTags()
{
// Arrange
- var catchAllDescriptor = TagHelperDescriptorBuilder.CreateTagHelper("foo1", "SomeAssembly")
+ var catchAllTagHelper = TagHelperDescriptorBuilder.CreateTagHelper("foo1", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName(TagHelperMatchingConventions.ElementCatchAllName))
.Build();
- ImmutableArray descriptors = [catchAllDescriptor];
- var tagHelperBinder = new TagHelperBinder("th:", descriptors);
+ TagHelperCollection tagHelpers = [catchAllTagHelper];
+ var tagHelperBinder = new TagHelperBinder("th:", tagHelpers);
// Act
- var bindingResultDiv = tagHelperBinder.GetBinding(
+ var bindingDiv = tagHelperBinder.GetBinding(
tagName: "th:div",
- attributes: ImmutableArray>.Empty,
+ attributes: [],
parentTagName: "p",
parentIsTagHelper: false);
- var bindingResultSpan = tagHelperBinder.GetBinding(
+ var bindingSpan = tagHelperBinder.GetBinding(
tagName: "th:span",
- attributes: ImmutableArray>.Empty,
+ attributes: [],
parentTagName: "p",
parentIsTagHelper: false);
// Assert
- var descriptor = Assert.Single(bindingResultDiv.Descriptors);
- Assert.Same(catchAllDescriptor, descriptor);
- descriptor = Assert.Single(bindingResultSpan.Descriptors);
- Assert.Same(catchAllDescriptor, descriptor);
+ Assert.NotNull(bindingDiv);
+ var tagHelper = Assert.Single(bindingDiv.TagHelpers);
+ Assert.Same(catchAllTagHelper, tagHelper);
+ Assert.NotNull(bindingSpan);
+ tagHelper = Assert.Single(bindingSpan.TagHelpers);
+ Assert.Same(catchAllTagHelper, tagHelper);
}
[Fact]
public void GetBinding_ReturnsBindingResultDescriptorsForPrefixedTags()
{
// Arrange
- var divDescriptor = TagHelperDescriptorBuilder.CreateTagHelper("foo1", "SomeAssembly")
+ var divTagHelper = TagHelperDescriptorBuilder.CreateTagHelper("foo1", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.Build();
- ImmutableArray descriptors = [divDescriptor];
- var tagHelperBinder = new TagHelperBinder("th:", descriptors);
+ TagHelperCollection tagHelpers = [divTagHelper];
+ var tagHelperBinder = new TagHelperBinder("th:", tagHelpers);
// Act
- var bindingResult = tagHelperBinder.GetBinding(
+ var binding = tagHelperBinder.GetBinding(
tagName: "th:div",
- attributes: ImmutableArray>.Empty,
+ attributes: [],
parentTagName: "p",
parentIsTagHelper: false);
// Assert
- var descriptor = Assert.Single(bindingResult.Descriptors);
- Assert.Same(divDescriptor, descriptor);
+ Assert.NotNull(binding);
+ var tagHelper = Assert.Single(binding.TagHelpers);
+ Assert.Same(divTagHelper, tagHelper);
}
[Theory]
@@ -458,114 +454,117 @@ public void GetBinding_ReturnsBindingResultDescriptorsForPrefixedTags()
public void GetBinding_ReturnsNullForUnprefixedTags(string tagName)
{
// Arrange
- var divDescriptor = TagHelperDescriptorBuilder.CreateTagHelper("foo1", "SomeAssembly")
+ var divTagHelper = TagHelperDescriptorBuilder.CreateTagHelper("foo1", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName(tagName))
.Build();
- ImmutableArray descriptors = [divDescriptor];
- var tagHelperBinder = new TagHelperBinder("th:", descriptors);
+ TagHelperCollection tagHelpers = [divTagHelper];
+ var binder = new TagHelperBinder("th:", tagHelpers);
// Act
- var bindingResult = tagHelperBinder.GetBinding(
+ var binding = binder.GetBinding(
tagName: "div",
- attributes: ImmutableArray>.Empty,
+ attributes: [],
parentTagName: "p",
parentIsTagHelper: false);
// Assert
- Assert.Null(bindingResult);
+ Assert.Null(binding);
}
[Fact]
public void GetDescriptors_ReturnsNothingForUnregisteredTags()
{
// Arrange
- var divDescriptor = TagHelperDescriptorBuilder.CreateTagHelper("foo1", "SomeAssembly")
+ var divTagHelper = TagHelperDescriptorBuilder.CreateTagHelper("foo1", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.Build();
- var spanDescriptor = TagHelperDescriptorBuilder.CreateTagHelper("foo2", "SomeAssembly")
+ var spanTagHelper = TagHelperDescriptorBuilder.CreateTagHelper("foo2", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("span"))
.Build();
- ImmutableArray descriptors = [divDescriptor, spanDescriptor];
- var tagHelperBinder = new TagHelperBinder(null, descriptors);
+ TagHelperCollection tagHelpers = [divTagHelper, spanTagHelper];
+ var binder = new TagHelperBinder(null, tagHelpers);
// Act
- var tagHelperBinding = tagHelperBinder.GetBinding(
+ var binding = binder.GetBinding(
tagName: "foo",
- attributes: ImmutableArray>.Empty,
+ attributes: [],
parentTagName: "p",
parentIsTagHelper: false);
// Assert
- Assert.Null(tagHelperBinding);
+ Assert.Null(binding);
}
[Fact]
public void GetDescriptors_ReturnsCatchAllsWithEveryTagName()
{
// Arrange
- var divDescriptor = TagHelperDescriptorBuilder.CreateTagHelper("foo1", "SomeAssembly")
+ var divTagHelper = TagHelperDescriptorBuilder.CreateTagHelper("foo1", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.Build();
- var spanDescriptor = TagHelperDescriptorBuilder.CreateTagHelper("foo2", "SomeAssembly")
+ var spanTagHelper = TagHelperDescriptorBuilder.CreateTagHelper("foo2", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("span"))
.Build();
- var catchAllDescriptor = TagHelperDescriptorBuilder.CreateTagHelper("foo3", "SomeAssembly")
+ var catchAllTagHelper = TagHelperDescriptorBuilder.CreateTagHelper("foo3", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName(TagHelperMatchingConventions.ElementCatchAllName))
.Build();
- ImmutableArray descriptors = [divDescriptor, spanDescriptor, catchAllDescriptor];
- var tagHelperBinder = new TagHelperBinder(null, descriptors);
+ TagHelperCollection tagHelpers = [divTagHelper, spanTagHelper, catchAllTagHelper];
+ var binder = new TagHelperBinder(null, tagHelpers);
// Act
- var divBinding = tagHelperBinder.GetBinding(
+ var divBinding = binder.GetBinding(
tagName: "div",
- attributes: ImmutableArray>.Empty,
+ attributes: [],
parentTagName: "p",
parentIsTagHelper: false);
- var spanBinding = tagHelperBinder.GetBinding(
+ var spanBinding = binder.GetBinding(
tagName: "span",
- attributes: ImmutableArray>.Empty,
+ attributes: [],
parentTagName: "p",
parentIsTagHelper: false);
// Assert
// For divs
- Assert.Equal(2, divBinding.Descriptors.Count());
- Assert.Contains(divDescriptor, divBinding.Descriptors);
- Assert.Contains(catchAllDescriptor, divBinding.Descriptors);
+ Assert.NotNull(divBinding);
+ Assert.Equal(2, divBinding.TagHelpers.Count);
+ Assert.Contains(divTagHelper, divBinding.TagHelpers);
+ Assert.Contains(catchAllTagHelper, divBinding.TagHelpers);
// For spans
- Assert.Equal(2, spanBinding.Descriptors.Count());
- Assert.Contains(spanDescriptor, spanBinding.Descriptors);
- Assert.Contains(catchAllDescriptor, spanBinding.Descriptors);
+ Assert.NotNull(spanBinding);
+ Assert.Equal(2, spanBinding.TagHelpers.Count);
+ Assert.Contains(spanTagHelper, spanBinding.TagHelpers);
+ Assert.Contains(catchAllTagHelper, spanBinding.TagHelpers);
}
[Fact]
public void GetDescriptors_DuplicateDescriptorsAreNotPartOfTagHelperDescriptorPool()
{
// Arrange
- var divDescriptor = TagHelperDescriptorBuilder.CreateTagHelper("foo1", "SomeAssembly")
+ var divTagHelper = TagHelperDescriptorBuilder.CreateTagHelper("foo1", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.Build();
- ImmutableArray descriptors = [divDescriptor, divDescriptor];
- var tagHelperBinder = new TagHelperBinder(null, descriptors);
+ TagHelperCollection tagHelpers = [divTagHelper, divTagHelper];
+ var binder = new TagHelperBinder(null, tagHelpers);
// Act
- var bindingResult = tagHelperBinder.GetBinding(
+ var binding = binder.GetBinding(
tagName: "div",
- attributes: ImmutableArray>.Empty,
+ attributes: [],
parentTagName: "p",
parentIsTagHelper: false);
// Assert
- var descriptor = Assert.Single(bindingResult.Descriptors);
- Assert.Same(divDescriptor, descriptor);
+ Assert.NotNull(binding);
+ var tagHelper = Assert.Single(binding.TagHelpers);
+ Assert.Same(divTagHelper, tagHelper);
}
[Fact]
public void GetBinding_DescriptorWithMultipleRules_CorrectlySelectsMatchingRules()
{
// Arrange
- var multiRuleDescriptor = TagHelperDescriptorBuilder.CreateTagHelper("foo", "SomeAssembly")
+ var multiRuleTagHelper = TagHelperDescriptorBuilder.CreateTagHelper("foo", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule
.RequireTagName(TagHelperMatchingConventions.ElementCatchAllName)
.RequireParentTag("body"))
@@ -574,20 +573,21 @@ public void GetBinding_DescriptorWithMultipleRules_CorrectlySelectsMatchingRules
.TagMatchingRuleDescriptor(rule => rule
.RequireTagName("span"))
.Build();
- ImmutableArray descriptors = [multiRuleDescriptor];
- var tagHelperBinder = new TagHelperBinder(null, descriptors);
+ TagHelperCollection tagHelper = [multiRuleTagHelper];
+ var binder = new TagHelperBinder(null, tagHelper);
// Act
- var binding = tagHelperBinder.GetBinding(
+ var binding = binder.GetBinding(
tagName: "div",
- attributes: ImmutableArray>.Empty,
+ attributes: [],
parentTagName: "p",
parentIsTagHelper: false);
// Assert
- var boundDescriptor = Assert.Single(binding.Descriptors);
- Assert.Same(multiRuleDescriptor, boundDescriptor);
- var boundRules = binding.GetBoundRules(boundDescriptor);
+ Assert.NotNull(binding);
+ var boundTagHelper = Assert.Single(binding.TagHelpers);
+ Assert.Same(multiRuleTagHelper, boundTagHelper);
+ var boundRules = binding.GetBoundRules(boundTagHelper);
var boundRule = Assert.Single(boundRules);
Assert.Equal("div", boundRule.TagName);
}
@@ -596,26 +596,27 @@ public void GetBinding_DescriptorWithMultipleRules_CorrectlySelectsMatchingRules
public void GetBinding_PrefixedParent_ReturnsBinding()
{
// Arrange
- var divDescriptor = TagHelperDescriptorBuilder.CreateTagHelper("foo1", "SomeAssembly")
+ var divTagHelper = TagHelperDescriptorBuilder.CreateTagHelper("foo1", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("div").RequireParentTag("p"))
.Build();
- var pDescriptor = TagHelperDescriptorBuilder.CreateTagHelper("foo2", "SomeAssembly")
+ var pTagHelper = TagHelperDescriptorBuilder.CreateTagHelper("foo2", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("p"))
.Build();
- ImmutableArray descriptors = [divDescriptor, pDescriptor];
- var tagHelperBinder = new TagHelperBinder("th:", descriptors);
+ TagHelperCollection tagHelpers = [divTagHelper, pTagHelper];
+ var binder = new TagHelperBinder("th:", tagHelpers);
// Act
- var bindingResult = tagHelperBinder.GetBinding(
+ var binding = binder.GetBinding(
tagName: "th:div",
- attributes: ImmutableArray>.Empty,
+ attributes: [],
parentTagName: "th:p",
parentIsTagHelper: true);
// Assert
- var boundDescriptor = Assert.Single(bindingResult.Descriptors);
- Assert.Same(divDescriptor, boundDescriptor);
- var boundRules = bindingResult.GetBoundRules(boundDescriptor);
+ Assert.NotNull(binding);
+ var boundTagHelper = Assert.Single(binding.TagHelpers);
+ Assert.Same(divTagHelper, boundTagHelper);
+ var boundRules = binding.GetBoundRules(boundTagHelper);
var boundRule = Assert.Single(boundRules);
Assert.Equal("div", boundRule.TagName);
Assert.Equal("p", boundRule.ParentTag);
@@ -625,78 +626,81 @@ public void GetBinding_PrefixedParent_ReturnsBinding()
public void GetBinding_IsAttributeMatch_SingleAttributeMatch()
{
// Arrange
- var divDescriptor = TagHelperDescriptorBuilder.CreateTagHelper("foo1", "SomeAssembly")
+ var divTagHelper = TagHelperDescriptorBuilder.CreateTagHelper("foo1", "SomeAssembly")
.ClassifyAttributesOnly(true)
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.Build();
- ImmutableArray descriptors = [divDescriptor];
- var tagHelperBinder = new TagHelperBinder("", descriptors);
+ TagHelperCollection tagHelpers = [divTagHelper];
+ var binder = new TagHelperBinder("", tagHelpers);
// Act
- var bindingResult = tagHelperBinder.GetBinding(
+ var binding = binder.GetBinding(
tagName: "div",
- attributes: ImmutableArray>.Empty,
+ attributes: [],
parentTagName: "p",
parentIsTagHelper: false);
// Assert
- Assert.True(bindingResult.IsAttributeMatch);
+ Assert.NotNull(binding);
+ Assert.True(binding.IsAttributeMatch);
}
[Fact]
public void GetBinding_IsAttributeMatch_MultipleAttributeMatches()
{
// Arrange
- var divDescriptor1 = TagHelperDescriptorBuilder.CreateTagHelper("foo1", "SomeAssembly")
+ var divTagHelper1 = TagHelperDescriptorBuilder.CreateTagHelper("foo1", "SomeAssembly")
.ClassifyAttributesOnly(true)
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.Build();
- var divDescriptor2 = TagHelperDescriptorBuilder.CreateTagHelper("foo1", "SomeAssembly")
+ var divTagHelper2 = TagHelperDescriptorBuilder.CreateTagHelper("foo1", "SomeAssembly")
.ClassifyAttributesOnly(true)
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.Build();
- ImmutableArray descriptors = [divDescriptor1, divDescriptor2];
- var tagHelperBinder = new TagHelperBinder("", descriptors);
+ TagHelperCollection tagHelpers = [divTagHelper1, divTagHelper2];
+ var binder = new TagHelperBinder("", tagHelpers);
// Act
- var bindingResult = tagHelperBinder.GetBinding(
+ var binding = binder.GetBinding(
tagName: "div",
- attributes: ImmutableArray>.Empty,
+ attributes: [],
parentTagName: "p",
parentIsTagHelper: false);
// Assert
- Assert.True(bindingResult.IsAttributeMatch);
+ Assert.NotNull(binding);
+ Assert.True(binding.IsAttributeMatch);
}
[Fact]
public void GetBinding_IsAttributeMatch_MixedAttributeMatches()
{
// Arrange
- var divDescriptor1 = TagHelperDescriptorBuilder.CreateTagHelper("foo1", "SomeAssembly")
+ var divTagHelper1 = TagHelperDescriptorBuilder.CreateTagHelper("foo1", "SomeAssembly")
.ClassifyAttributesOnly(true)
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.Build();
- var divDescriptor2 = TagHelperDescriptorBuilder.CreateTagHelper("foo1", "SomeAssembly")
+ var divTagHelper2 = TagHelperDescriptorBuilder.CreateTagHelper("foo1", "SomeAssembly")
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.Build();
- ImmutableArray descriptors = [divDescriptor1, divDescriptor2];
- var tagHelperBinder = new TagHelperBinder("", descriptors);
+ TagHelperCollection tagHelpers = [divTagHelper1, divTagHelper2];
+ var tagHelperBinder = new TagHelperBinder("", tagHelpers);
// Act
- var bindingResult = tagHelperBinder.GetBinding(
+ var binding = tagHelperBinder.GetBinding(
tagName: "div",
- attributes: ImmutableArray>.Empty,
+ attributes: [],
parentTagName: "p",
parentIsTagHelper: false);
// Assert
- Assert.False(bindingResult.IsAttributeMatch);
+ Assert.NotNull(binding);
+ Assert.False(binding.IsAttributeMatch);
}
[Fact]
@@ -707,20 +711,20 @@ public void GetBinding_CaseSensitiveRule_CaseMismatch_ReturnsNull()
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.SetCaseSensitive()
.Build();
- ImmutableArray expectedDescriptors = [divTagHelper];
+ TagHelperCollection expectedTagHelpers = [divTagHelper];
var expectedAttributes = ImmutableArray.Create(
new KeyValuePair("class", "something"));
- var tagHelperBinder = new TagHelperBinder("th:", expectedDescriptors);
+ var binder = new TagHelperBinder("th:", expectedTagHelpers);
// Act
- var bindingResult = tagHelperBinder.GetBinding(
+ var binding = binder.GetBinding(
tagName: "th:Div",
attributes: expectedAttributes,
parentTagName: "body",
parentIsTagHelper: false);
// Assert
- Assert.Null(bindingResult);
+ Assert.Null(binding);
}
[Fact]
@@ -733,19 +737,19 @@ public void GetBinding_CaseSensitiveRequiredAttribute_CaseMismatch_ReturnsNull()
.RequireAttributeDescriptor(attribute => attribute.Name("class")))
.SetCaseSensitive()
.Build();
- ImmutableArray expectedDescriptors = [divTagHelper];
+ TagHelperCollection expectedTagHelpers = [divTagHelper];
var expectedAttributes = ImmutableArray.Create(
new KeyValuePair("CLASS", "something"));
- var tagHelperBinder = new TagHelperBinder(null, expectedDescriptors);
+ var binder = new TagHelperBinder(null, expectedTagHelpers);
// Act
- var bindingResult = tagHelperBinder.GetBinding(
+ var binding = binder.GetBinding(
tagName: "div",
attributes: expectedAttributes,
parentTagName: "body",
parentIsTagHelper: false);
// Assert
- Assert.Null(bindingResult);
+ Assert.Null(binding);
}
}
diff --git a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/CSharp/CompilationTagHelperFeature.cs b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/CSharp/CompilationTagHelperFeature.cs
index 9e52ee57431..40f8909b4d3 100644
--- a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/CSharp/CompilationTagHelperFeature.cs
+++ b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/CSharp/CompilationTagHelperFeature.cs
@@ -15,7 +15,7 @@ public sealed class CompilationTagHelperFeature : RazorEngineFeatureBase, ITagHe
private ImmutableArray _providers;
private IMetadataReferenceFeature? _referenceFeature;
- public IReadOnlyList GetDescriptors(CancellationToken cancellationToken = default)
+ public TagHelperCollection GetTagHelpers(CancellationToken cancellationToken = default)
{
var compilation = CSharpCompilation.Create("__TagHelpers", references: _referenceFeature?.References);
if (!IsValidCompilation(compilation))
@@ -23,15 +23,15 @@ public IReadOnlyList GetDescriptors(CancellationToken cance
return [];
}
- var results = new List();
- var context = new TagHelperDescriptorProviderContext(compilation, results);
+ using var builder = new TagHelperCollection.Builder();
+ var context = new TagHelperDescriptorProviderContext(compilation, builder);
foreach (var provider in _providers)
{
provider.Execute(context, cancellationToken);
}
- return results;
+ return builder.ToCollection();
}
protected override void OnInitialized()
diff --git a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/DefaultRazorIntermediateNodeLoweringPhase.cs b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/DefaultRazorIntermediateNodeLoweringPhase.cs
index 8f100de820f..24a45e86fd1 100644
--- a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/DefaultRazorIntermediateNodeLoweringPhase.cs
+++ b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/DefaultRazorIntermediateNodeLoweringPhase.cs
@@ -1035,7 +1035,7 @@ public override void VisitMarkupTagHelperElement(MarkupTagHelperElementSyntax no
TagName = tagName,
TagMode = info.TagMode,
Source = BuildSourceSpanFromNode(node),
- TagHelpers = info.BindingResult.Descriptors
+ TagHelpers = info.BindingResult.TagHelpers
};
_builder.Push(tagHelperNode);
@@ -1080,11 +1080,11 @@ public override void VisitMarkupMinimizedTagHelperAttribute(MarkupMinimizedTagHe
}
var element = node.FirstAncestorOrSelf();
- var descriptors = element.TagHelperInfo.BindingResult.Descriptors;
+ var tagHelpers = element.TagHelperInfo.BindingResult.TagHelpers;
var attributeName = node.Name.GetContent();
using var matches = new PooledArrayBuilder();
- TagHelperMatchingConventions.GetAttributeMatches(descriptors, attributeName, ref matches.AsRef());
+ TagHelperMatchingConventions.GetAttributeMatches(tagHelpers, attributeName, ref matches.AsRef());
if (matches.Any() && _renderedBoundAttributeNames.Add(attributeName))
{
@@ -1121,12 +1121,12 @@ public override void VisitMarkupMinimizedTagHelperAttribute(MarkupMinimizedTagHe
public override void VisitMarkupTagHelperAttribute(MarkupTagHelperAttributeSyntax node)
{
var element = node.FirstAncestorOrSelf();
- var descriptors = element.TagHelperInfo.BindingResult.Descriptors;
+ var tagHelpers = element.TagHelperInfo.BindingResult.TagHelpers;
var attributeName = node.Name.GetContent();
var attributeValueNode = node.Value;
using var matches = new PooledArrayBuilder();
- TagHelperMatchingConventions.GetAttributeMatches(descriptors, attributeName, ref matches.AsRef());
+ TagHelperMatchingConventions.GetAttributeMatches(tagHelpers, attributeName, ref matches.AsRef());
if (matches.Any() && _renderedBoundAttributeNames.Add(attributeName))
{
@@ -1753,7 +1753,7 @@ public override void VisitMarkupTagHelperElement(MarkupTagHelperElementSyntax no
TagName = tagName,
TagMode = info.TagMode,
Source = BuildSourceSpanFromNode(node),
- TagHelpers = info.BindingResult.Descriptors,
+ TagHelpers = info.BindingResult.TagHelpers,
StartTagSpan = node.StartTag.Name.GetSourceSpan(SourceDocument)
};
@@ -1828,11 +1828,11 @@ public override void VisitMarkupMinimizedTagHelperAttribute(MarkupMinimizedTagHe
}
var element = node.FirstAncestorOrSelf();
- var descriptors = element.TagHelperInfo.BindingResult.Descriptors;
+ var tagHelpers = element.TagHelperInfo.BindingResult.TagHelpers;
var attributeName = node.Name.GetContent();
using var matches = new PooledArrayBuilder();
- TagHelperMatchingConventions.GetAttributeMatches(descriptors, attributeName, ref matches.AsRef());
+ TagHelperMatchingConventions.GetAttributeMatches(tagHelpers, attributeName, ref matches.AsRef());
if (matches.Any() && _renderedBoundAttributeNames.Add(attributeName))
{
@@ -1877,11 +1877,11 @@ public override void VisitMarkupMinimizedTagHelperDirectiveAttribute(MarkupMinim
}
var element = node.FirstAncestorOrSelf();
- var descriptors = element.TagHelperInfo.BindingResult.Descriptors;
+ var tagHelpers = element.TagHelperInfo.BindingResult.TagHelpers;
var attributeName = node.FullName;
using var matches = new PooledArrayBuilder();
- TagHelperMatchingConventions.GetAttributeMatches(descriptors, attributeName, ref matches.AsRef());
+ TagHelperMatchingConventions.GetAttributeMatches(tagHelpers, attributeName, ref matches.AsRef());
if (matches.Any() && _renderedBoundAttributeNames.Add(attributeName))
{
@@ -1930,12 +1930,12 @@ public override void VisitMarkupMinimizedTagHelperDirectiveAttribute(MarkupMinim
public override void VisitMarkupTagHelperAttribute(MarkupTagHelperAttributeSyntax node)
{
var element = node.FirstAncestorOrSelf();
- var descriptors = element.TagHelperInfo.BindingResult.Descriptors;
+ var tagHelpers = element.TagHelperInfo.BindingResult.TagHelpers;
var attributeName = node.Name.GetContent();
var attributeValueNode = node.Value;
using var matches = new PooledArrayBuilder();
- TagHelperMatchingConventions.GetAttributeMatches(descriptors, attributeName, ref matches.AsRef());
+ TagHelperMatchingConventions.GetAttributeMatches(tagHelpers, attributeName, ref matches.AsRef());
if (matches.Any() && _renderedBoundAttributeNames.Add(attributeName))
{
@@ -1971,12 +1971,12 @@ public override void VisitMarkupTagHelperAttribute(MarkupTagHelperAttributeSynta
public override void VisitMarkupTagHelperDirectiveAttribute(MarkupTagHelperDirectiveAttributeSyntax node)
{
var element = node.FirstAncestorOrSelf();
- var descriptors = element.TagHelperInfo.BindingResult.Descriptors;
+ var tagHelpers = element.TagHelperInfo.BindingResult.TagHelpers;
var attributeName = node.FullName;
var attributeValueNode = node.Value;
using var matches = new PooledArrayBuilder();
- TagHelperMatchingConventions.GetAttributeMatches(descriptors, attributeName, ref matches.AsRef());
+ TagHelperMatchingConventions.GetAttributeMatches(tagHelpers, attributeName, ref matches.AsRef());
if (matches.Any() && _renderedBoundAttributeNames.Add(attributeName))
{
diff --git a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/DefaultRazorTagHelperContextDiscoveryPhase.cs b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/DefaultRazorTagHelperContextDiscoveryPhase.cs
index 2e4ad2a7365..7b0ac035e2b 100644
--- a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/DefaultRazorTagHelperContextDiscoveryPhase.cs
+++ b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/DefaultRazorTagHelperContextDiscoveryPhase.cs
@@ -3,10 +3,8 @@
using System;
using System.Collections.Generic;
-using System.Collections.Immutable;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
-using System.Linq;
using System.Threading;
using Microsoft.AspNetCore.Razor.Language.Components;
using Microsoft.AspNetCore.Razor.Language.Legacy;
@@ -30,7 +28,7 @@ protected override void ExecuteCore(RazorCodeDocument codeDocument, Cancellation
return;
}
- tagHelpers = tagHelperFeature.GetDescriptors(cancellationToken);
+ tagHelpers = tagHelperFeature.GetTagHelpers(cancellationToken);
}
using var _ = GetPooledVisitor(codeDocument, tagHelpers, cancellationToken, out var visitor);
@@ -79,7 +77,9 @@ internal abstract class DirectiveVisitor : SyntaxWalker, IPoolableObject
private RazorSourceDocument? _source;
private CancellationToken _cancellationToken;
- private readonly HashSet _matches = [];
+ private TagHelperCollection.Builder? _matches;
+
+ private TagHelperCollection.Builder Matches => _matches ??= [];
protected bool IsInitialized => _isInitialized;
protected RazorSourceDocument Source => _source.AssumeNotNull();
@@ -100,7 +100,7 @@ public void Visit(RazorSyntaxTree tree)
Visit(tree.Root);
}
- public ImmutableArray GetResults() => [.. _matches];
+ public TagHelperCollection GetResults() => _matches?.ToCollection() ?? [];
protected void Initialize(string? filePath, CancellationToken cancellationToken)
{
@@ -111,7 +111,12 @@ protected void Initialize(string? filePath, CancellationToken cancellationToken)
public virtual void Reset()
{
- _matches.Clear();
+ if (_matches is { } matches)
+ {
+ matches.Dispose();
+ _matches = null;
+ }
+
_filePath = null;
_source = null;
_cancellationToken = default;
@@ -121,7 +126,7 @@ public virtual void Reset()
protected void AddMatch(TagHelperDescriptor tagHelper)
{
_cancellationToken.ThrowIfCancellationRequested();
- _matches.Add(tagHelper);
+ Matches.Add(tagHelper);
}
protected void AddMatches(List tagHelpers)
@@ -130,14 +135,14 @@ protected void AddMatches(List tagHelpers)
foreach (var tagHelper in tagHelpers)
{
- _matches.Add(tagHelper);
+ Matches.Add(tagHelper);
}
}
protected void RemoveMatch(TagHelperDescriptor tagHelper)
{
_cancellationToken.ThrowIfCancellationRequested();
- _matches.Remove(tagHelper);
+ Matches.Remove(tagHelper);
}
protected void RemoveMatches(List tagHelpers)
@@ -146,7 +151,7 @@ protected void RemoveMatches(List tagHelpers)
foreach (var tagHelper in tagHelpers)
{
- _matches.Remove(tagHelper);
+ Matches.Remove(tagHelper);
}
}
@@ -180,7 +185,7 @@ internal sealed class TagHelperDirectiveVisitor : DirectiveVisitor
///
private readonly Dictionary> _tagHelperMap = new(StringComparer.Ordinal);
- private IReadOnlyList? _descriptors;
+ private TagHelperCollection? _tagHelpers;
private bool _tagHelperMapComputed;
private string? _tagHelperPrefix;
@@ -201,13 +206,13 @@ private Dictionary> TagHelperMap
void ComputeTagHelperMap()
{
- var tagHelpers = _descriptors.AssumeNotNull();
+ var tagHelpers = _tagHelpers.AssumeNotNull();
string? currentAssemblyName = null;
List? currentTagHelpers = null;
// We don't want to consider components in a view document.
- foreach (var tagHelper in tagHelpers.AsEnumerable())
+ foreach (var tagHelper in tagHelpers)
{
if (!tagHelper.IsAnyComponentDocumentTagHelper())
{
@@ -230,13 +235,13 @@ void ComputeTagHelperMap()
}
public void Initialize(
- IReadOnlyList descriptors,
+ TagHelperCollection tagHelpers,
string? filePath,
CancellationToken cancellationToken = default)
{
Debug.Assert(!IsInitialized);
- _descriptors = descriptors;
+ _tagHelpers = tagHelpers;
base.Initialize(filePath, cancellationToken);
}
@@ -250,7 +255,7 @@ public override void Reset()
_tagHelperMap.Clear();
_tagHelperMapComputed = false;
- _descriptors = null;
+ _tagHelpers = null;
_tagHelperPrefix = null;
base.Reset();
@@ -381,14 +386,14 @@ internal sealed class ComponentDirectiveVisitor : DirectiveVisitor
private List? _componentsWithoutNamespace;
public void Initialize(
- IReadOnlyList descriptors,
+ TagHelperCollection tagHelpers,
string? filePath,
string? currentNamespace,
CancellationToken cancellationToken = default)
{
Debug.Assert(!IsInitialized);
- foreach (var component in descriptors.AsEnumerable())
+ foreach (var component in tagHelpers)
{
cancellationToken.ThrowIfCancellationRequested();
diff --git a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/DefaultRazorTagHelperContextDiscoveryPhase_Pooling.cs b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/DefaultRazorTagHelperContextDiscoveryPhase_Pooling.cs
index 1107139723e..83eff11bdec 100644
--- a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/DefaultRazorTagHelperContextDiscoveryPhase_Pooling.cs
+++ b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/DefaultRazorTagHelperContextDiscoveryPhase_Pooling.cs
@@ -30,7 +30,7 @@ public void Dispose()
internal static PooledDirectiveVisitor GetPooledVisitor(
RazorCodeDocument codeDocument,
- IReadOnlyList tagHelpers,
+ TagHelperCollection tagHelpers,
CancellationToken cancellationToken,
out DirectiveVisitor visitor)
{
diff --git a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/DefaultRazorTagHelperRewritePhase.cs b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/DefaultRazorTagHelperRewritePhase.cs
index f0e3b7277a1..0b959abc1c7 100644
--- a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/DefaultRazorTagHelperRewritePhase.cs
+++ b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/DefaultRazorTagHelperRewritePhase.cs
@@ -1,8 +1,6 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-using System.Collections.Generic;
-using System.Collections.Immutable;
using System.Threading;
using Microsoft.AspNetCore.Razor.Language.Legacy;
@@ -18,15 +16,15 @@ protected override void ExecuteCore(RazorCodeDocument codeDocument, Cancellation
{
// No descriptors, so no need to see if any are used. Without setting this though,
// we trigger an Assert in the ProcessRemaining method in the source generator.
- codeDocument.SetReferencedTagHelpers(ImmutableHashSet.Empty);
+ codeDocument.SetReferencedTagHelpers([]);
return;
}
var binder = context.GetBinder();
- var usedHelpers = new HashSet();
+ using var usedHelpers = new TagHelperCollection.Builder();
var rewrittenSyntaxTree = TagHelperParseTreeRewriter.Rewrite(syntaxTree, binder, usedHelpers, cancellationToken);
- codeDocument.SetReferencedTagHelpers(usedHelpers);
+ codeDocument.SetReferencedTagHelpers(usedHelpers.ToCollection());
codeDocument.SetSyntaxTree(rewrittenSyntaxTree);
}
}
diff --git a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/ITagHelperFeature.cs b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/ITagHelperFeature.cs
index d69f3fcf62c..2d4bdc9abc8 100644
--- a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/ITagHelperFeature.cs
+++ b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/ITagHelperFeature.cs
@@ -1,12 +1,11 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-using System.Collections.Generic;
using System.Threading;
namespace Microsoft.AspNetCore.Razor.Language;
public interface ITagHelperFeature : IRazorEngineFeature
{
- IReadOnlyList GetDescriptors(CancellationToken cancellationToken = default);
+ TagHelperCollection GetTagHelpers(CancellationToken cancellationToken = default);
}
diff --git a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Intermediate/TagHelperIntermediateNode.cs b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Intermediate/TagHelperIntermediateNode.cs
index ce69f80f4ed..393833562b9 100644
--- a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Intermediate/TagHelperIntermediateNode.cs
+++ b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Intermediate/TagHelperIntermediateNode.cs
@@ -1,7 +1,6 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-using System.Collections.Immutable;
using System.Linq;
namespace Microsoft.AspNetCore.Razor.Language.Intermediate;
@@ -16,7 +15,7 @@ public sealed class TagHelperIntermediateNode : IntermediateNode
///
public SourceSpan? StartTagSpan { get; init; }
- public ImmutableArray TagHelpers { get; init => field = value.NullToEmpty(); } = [];
+ public TagHelperCollection TagHelpers { get; init => field = value ?? []; } = [];
public override IntermediateNodeCollection Children { get => field ??= []; }
diff --git a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Legacy/TagHelperBlockRewriter.cs b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Legacy/TagHelperBlockRewriter.cs
index 1b69b0860bc..fde22e52249 100644
--- a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Legacy/TagHelperBlockRewriter.cs
+++ b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Legacy/TagHelperBlockRewriter.cs
@@ -61,7 +61,7 @@ public static MarkupTagHelperStartTagSyntax Rewrite(
string tagName,
RazorParserOptions options,
MarkupStartTagSyntax startTag,
- TagHelperBinding bindingResult,
+ TagHelperBinding binding,
ErrorSink errorSink,
RazorSourceDocument source)
{
@@ -83,7 +83,7 @@ public static MarkupTagHelperStartTagSyntax Rewrite(
result = TryParseAttribute(
tagName,
attributeBlock,
- bindingResult.Descriptors,
+ binding.TagHelpers,
errorSink,
processedBoundAttributeNames,
options);
@@ -96,7 +96,7 @@ public static MarkupTagHelperStartTagSyntax Rewrite(
result = TryParseMinimizedAttribute(
tagName,
minimizedAttributeBlock,
- bindingResult.Descriptors,
+ binding.TagHelpers,
errorSink,
processedBoundAttributeNames);
attributeBuilder.Add(result.RewrittenAttribute);
@@ -181,7 +181,7 @@ public static MarkupTagHelperStartTagSyntax Rewrite(
string.IsNullOrWhiteSpace(GetAttributeValueContent(result.RewrittenAttribute))))
{
var errorLocation = new SourceSpan(attributeNameLocation, result.AttributeName.Length);
- var propertyTypeName = GetPropertyType(result.AttributeName, bindingResult.Descriptors);
+ var propertyTypeName = GetPropertyType(result.AttributeName, binding.TagHelpers);
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_EmptyBoundAttribute(errorLocation, result.AttributeName, tagName, propertyTypeName);
errorSink.OnError(diagnostic);
}
@@ -216,12 +216,12 @@ public static MarkupTagHelperStartTagSyntax Rewrite(
private static TryParseResult TryParseMinimizedAttribute(
string tagName,
MarkupMinimizedAttributeBlockSyntax attributeBlock,
- IEnumerable descriptors,
+ TagHelperCollection tagHelpers,
ErrorSink errorSink,
HashSet processedBoundAttributeNames)
{
// Have a name now. Able to determine correct isBoundNonStringAttribute value.
- var result = CreateTryParseResult(attributeBlock.Name.GetContent(), descriptors, processedBoundAttributeNames);
+ var result = CreateTryParseResult(attributeBlock.Name.GetContent(), tagHelpers, processedBoundAttributeNames);
result.AttributeStructure = AttributeStructure.Minimized;
@@ -253,13 +253,13 @@ private static TryParseResult TryParseMinimizedAttribute(
private static TryParseResult TryParseAttribute(
string tagName,
MarkupAttributeBlockSyntax attributeBlock,
- IEnumerable descriptors,
+ TagHelperCollection tagHelpers,
ErrorSink errorSink,
HashSet processedBoundAttributeNames,
RazorParserOptions options)
{
// Have a name now. Able to determine correct isBoundNonStringAttribute value.
- var result = CreateTryParseResult(attributeBlock.Name.GetContent(), descriptors, processedBoundAttributeNames);
+ var result = CreateTryParseResult(attributeBlock.Name.GetContent(), tagHelpers, processedBoundAttributeNames);
if (attributeBlock.ValuePrefix == null)
{
@@ -465,11 +465,11 @@ private static MarkupTagHelperAttributeValueSyntax RewriteAttributeValue(TryPars
}
// Determines the full name of the Type of the property corresponding to an attribute with the given name.
- private static string GetPropertyType(string name, IEnumerable descriptors)
+ private static string GetPropertyType(string name, TagHelperCollection tagHelpers)
{
- foreach (var descriptor in descriptors)
+ foreach (var tagHelper in tagHelpers)
{
- if (TagHelperMatchingConventions.TryGetFirstBoundAttributeMatch(descriptor, name, out var match))
+ if (TagHelperMatchingConventions.TryGetFirstBoundAttributeMatch(tagHelper, name, out var match))
{
return match.IsIndexerMatch
? match.Attribute.IndexerTypeName
@@ -483,7 +483,7 @@ private static string GetPropertyType(string name, IEnumerable descriptors,
+ TagHelperCollection tagHelpers,
HashSet processedBoundAttributeNames)
{
var isBoundAttribute = false;
@@ -493,9 +493,9 @@ private static TryParseResult CreateTryParseResult(
var isDirectiveAttribute = false;
var isDuplicateAttribute = false;
- foreach (var descriptor in descriptors)
+ foreach (var tagHelper in tagHelpers)
{
- if (TagHelperMatchingConventions.TryGetFirstBoundAttributeMatch(descriptor, name, out var match))
+ if (TagHelperMatchingConventions.TryGetFirstBoundAttributeMatch(tagHelper, name, out var match))
{
isBoundAttribute = true;
isBoundNonStringAttribute = !match.ExpectsStringValue;
diff --git a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Legacy/TagHelperParseTreeRewriter.cs b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Legacy/TagHelperParseTreeRewriter.cs
index 26dc3dae791..7706ba59913 100644
--- a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Legacy/TagHelperParseTreeRewriter.cs
+++ b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Legacy/TagHelperParseTreeRewriter.cs
@@ -18,7 +18,7 @@ internal static class TagHelperParseTreeRewriter
public static RazorSyntaxTree Rewrite(
RazorSyntaxTree syntaxTree,
TagHelperBinder binder,
- ISet? usedDescriptors = null,
+ TagHelperCollection.Builder? usedDescriptors = null,
CancellationToken cancellationToken = default)
{
using var errorSink = new ErrorSink();
@@ -41,7 +41,7 @@ public static RazorSyntaxTree Rewrite(
builder.AddRange(treeDiagnostics);
builder.AddRange(sinkDiagnostics);
- foreach (var descriptor in binder.Descriptors)
+ foreach (var descriptor in binder.TagHelpers)
{
descriptor.AppendAllDiagnostics(ref builder.AsRef());
}
@@ -57,7 +57,7 @@ internal sealed class Rewriter(
TagHelperBinder binder,
RazorParserOptions options,
ErrorSink errorSink,
- ISet? usedDescriptors,
+ TagHelperCollection.Builder? usedDescriptors,
CancellationToken cancellationToken) : SyntaxRewriter
{
// Internal for testing.
@@ -69,7 +69,7 @@ internal sealed class Rewriter(
private readonly Stack _trackerStack = new();
private readonly ErrorSink _errorSink = errorSink;
private readonly RazorParserOptions _options = options;
- private readonly ISet _usedDescriptors = usedDescriptors ?? new HashSet();
+ private readonly TagHelperCollection.Builder? _usedDescriptors = usedDescriptors;
private readonly CancellationToken _cancellationToken = cancellationToken;
private TagTracker? CurrentTracker => _trackerStack.Count > 0 ? _trackerStack.Peek() : null;
@@ -282,10 +282,7 @@ private bool TryRewriteTagHelperStart(
return false;
}
- foreach (var descriptor in tagHelperBinding.Descriptors)
- {
- _usedDescriptors.Add(descriptor);
- }
+ _usedDescriptors?.AddRange(tagHelperBinding.TagHelpers);
ValidateParentAllowsTagHelper(tagName, startTag);
ValidateBinding(tagHelperBinding, tagName, startTag);
@@ -774,7 +771,7 @@ public bool AllowsChild(string tagName, bool nameIncludesPrefix)
using var result = new PooledArrayBuilder();
- foreach (var tagHelper in _binding.Descriptors)
+ foreach (var tagHelper in _binding.TagHelpers)
{
foreach (var allowedChildTag in tagHelper.AllowedChildTags)
{
diff --git a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Legacy/TagHelperSpanInternal.cs b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Legacy/TagHelperSpanInternal.cs
index 67737ae0700..df90720bfc8 100644
--- a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Legacy/TagHelperSpanInternal.cs
+++ b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Legacy/TagHelperSpanInternal.cs
@@ -1,11 +1,9 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-using System.Collections.Immutable;
-
namespace Microsoft.AspNetCore.Razor.Language.Legacy;
internal readonly record struct TagHelperSpanInternal(SourceSpan Span, TagHelperBinding Binding)
{
- public ImmutableArray TagHelpers => Binding.Descriptors;
+ public TagHelperCollection TagHelpers => Binding.TagHelpers;
}
diff --git a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/RazorCodeDocument.PropertyTable.cs b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/RazorCodeDocument.PropertyTable.cs
index c8f829e5f98..f613688d0a3 100644
--- a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/RazorCodeDocument.PropertyTable.cs
+++ b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/RazorCodeDocument.PropertyTable.cs
@@ -2,7 +2,6 @@
// The .NET Foundation licenses this file to you under the MIT license.
using System;
-using System.Collections.Generic;
using System.Collections.Immutable;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
@@ -25,8 +24,8 @@ private readonly struct PropertyTable()
private readonly object?[] _values = new object?[Size];
- public Property> TagHelpers => new(_values, 0);
- public Property> ReferencedTagHelpers => new(_values, 1);
+ public Property TagHelpers => new(_values, 0);
+ public Property ReferencedTagHelpers => new(_values, 1);
public Property PreTagHelperSyntaxTree => new(_values, 2);
public Property SyntaxTree => new(_values, 3);
public BoxedProperty> ImportSyntaxTrees => new(_values, 4);
diff --git a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/RazorCodeDocument.cs b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/RazorCodeDocument.cs
index b48baabb2c2..ab668c4d145 100644
--- a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/RazorCodeDocument.cs
+++ b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/RazorCodeDocument.cs
@@ -63,28 +63,28 @@ public static RazorCodeDocument Create(
return new RazorCodeDocument(source, imports, parserOptions, codeGenerationOptions);
}
- internal bool TryGetTagHelpers([NotNullWhen(true)] out IReadOnlyList? result)
+ internal bool TryGetTagHelpers([NotNullWhen(true)] out TagHelperCollection? result)
=> _properties.TagHelpers.TryGetValue(out result);
- internal IReadOnlyList? GetTagHelpers()
+ internal TagHelperCollection? GetTagHelpers()
=> _properties.TagHelpers.Value;
- internal IReadOnlyList GetRequiredTagHelpers()
+ internal TagHelperCollection GetRequiredTagHelpers()
=> _properties.TagHelpers.RequiredValue;
- internal void SetTagHelpers(IReadOnlyList? value)
+ internal void SetTagHelpers(TagHelperCollection? value)
=> _properties.TagHelpers.SetValue(value);
- internal bool TryGetReferencedTagHelpers([NotNullWhen(true)] out ISet? result)
+ internal bool TryGetReferencedTagHelpers([NotNullWhen(true)] out TagHelperCollection? result)
=> _properties.ReferencedTagHelpers.TryGetValue(out result);
- internal ISet? GetReferencedTagHelpers()
+ internal TagHelperCollection? GetReferencedTagHelpers()
=> _properties.ReferencedTagHelpers.Value;
- internal ISet GetRequiredReferencedTagHelpers()
+ internal TagHelperCollection GetRequiredReferencedTagHelpers()
=> _properties.ReferencedTagHelpers.RequiredValue;
- internal void SetReferencedTagHelpers(ISet value)
+ internal void SetReferencedTagHelpers(TagHelperCollection value)
{
ArgHelper.ThrowIfNull(value);
_properties.ReferencedTagHelpers.SetValue(value);
diff --git a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/RazorProjectEngine.cs b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/RazorProjectEngine.cs
index 702782fd46b..e755e4e8317 100644
--- a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/RazorProjectEngine.cs
+++ b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/RazorProjectEngine.cs
@@ -71,7 +71,7 @@ public RazorCodeDocument Process(
RazorSourceDocument source,
RazorFileKind fileKind,
ImmutableArray importSources,
- IReadOnlyList? tagHelpers,
+ TagHelperCollection? tagHelpers,
CancellationToken cancellationToken = default)
{
ArgHelper.ThrowIfNull(source);
@@ -99,7 +99,7 @@ public RazorCodeDocument ProcessDeclarationOnly(
RazorSourceDocument source,
RazorFileKind fileKind,
ImmutableArray importSources,
- IReadOnlyList? tagHelpers,
+ TagHelperCollection? tagHelpers,
CancellationToken cancellationToken = default)
{
ArgHelper.ThrowIfNull(source);
@@ -127,7 +127,7 @@ public RazorCodeDocument ProcessDesignTime(
RazorSourceDocument source,
RazorFileKind fileKind,
ImmutableArray importSources,
- IReadOnlyList? tagHelpers,
+ TagHelperCollection? tagHelpers,
CancellationToken cancellationToken = default)
{
ArgHelper.ThrowIfNull(source);
@@ -151,7 +151,7 @@ internal RazorCodeDocument CreateCodeDocument(
RazorSourceDocument source,
RazorFileKind fileKind,
ImmutableArray importSources,
- IReadOnlyList? tagHelpers,
+ TagHelperCollection? tagHelpers,
string? cssScope)
{
ArgHelper.ThrowIfNull(source);
@@ -163,7 +163,7 @@ internal RazorCodeDocument CreateDesignTimeCodeDocument(
RazorSourceDocument source,
RazorFileKind fileKind,
ImmutableArray importSources,
- IReadOnlyList? tagHelpers)
+ TagHelperCollection? tagHelpers)
{
ArgHelper.ThrowIfNull(source);
@@ -186,7 +186,7 @@ private RazorCodeDocument CreateCodeDocumentCore(
RazorSourceDocument source,
RazorFileKind fileKind,
ImmutableArray importSources,
- IReadOnlyList? tagHelpers,
+ TagHelperCollection? tagHelpers,
string? cssScope,
Action? configureParser,
Action? configureCodeGeneration)
@@ -216,7 +216,7 @@ private RazorCodeDocument CreateCodeDocumentDesignTimeCore(
RazorSourceDocument sourceDocument,
RazorFileKind fileKind,
ImmutableArray importSources,
- IReadOnlyList? tagHelpers,
+ TagHelperCollection? tagHelpers,
Action? configureParser,
Action? configureCodeGeneration)
{
diff --git a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/RazorProjectEngineExtensions.cs b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/RazorProjectEngineExtensions.cs
index 8db362d70ab..89c00fac19b 100644
--- a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/RazorProjectEngineExtensions.cs
+++ b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/RazorProjectEngineExtensions.cs
@@ -1,7 +1,6 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-using System.Collections.Generic;
using System.Collections.Immutable;
namespace Microsoft.AspNetCore.Razor.Language;
@@ -32,21 +31,21 @@ public static RazorCodeDocument CreateCodeDocument(
public static RazorCodeDocument CreateCodeDocument(
this RazorProjectEngine projectEngine,
RazorSourceDocument source,
- IReadOnlyList tagHelpers)
+ TagHelperCollection tagHelpers)
=> projectEngine.CreateCodeDocumentCore(source, tagHelpers: tagHelpers);
public static RazorCodeDocument CreateCodeDocument(
this RazorProjectEngine projectEngine,
RazorSourceDocument source,
RazorFileKind fileKind,
- IReadOnlyList tagHelpers)
+ TagHelperCollection tagHelpers)
=> projectEngine.CreateCodeDocumentCore(source, fileKind, tagHelpers: tagHelpers);
public static RazorCodeDocument CreateCodeDocument(
this RazorProjectEngine projectEngine,
RazorSourceDocument source,
ImmutableArray importSources,
- IReadOnlyList tagHelpers)
+ TagHelperCollection tagHelpers)
=> projectEngine.CreateCodeDocumentCore(source, importSources: importSources, tagHelpers: tagHelpers);
public static RazorCodeDocument CreateCodeDocument(
@@ -54,7 +53,7 @@ public static RazorCodeDocument CreateCodeDocument(
RazorSourceDocument source,
RazorFileKind fileKind,
ImmutableArray importSources,
- IReadOnlyList tagHelpers)
+ TagHelperCollection tagHelpers)
=> projectEngine.CreateCodeDocumentCore(source, fileKind, importSources, tagHelpers);
private static RazorCodeDocument CreateCodeDocumentCore(
@@ -62,7 +61,7 @@ private static RazorCodeDocument CreateCodeDocumentCore(
RazorSourceDocument source,
RazorFileKind? fileKind = null,
ImmutableArray importSources = default,
- IReadOnlyList? tagHelpers = null)
+ TagHelperCollection? tagHelpers = null)
{
var fileKindValue = fileKind ?? (source.FilePath is string filePath
? FileKinds.GetFileKindFromPath(filePath)
@@ -93,21 +92,21 @@ public static RazorCodeDocument CreateDesignTimeCodeDocument(
public static RazorCodeDocument CreateDesignTimeCodeDocument(
this RazorProjectEngine projectEngine,
RazorSourceDocument source,
- IReadOnlyList tagHelpers)
+ TagHelperCollection tagHelpers)
=> projectEngine.CreateDesignTimeCodeDocumentCore(source, tagHelpers: tagHelpers);
public static RazorCodeDocument CreateDesignTimeCodeDocument(
this RazorProjectEngine projectEngine,
RazorSourceDocument source,
RazorFileKind fileKind,
- IReadOnlyList tagHelpers)
+ TagHelperCollection tagHelpers)
=> projectEngine.CreateDesignTimeCodeDocumentCore(source, fileKind, tagHelpers: tagHelpers);
public static RazorCodeDocument CreateDesignTimeCodeDocument(
this RazorProjectEngine projectEngine,
RazorSourceDocument source,
ImmutableArray importSources,
- IReadOnlyList tagHelpers)
+ TagHelperCollection tagHelpers)
=> projectEngine.CreateDesignTimeCodeDocumentCore(source, importSources: importSources, tagHelpers: tagHelpers);
public static RazorCodeDocument CreateDesignTimeCodeDocument(
@@ -115,7 +114,7 @@ public static RazorCodeDocument CreateDesignTimeCodeDocument(
RazorSourceDocument source,
RazorFileKind fileKind,
ImmutableArray importSources,
- IReadOnlyList tagHelpers)
+ TagHelperCollection tagHelpers)
=> projectEngine.CreateDesignTimeCodeDocumentCore(source, fileKind, importSources, tagHelpers);
private static RazorCodeDocument CreateDesignTimeCodeDocumentCore(
@@ -123,7 +122,7 @@ private static RazorCodeDocument CreateDesignTimeCodeDocumentCore(
RazorSourceDocument source,
RazorFileKind? fileKind = null,
ImmutableArray importSources = default,
- IReadOnlyList? tagHelpers = null)
+ TagHelperCollection? tagHelpers = null)
{
var fileKindValue = fileKind ?? (source.FilePath is string filePath
? FileKinds.GetFileKindFromPath(filePath)
diff --git a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Syntax/SyntaxSerializer.cs b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Syntax/SyntaxSerializer.cs
index ba11e20c6ee..363f4ebb7f2 100644
--- a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Syntax/SyntaxSerializer.cs
+++ b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Syntax/SyntaxSerializer.cs
@@ -133,12 +133,12 @@ private void WriteTagHelperElement(MarkupTagHelperElementSyntax node)
WriteValue($"{tagHelperInfo.TagName}[{tagHelperInfo.TagMode}]");
// Write descriptors
- foreach (var descriptor in tagHelperInfo.BindingResult.Descriptors)
+ foreach (var tagHelper in tagHelperInfo.BindingResult.TagHelpers)
{
WriteSeparator();
// Get the type name without the namespace.
- var typeName = descriptor.Name[(descriptor.Name.LastIndexOf('.') + 1)..];
+ var typeName = tagHelper.Name[(tagHelper.Name.LastIndexOf('.') + 1)..];
WriteValue(typeName);
}
}
diff --git a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/TagHelperBinder.cs b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/TagHelperBinder.cs
index c48b61748f1..90d57d1577b 100644
--- a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/TagHelperBinder.cs
+++ b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/TagHelperBinder.cs
@@ -15,28 +15,28 @@ namespace Microsoft.AspNetCore.Razor.Language;
///
internal sealed partial class TagHelperBinder
{
- private readonly TagHelperSet _catchAllDescriptors;
- private readonly ReadOnlyDictionary _tagNameToDescriptorsMap;
+ private readonly TagHelperSet _catchAllTagHelpers;
+ private readonly ReadOnlyDictionary _tagNameToTagHelpersMap;
public string? TagNamePrefix { get; }
- public ImmutableArray Descriptors { get; }
+ public TagHelperCollection TagHelpers { get; }
///
/// Instantiates a new instance of the .
///
/// The tag helper prefix being used by the document.
- /// The s that the
+ /// The s that the
/// will pull from.
- public TagHelperBinder(string? tagNamePrefix, ImmutableArray descriptors)
+ public TagHelperBinder(string? tagNamePrefix, TagHelperCollection tagHelpers)
{
TagNamePrefix = tagNamePrefix;
- Descriptors = descriptors.NullToEmpty();
+ TagHelpers = tagHelpers;
- ProcessDescriptors(descriptors, tagNamePrefix, out _tagNameToDescriptorsMap, out _catchAllDescriptors);
+ ProcessDescriptors(tagHelpers, tagNamePrefix, out _tagNameToTagHelpersMap, out _catchAllTagHelpers);
}
private static void ProcessDescriptors(
- ImmutableArray descriptors,
+ TagHelperCollection descriptors,
string? tagNamePrefix,
out ReadOnlyDictionary tagNameToDescriptorsMap,
out TagHelperSet catchAllDescriptors)
@@ -47,29 +47,19 @@ private static void ProcessDescriptors(
// Keep track of what needs to be added in the second pass.
// There will be an entry for every tag matching rule.
// Each entry consists of an index to identify a builder and the TagHelperDescriptor to add to it.
- using var toAdd = new MemoryBuilder<(int, TagHelperDescriptor)>(initialCapacity: descriptors.Length * 4, clearArray: true);
+ using var toAdd = new MemoryBuilder<(int, TagHelperDescriptor)>(initialCapacity: descriptors.Count * 4, clearArray: true);
// Use a special TagHelperSet.Builder to track catch-all tag helpers.
var catchAllBuilder = new TagHelperSet.Builder();
// At most, there should only be one catch-all tag helper per descriptor.
- using var catchAllToAdd = new MemoryBuilder(initialCapacity: descriptors.Length, clearArray: true);
+ using var catchAllToAdd = new MemoryBuilder(initialCapacity: descriptors.Count, clearArray: true);
// The builders are indexed using a map of "tag name" to the index of the builder in the array.
using var _1 = SpecializedPools.GetPooledStringDictionary(ignoreCase: true, out var tagNameToBuilderIndexMap);
- using var _2 = HashSetPool.GetPooledObject(out var tagHelperSet);
-
-#if NET
- tagHelperSet.EnsureCapacity(descriptors.Length);
-#endif
foreach (var tagHelper in descriptors)
{
- if (!tagHelperSet.Add(tagHelper))
- {
- // We've already seen this tag helper. Skip.
- continue;
- }
foreach (var rule in tagHelper.TagMatchingRules)
{
@@ -167,7 +157,7 @@ private static void ProcessDescriptors(
using var pooledSet = HashSetPool.GetPooledObject(out var distinctSet);
// First, try any tag helpers with this tag name.
- if (_tagNameToDescriptorsMap.TryGetValue(tagName, out var matchingDescriptors))
+ if (_tagNameToTagHelpersMap.TryGetValue(tagName, out var matchingDescriptors))
{
CollectBoundRulesInfo(
matchingDescriptors,
@@ -177,7 +167,7 @@ private static void ProcessDescriptors(
// Next, try any "catch all" descriptors.
CollectBoundRulesInfo(
- _catchAllDescriptors,
+ _catchAllTagHelpers,
tagNameSpan, parentTagNameSpan, attributes,
ref resultsBuilder.AsRef(), ref tempRulesBuilder.AsRef(), distinctSet);
diff --git a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/TagHelperBinding.cs b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/TagHelperBinding.cs
index d67122cf217..4d9d796b565 100644
--- a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/TagHelperBinding.cs
+++ b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/TagHelperBinding.cs
@@ -1,9 +1,9 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-using System;
using System.Collections.Generic;
using System.Collections.Immutable;
+using Microsoft.AspNetCore.Razor.Threading;
namespace Microsoft.AspNetCore.Razor.Language;
@@ -15,7 +15,15 @@ internal sealed class TagHelperBinding
public string? ParentTagName { get; }
public ImmutableArray> Attributes { get; }
- private ImmutableArray _descriptors;
+ private LazyValue, TagHelperCollection> _lazyTagHelpers = new(static allBoundRules =>
+ TagHelperCollection.Build(allBoundRules, initialCapacity: allBoundRules.Length, static (ref builder, allBoundRules) =>
+ {
+ foreach (var boundRule in allBoundRules)
+ {
+ builder.Add(boundRule.Descriptor);
+ }
+ }));
+
private bool? _isAttributeMatch;
internal TagHelperBinding(
@@ -32,18 +40,7 @@ internal TagHelperBinding(
TagNamePrefix = tagNamePrefix;
}
- public ImmutableArray Descriptors
- {
- get
- {
- if (_descriptors.IsDefault)
- {
- ImmutableInterlocked.InterlockedInitialize(ref _descriptors, AllBoundRules.SelectAsArray(x => x.Descriptor));
- }
-
- return _descriptors;
- }
- }
+ public TagHelperCollection TagHelpers => _lazyTagHelpers.GetValue(AllBoundRules);
public ImmutableArray GetBoundRules(TagHelperDescriptor descriptor)
=> AllBoundRules.First(descriptor, static (info, d) => info.Descriptor.Equals(d)).Rules;
@@ -62,13 +59,13 @@ public bool IsAttributeMatch
{
get
{
- return _isAttributeMatch ??= ComputeIsAttributeMatch(Descriptors);
+ return _isAttributeMatch ??= ComputeIsAttributeMatch(TagHelpers);
- static bool ComputeIsAttributeMatch(ImmutableArray descriptors)
+ static bool ComputeIsAttributeMatch(TagHelperCollection tagHelpers)
{
- foreach (var descriptor in descriptors)
+ foreach (var tagHelper in tagHelpers)
{
- if (!descriptor.ClassifyAttributesOnly)
+ if (!tagHelper.ClassifyAttributesOnly)
{
return false;
}
diff --git a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/TagHelperDocumentContext.cs b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/TagHelperDocumentContext.cs
index 0a9409ac177..4311327518f 100644
--- a/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/TagHelperDocumentContext.cs
+++ b/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/TagHelperDocumentContext.cs
@@ -1,9 +1,6 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-using System;
-using System.Collections.Immutable;
-
namespace Microsoft.AspNetCore.Razor.Language;
///