Added a copy constructor for tag helper descriptors. (#827)
This commit is contained in:
parent
0e1a54ef4f
commit
d19845730f
|
|
@ -151,20 +151,10 @@ namespace Microsoft.AspNetCore.Razor.Runtime.TagHelpers
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(tagHelperPrefix))
|
if (!string.IsNullOrEmpty(tagHelperPrefix))
|
||||||
{
|
{
|
||||||
return descriptors.Select(descriptor =>
|
return descriptors.Select(descriptor => new TagHelperDescriptor(descriptor)
|
||||||
new TagHelperDescriptor
|
{
|
||||||
{
|
Prefix = tagHelperPrefix
|
||||||
Prefix = tagHelperPrefix,
|
});
|
||||||
TagName = descriptor.TagName,
|
|
||||||
TypeName = descriptor.TypeName,
|
|
||||||
AssemblyName = descriptor.AssemblyName,
|
|
||||||
Attributes = descriptor.Attributes,
|
|
||||||
RequiredAttributes = descriptor.RequiredAttributes,
|
|
||||||
AllowedChildren = descriptor.AllowedChildren,
|
|
||||||
RequiredParent = descriptor.RequiredParent,
|
|
||||||
TagStructure = descriptor.TagStructure,
|
|
||||||
DesignTimeDescriptor = descriptor.DesignTimeDescriptor
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return descriptors;
|
return descriptors;
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,36 @@ namespace Microsoft.AspNetCore.Razor.Compilation.TagHelpers
|
||||||
private IEnumerable<TagHelperRequiredAttributeDescriptor> _requiredAttributes =
|
private IEnumerable<TagHelperRequiredAttributeDescriptor> _requiredAttributes =
|
||||||
Enumerable.Empty<TagHelperRequiredAttributeDescriptor>();
|
Enumerable.Empty<TagHelperRequiredAttributeDescriptor>();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a new <see cref="TagHelperDescriptor"/>.
|
||||||
|
/// </summary>
|
||||||
|
public TagHelperDescriptor()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a shallow copy of the given <see cref="TagHelperDescriptor"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="descriptor">The <see cref="TagHelperDescriptor"/> to copy.</param>
|
||||||
|
public TagHelperDescriptor (TagHelperDescriptor descriptor)
|
||||||
|
{
|
||||||
|
Prefix = descriptor.Prefix;
|
||||||
|
TagName = descriptor.TagName;
|
||||||
|
TypeName = descriptor.TypeName;
|
||||||
|
AssemblyName = descriptor.AssemblyName;
|
||||||
|
Attributes = descriptor.Attributes;
|
||||||
|
RequiredAttributes = descriptor.RequiredAttributes;
|
||||||
|
AllowedChildren = descriptor.AllowedChildren;
|
||||||
|
RequiredParent = descriptor.RequiredParent;
|
||||||
|
TagStructure = descriptor.TagStructure;
|
||||||
|
DesignTimeDescriptor = descriptor.DesignTimeDescriptor;
|
||||||
|
|
||||||
|
foreach (var property in descriptor.PropertyBag)
|
||||||
|
{
|
||||||
|
PropertyBag.Add(property.Key, property.Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Text used as a required prefix when matching HTML start and end tags in the Razor source to available
|
/// Text used as a required prefix when matching HTML start and end tags in the Razor source to available
|
||||||
/// tag helpers.
|
/// tag helpers.
|
||||||
|
|
@ -219,4 +249,4 @@ namespace Microsoft.AspNetCore.Razor.Compilation.TagHelpers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,49 @@ namespace Microsoft.AspNetCore.Razor.Compilation.TagHelpers
|
||||||
{
|
{
|
||||||
public class TagHelperDescriptorTest
|
public class TagHelperDescriptorTest
|
||||||
{
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Constructor_CorrectlyCreatesCopy()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var descriptor = new TagHelperDescriptor
|
||||||
|
{
|
||||||
|
Prefix = "prefix",
|
||||||
|
TagName = "tag-name",
|
||||||
|
TypeName = "TypeName",
|
||||||
|
AssemblyName = "AsssemblyName",
|
||||||
|
Attributes = new List<TagHelperAttributeDescriptor>
|
||||||
|
{
|
||||||
|
new TagHelperAttributeDescriptor
|
||||||
|
{
|
||||||
|
Name = "test-attribute",
|
||||||
|
PropertyName = "TestAttribute",
|
||||||
|
TypeName = "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
RequiredAttributes = new List<TagHelperRequiredAttributeDescriptor>
|
||||||
|
{
|
||||||
|
new TagHelperRequiredAttributeDescriptor
|
||||||
|
{
|
||||||
|
Name = "test-required-attribute"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
AllowedChildren = new[] { "child" },
|
||||||
|
RequiredParent = "required parent",
|
||||||
|
TagStructure = TagStructure.NormalOrSelfClosing,
|
||||||
|
DesignTimeDescriptor = new TagHelperDesignTimeDescriptor()
|
||||||
|
};
|
||||||
|
|
||||||
|
descriptor.PropertyBag.Add("foo", "bar");
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var copyDescriptor = new TagHelperDescriptor(descriptor);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Equal(descriptor, copyDescriptor, CaseSensitiveTagHelperDescriptorComparer.Default);
|
||||||
|
Assert.Same(descriptor.Attributes, copyDescriptor.Attributes);
|
||||||
|
Assert.Same(descriptor.RequiredAttributes, copyDescriptor.RequiredAttributes);
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TagHelperDescriptor_CanBeSerialized()
|
public void TagHelperDescriptor_CanBeSerialized()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue