File: Language\TestTagHelperDescriptorBuilderExtensions.cs
Web Access
Project: src\src\Razor\src\Shared\Microsoft.AspNetCore.Razor.Test.Common\Microsoft.AspNetCore.Razor.Test.Common.csproj (Microsoft.AspNetCore.Razor.Test.Common)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System;
 
namespace Microsoft.AspNetCore.Razor.Language;
 
public static class TestTagHelperDescriptorBuilderExtensions
{
    extension(TagHelperDescriptorBuilder)
    {
        public static TagHelperDescriptorBuilder CreateTagHelper(string name, string assemblyName)
            => CreateTagHelper(TagHelperKind.ITagHelper, name, assemblyName);
 
        public static TagHelperDescriptorBuilder CreateTagHelper(TagHelperKind kind, string name, string assemblyName)
        {
            var builder = TagHelperDescriptorBuilder.Create(kind, name, assemblyName);
            builder.RuntimeKind = Language.RuntimeKind.ITagHelper;
 
            return builder;
        }
 
        public static TagHelperDescriptorBuilder CreateViewComponent(string name, string assemblyName)
            => CreateTagHelper(TagHelperKind.ViewComponent, name, assemblyName);
 
        public static TagHelperDescriptorBuilder CreateComponent(string name, string assemblyName)
        {
            var builder = TagHelperDescriptorBuilder.Create(TagHelperKind.Component, name, assemblyName);
            builder.RuntimeKind = Language.RuntimeKind.IComponent;
 
            return builder;
        }
 
        public static TagHelperDescriptorBuilder CreateEventHandler(string name, string assemblyName)
            => TagHelperDescriptorBuilder.Create(TagHelperKind.EventHandler, name, assemblyName);
    }
 
    public static TagHelperDescriptorBuilder Metadata(
        this TagHelperDescriptorBuilder builder,
        MetadataObject metadata)
    {
        builder.SetMetadata(metadata);
 
        return builder;
    }
 
    public static TagHelperDescriptorBuilder DisplayName(this TagHelperDescriptorBuilder builder, string displayName)
    {
        if (builder == null)
        {
            throw new ArgumentNullException(nameof(builder));
        }
 
        builder.DisplayName = displayName;
 
        return builder;
    }
 
    public static TagHelperDescriptorBuilder AllowChildTag(this TagHelperDescriptorBuilder builder, string allowedChild)
    {
        if (builder == null)
        {
            throw new ArgumentNullException(nameof(builder));
        }
 
        builder.AllowChildTag(childTagBuilder => childTagBuilder.Name = allowedChild);
 
        return builder;
    }
 
    public static TagHelperDescriptorBuilder TagOutputHint(this TagHelperDescriptorBuilder builder, string hint)
    {
        if (builder == null)
        {
            throw new ArgumentNullException(nameof(builder));
        }
 
        builder.TagOutputHint = hint;
 
        return builder;
    }
 
    public static TagHelperDescriptorBuilder RuntimeKind(this TagHelperDescriptorBuilder builder, RuntimeKind runtimeKind)
    {
        builder.RuntimeKind = runtimeKind;
 
        return builder;
    }
 
    public static TagHelperDescriptorBuilder IsFullyQualifiedNameMatch(this TagHelperDescriptorBuilder builder, bool value)
    {
        builder.IsFullyQualifiedNameMatch = value;
 
        return builder;
    }
 
    public static TagHelperDescriptorBuilder ClassifyAttributesOnly(this TagHelperDescriptorBuilder builder, bool value)
    {
        builder.ClassifyAttributesOnly = value;
 
        return builder;
    }
 
    public static TagHelperDescriptorBuilder SetCaseSensitive(this TagHelperDescriptorBuilder builder)
    {
        if (builder == null)
        {
            throw new ArgumentNullException(nameof(builder));
        }
 
        builder.CaseSensitive = true;
 
        return builder;
    }
 
    public static TagHelperDescriptorBuilder TypeName(
        this TagHelperDescriptorBuilder builder,
        string fullName,
        string? typeNamespace = null,
        string? typeNameIdentifier = null)
    {
        builder.SetTypeName(fullName, typeNamespace, typeNameIdentifier);
 
        return builder;
    }
 
    public static TagHelperDescriptorBuilder Documentation(this TagHelperDescriptorBuilder builder, string documentation)
    {
        if (builder == null)
        {
            throw new ArgumentNullException(nameof(builder));
        }
 
        builder.SetDocumentation(documentation);
 
        return builder;
    }
 
    public static TagHelperDescriptorBuilder AddDiagnostic(this TagHelperDescriptorBuilder builder, RazorDiagnostic diagnostic)
    {
        if (builder == null)
        {
            throw new ArgumentNullException(nameof(builder));
        }
 
        builder.Diagnostics.Add(diagnostic);
 
        return builder;
    }
 
    public static TagHelperDescriptorBuilder BoundAttributeDescriptor(
        this TagHelperDescriptorBuilder builder,
        Action<BoundAttributeDescriptorBuilder> configure)
    {
        if (builder == null)
        {
            throw new ArgumentNullException(nameof(builder));
        }
 
        builder.BindAttribute(configure);
 
        return builder;
    }
 
    public static TagHelperDescriptorBuilder TagMatchingRuleDescriptor(
        this TagHelperDescriptorBuilder builder,
        Action<TagMatchingRuleDescriptorBuilder> configure)
    {
        if (builder == null)
        {
            throw new ArgumentNullException(nameof(builder));
        }
 
        builder.TagMatchingRule(configure);
 
        return builder;
    }
 
#nullable enable
 
    public static TagHelperDescriptorBuilder AllowedChildTag(
        this TagHelperDescriptorBuilder builder,
        string tagName,
        Action<AllowedChildTagDescriptorBuilder>? configure = null)
    {
        if (builder == null)
        {
            throw new ArgumentNullException(nameof(builder));
        }
 
        builder.AllowChildTag(childTag =>
        {
            childTag.Name = tagName;
 
            configure?.Invoke(childTag);
        });
 
        return builder;
    }
 
    public static TagHelperDescriptorBuilder BoundAttribute<T>(
        this TagHelperDescriptorBuilder builder,
        string name,
        string propertyName,
        Action<BoundAttributeDescriptorBuilder>? configure = null)
        where T : notnull
        => BoundAttribute(builder, name, propertyName, typeof(T), configure);
 
    public static TagHelperDescriptorBuilder BoundAttribute(
        this TagHelperDescriptorBuilder builder,
        string name,
        string propertyName,
        Type type,
        Action<BoundAttributeDescriptorBuilder>? configure = null)
        => BoundAttribute(builder, name, propertyName, type.FullName!, configure);
 
    public static TagHelperDescriptorBuilder BoundAttribute(
        this TagHelperDescriptorBuilder builder,
        string name,
        string propertyName,
        string typeName,
        Action<BoundAttributeDescriptorBuilder>? configure = null)
    {
        builder.BoundAttributeDescriptor(attribute =>
         {
             attribute.Name = name;
             attribute.PropertyName = propertyName;
             attribute.TypeName = typeName;
 
             configure?.Invoke(attribute);
         });
 
        return builder;
    }
 
    public static TagHelperDescriptorBuilder TagMatchingRule(
        this TagHelperDescriptorBuilder builder,
        Action<TagMatchingRuleDescriptorBuilder> configure)
        => builder.TagMatchingRule(tagName: null, parentTagName: null, tagStructure: TagStructure.Unspecified, configure);
 
    public static TagHelperDescriptorBuilder TagMatchingRule(
        this TagHelperDescriptorBuilder builder,
        string tagName,
        Action<TagMatchingRuleDescriptorBuilder> configure)
        => builder.TagMatchingRule(tagName, parentTagName: null, tagStructure: TagStructure.Unspecified, configure);
 
    public static TagHelperDescriptorBuilder TagMatchingRule(
        this TagHelperDescriptorBuilder builder,
        string tagName,
        string parentTagName,
        Action<TagMatchingRuleDescriptorBuilder> configure)
        => builder.TagMatchingRule(tagName, parentTagName, tagStructure: TagStructure.Unspecified, configure);
 
    public static TagHelperDescriptorBuilder TagMatchingRule(
        this TagHelperDescriptorBuilder builder,
        string tagName,
        TagStructure tagStructure,
        Action<TagMatchingRuleDescriptorBuilder> configure)
        => builder.TagMatchingRule(tagName, parentTagName: null, tagStructure, configure);
 
    public static TagHelperDescriptorBuilder TagMatchingRule(
        this TagHelperDescriptorBuilder builder,
        string? tagName = null,
        string? parentTagName = null,
        TagStructure tagStructure = TagStructure.Unspecified,
        Action<TagMatchingRuleDescriptorBuilder>? configure = null)
    {
        builder.TagMatchingRule(rule =>
        {
            rule.TagName = tagName;
            rule.ParentTag = parentTagName;
            rule.TagStructure = tagStructure;
 
            configure?.Invoke(rule);
        });
 
        return builder;
    }
}