File: Legacy\TagHelperRewritingTestBase.cs
Web Access
Project: src\src\Razor\src\Compiler\Microsoft.AspNetCore.Razor.Language\legacyTest\Microsoft.AspNetCore.Razor.Language.Legacy.UnitTests.csproj (Microsoft.AspNetCore.Razor.Language.Legacy.UnitTests)
// 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;
using Xunit;
 
namespace Microsoft.AspNetCore.Razor.Language.Legacy;
 
public class TagHelperRewritingTestBase() : ParserTestBase(layer: TestProject.Layer.Compiler, validateSpanEditHandlers: true, useLegacyTokenizer: true)
{
    internal void RunParseTreeRewriterTest(string documentContent, params ImmutableArray<string> tagNames)
    {
        var tagHelpers = BuildTagHelpers(tagNames);
 
        EvaluateData(tagHelpers, documentContent);
    }
 
    internal static TagHelperCollection BuildTagHelpers(params ImmutableArray<string> tagNames)
    {
        return TagHelperCollection.Build(tagNames, (ref builder, tagNames) =>
        {
            foreach (var tagName in tagNames)
            {
                var tagHelper = TagHelperDescriptorBuilder.CreateTagHelper(tagName + "taghelper", "SomeAssembly")
                    .TagMatchingRuleDescriptor(rule => rule.RequireTagName(tagName))
                    .Build();
                builder.Add(tagHelper);
            }
        });
    }
 
    internal void EvaluateData(
        TagHelperCollection tagHelpers,
        string documentContent,
        string? tagHelperPrefix = null,
        RazorLanguageVersion? languageVersion = null,
        RazorFileKind? fileKind = null,
        Action<RazorParserOptions.Builder>? configureParserOptions = null)
    {
        var syntaxTree = ParseDocument(languageVersion, documentContent, directives: default, fileKind: fileKind, configureParserOptions: configureParserOptions);
 
        var binder = new TagHelperBinder(tagHelperPrefix, tagHelpers);
        var rewrittenTree = TagHelperParseTreeRewriter.Rewrite(syntaxTree, binder);
 
        Assert.Equal(syntaxTree.Root.Width, rewrittenTree.Root.Width);
 
        BaselineTest(rewrittenTree);
    }
}