React to case insensitive TagHelperOutput.Attributes.
- Cleaned up some existing bad code that worked around case sensitive TagHelperOutput.Attributes. - Modified MergeAttributes to be case insensitive when it comes to merging class attributes. - Added a test to verify the new MergeAttribute case insensitive class merging. aspnet/Razor#186
This commit is contained in:
parent
09af7bb77b
commit
7934c432c8
|
|
@ -154,9 +154,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
if (!string.IsNullOrEmpty(inputType))
|
if (!string.IsNullOrEmpty(inputType))
|
||||||
{
|
{
|
||||||
// inputType may be more specific than default the generator chooses below.
|
// inputType may be more specific than default the generator chooses below.
|
||||||
// TODO: Use Attributes.ContainsKey once aspnet/Razor#186 is fixed.
|
if (!output.Attributes.ContainsKey("type"))
|
||||||
if (!output.Attributes.Any(
|
|
||||||
item => string.Equals("type", item.Key, StringComparison.OrdinalIgnoreCase)))
|
|
||||||
{
|
{
|
||||||
output.Attributes["type"] = inputType;
|
output.Attributes["type"] = inputType;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -89,13 +89,11 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
{
|
{
|
||||||
foreach (var attribute in tagBuilder.Attributes)
|
foreach (var attribute in tagBuilder.Attributes)
|
||||||
{
|
{
|
||||||
// TODO: Use Attributes.ContainsKey once aspnet/Razor#186 is fixed.
|
if (!tagHelperOutput.Attributes.ContainsKey(attribute.Key))
|
||||||
if (!tagHelperOutput.Attributes.Any(
|
|
||||||
item => string.Equals(attribute.Key, item.Key, StringComparison.OrdinalIgnoreCase)))
|
|
||||||
{
|
{
|
||||||
tagHelperOutput.Attributes.Add(attribute.Key, attribute.Value);
|
tagHelperOutput.Attributes.Add(attribute.Key, attribute.Value);
|
||||||
}
|
}
|
||||||
else if (attribute.Key.Equals("class", StringComparison.Ordinal))
|
else if (attribute.Key.Equals("class", StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
tagHelperOutput.Attributes["class"] += " " + attribute.Value;
|
tagHelperOutput.Attributes["class"] += " " + attribute.Value;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -157,6 +157,31 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
Assert.Equal(expectedAttribute, attribute);
|
Assert.Equal(expectedAttribute, attribute);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Theory]
|
||||||
|
[InlineData("class", "CLAss")]
|
||||||
|
[InlineData("ClaSS", "class")]
|
||||||
|
[InlineData("ClaSS", "cLaSs")]
|
||||||
|
public void MergeAttributes_AppendsClass_TagHelperOutputAttributeValues_IgnoresCase(
|
||||||
|
string originalName, string updateName)
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var tagHelperOutput = new TagHelperOutput(
|
||||||
|
"p",
|
||||||
|
attributes: new Dictionary<string, string>(),
|
||||||
|
content: string.Empty);
|
||||||
|
tagHelperOutput.Attributes.Add(originalName, "Hello");
|
||||||
|
|
||||||
|
var tagBuilder = new TagBuilder("p");
|
||||||
|
tagBuilder.Attributes.Add(updateName, "btn");
|
||||||
|
|
||||||
|
// Act
|
||||||
|
tagHelperOutput.MergeAttributes(tagBuilder);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
var attribute = Assert.Single(tagHelperOutput.Attributes);
|
||||||
|
Assert.Equal(new KeyValuePair<string, string>(originalName, "Hello btn"), attribute);
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MergeAttributes_DoesNotEncode_TagHelperOutputAttributeValues()
|
public void MergeAttributes_DoesNotEncode_TagHelperOutputAttributeValues()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue