Modify tests to account for new tag and attribute names for TagHelpers.

- Also added additional tests to validate new lower kebab casing.

#240
This commit is contained in:
N. Taylor Mullen 2014-12-23 11:57:39 -08:00 committed by NTaylorMullen
parent 2ad828f5bc
commit 8c47f6a67e
3 changed files with 103 additions and 27 deletions

View File

@ -1,6 +1,7 @@
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using Microsoft.AspNet.Razor.TagHelpers; using Microsoft.AspNet.Razor.TagHelpers;
@ -20,6 +21,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
bool IEqualityComparer<TagHelperDescriptor>.Equals(TagHelperDescriptor descriptorX, TagHelperDescriptor descriptorY) bool IEqualityComparer<TagHelperDescriptor>.Equals(TagHelperDescriptor descriptorX, TagHelperDescriptor descriptorY)
{ {
return base.Equals(descriptorX, descriptorY) && return base.Equals(descriptorX, descriptorY) &&
// Tests should be exact casing
string.Equals(descriptorX.TagName, descriptorY.TagName, StringComparison.Ordinal) &&
descriptorX.Attributes.SequenceEqual(descriptorY.Attributes, descriptorX.Attributes.SequenceEqual(descriptorY.Attributes,
CompleteTagHelperAttributeDescriptorComparer.Default); CompleteTagHelperAttributeDescriptorComparer.Default);
} }
@ -43,17 +46,17 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
public bool Equals(TagHelperAttributeDescriptor descriptorX, TagHelperAttributeDescriptor descriptorY) public bool Equals(TagHelperAttributeDescriptor descriptorX, TagHelperAttributeDescriptor descriptorY)
{ {
return descriptorX.Name == descriptorY.Name && return string.Equals(descriptorX.Name, descriptorY.Name, StringComparison.Ordinal) &&
descriptorX.PropertyName == descriptorY.PropertyName && string.Equals(descriptorX.PropertyName, descriptorY.PropertyName, StringComparison.Ordinal) &&
descriptorX.TypeName == descriptorY.TypeName; string.Equals(descriptorX.TypeName, descriptorY.TypeName, StringComparison.Ordinal);
} }
public int GetHashCode(TagHelperAttributeDescriptor descriptor) public int GetHashCode(TagHelperAttributeDescriptor descriptor)
{ {
return HashCodeCombiner.Start() return HashCodeCombiner.Start()
.Add(descriptor.Name) .Add(descriptor.Name, StringComparer.Ordinal)
.Add(descriptor.PropertyName) .Add(descriptor.PropertyName, StringComparer.Ordinal)
.Add(descriptor.TypeName) .Add(descriptor.TypeName, StringComparer.Ordinal)
.CombinedHash; .CombinedHash;
} }
} }

View File

@ -1,6 +1,7 @@
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Reflection; using System.Reflection;
using Microsoft.AspNet.Razor.TagHelpers; using Microsoft.AspNet.Razor.TagHelpers;
using Xunit; using Xunit;
@ -12,6 +13,42 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
private static readonly string AssemblyName = private static readonly string AssemblyName =
typeof(TagHelperDescriptorFactoryTest).GetTypeInfo().Assembly.GetName().Name; typeof(TagHelperDescriptorFactoryTest).GetTypeInfo().Assembly.GetName().Name;
public static TheoryData HtmlCaseData
{
get
{
// tagHelperType, expectedTagName, expectedAttributeName
return new TheoryData<Type, string, string>
{
{ typeof(SingleAttributeTagHelper), "single-attribute", "int-attribute" },
{ typeof(ALLCAPSTAGHELPER), "allcaps", "allcapsattribute" },
{ typeof(CAPSOnOUTSIDETagHelper), "caps-on-outside", "caps-on-outsideattribute" },
{ typeof(capsONInsideTagHelper), "caps-on-inside", "caps-on-insideattribute" },
{ typeof(One1Two2Three3TagHelper), "one1-two2-three3", "one1-two2-three3-attribute" },
{ typeof(ONE1TWO2THREE3TagHelper), "one1two2three3", "one1two2three3-attribute" },
{ typeof(First_Second_ThirdHiTagHelper), "first_second_third-hi", "first_second_third-attribute" },
{ typeof(UNSuffixedCLASS), "un-suffixed-class", "un-suffixed-attribute" },
};
}
}
[Theory]
[MemberData(nameof(HtmlCaseData))]
public void CreateDescriptor_HtmlCasesTagNameAndAttributeName(
Type tagHelperType,
string expectedTagName,
string expectedAttributeName)
{
// Arrange & Act
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(tagHelperType);
// Assert
var descriptor = Assert.Single(descriptors);
Assert.Equal(expectedTagName, descriptor.TagName, StringComparer.Ordinal);
var attributeDescriptor = Assert.Single(descriptor.Attributes);
Assert.Equal(expectedAttributeName, attributeDescriptor.Name);
}
[Fact] [Fact]
public void CreateDescriptor_OverridesAttributeNameFromAttribute() public void CreateDescriptor_OverridesAttributeNameFromAttribute()
{ {
@ -22,7 +59,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
nameof(OverriddenAttributeTagHelper.ValidAttribute2)); nameof(OverriddenAttributeTagHelper.ValidAttribute2));
var expectedDescriptors = new[] { var expectedDescriptors = new[] {
new TagHelperDescriptor( new TagHelperDescriptor(
"OverriddenAttribute", "overridden-attribute",
typeof(OverriddenAttributeTagHelper).FullName, typeof(OverriddenAttributeTagHelper).FullName,
AssemblyName, AssemblyName,
ContentBehavior.None, ContentBehavior.None,
@ -49,12 +86,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
nameof(InheritedOverriddenAttributeTagHelper.ValidAttribute2)); nameof(InheritedOverriddenAttributeTagHelper.ValidAttribute2));
var expectedDescriptors = new[] { var expectedDescriptors = new[] {
new TagHelperDescriptor( new TagHelperDescriptor(
"InheritedOverriddenAttribute", "inherited-overridden-attribute",
typeof(InheritedOverriddenAttributeTagHelper).FullName, typeof(InheritedOverriddenAttributeTagHelper).FullName,
AssemblyName, AssemblyName,
ContentBehavior.None, ContentBehavior.None,
new[] { new[] {
new TagHelperAttributeDescriptor(nameof(InheritedOverriddenAttributeTagHelper.ValidAttribute1), new TagHelperAttributeDescriptor("valid-attribute1",
validProperty1), validProperty1),
new TagHelperAttributeDescriptor("Something-Else", validProperty2) new TagHelperAttributeDescriptor("Something-Else", validProperty2)
}) })
@ -77,7 +114,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
nameof(InheritedNotOverriddenAttributeTagHelper.ValidAttribute2)); nameof(InheritedNotOverriddenAttributeTagHelper.ValidAttribute2));
var expectedDescriptors = new[] { var expectedDescriptors = new[] {
new TagHelperDescriptor( new TagHelperDescriptor(
"InheritedNotOverriddenAttribute", "inherited-not-overridden-attribute",
typeof(InheritedNotOverriddenAttributeTagHelper).FullName, typeof(InheritedNotOverriddenAttributeTagHelper).FullName,
AssemblyName, AssemblyName,
ContentBehavior.None, ContentBehavior.None,
@ -100,7 +137,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
// Arrange // Arrange
var objectAssemblyName = typeof(object).GetTypeInfo().Assembly.GetName().Name; var objectAssemblyName = typeof(object).GetTypeInfo().Assembly.GetName().Name;
var expectedDescriptor = var expectedDescriptor =
new TagHelperDescriptor("Object", "System.Object", objectAssemblyName, ContentBehavior.None); new TagHelperDescriptor("object", "System.Object", objectAssemblyName, ContentBehavior.None);
// Act // Act
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(typeof(object)); var descriptors = TagHelperDescriptorFactory.CreateDescriptors(typeof(object));
@ -117,12 +154,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
var intProperty = typeof(InheritedSingleAttributeTagHelper).GetProperty( var intProperty = typeof(InheritedSingleAttributeTagHelper).GetProperty(
nameof(InheritedSingleAttributeTagHelper.IntAttribute)); nameof(InheritedSingleAttributeTagHelper.IntAttribute));
var expectedDescriptor = new TagHelperDescriptor( var expectedDescriptor = new TagHelperDescriptor(
"InheritedSingleAttribute", "inherited-single-attribute",
typeof(InheritedSingleAttributeTagHelper).FullName, typeof(InheritedSingleAttributeTagHelper).FullName,
AssemblyName, AssemblyName,
ContentBehavior.None, ContentBehavior.None,
new[] { new[] {
new TagHelperAttributeDescriptor(nameof(InheritedSingleAttributeTagHelper.IntAttribute), intProperty) new TagHelperAttributeDescriptor("int-attribute", intProperty)
}); });
// Act // Act
@ -139,12 +176,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
// Arrange // Arrange
var intProperty = typeof(SingleAttributeTagHelper).GetProperty(nameof(SingleAttributeTagHelper.IntAttribute)); var intProperty = typeof(SingleAttributeTagHelper).GetProperty(nameof(SingleAttributeTagHelper.IntAttribute));
var expectedDescriptor = new TagHelperDescriptor( var expectedDescriptor = new TagHelperDescriptor(
"SingleAttribute", "single-attribute",
typeof(SingleAttributeTagHelper).FullName, typeof(SingleAttributeTagHelper).FullName,
AssemblyName, AssemblyName,
ContentBehavior.None, ContentBehavior.None,
new[] { new[] {
new TagHelperAttributeDescriptor(nameof(SingleAttributeTagHelper.IntAttribute), intProperty) new TagHelperAttributeDescriptor("int-attribute", intProperty)
}); });
// Act // Act
@ -162,12 +199,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
var validProperty = typeof(MissingAccessorTagHelper).GetProperty( var validProperty = typeof(MissingAccessorTagHelper).GetProperty(
nameof(MissingAccessorTagHelper.ValidAttribute)); nameof(MissingAccessorTagHelper.ValidAttribute));
var expectedDescriptor = new TagHelperDescriptor( var expectedDescriptor = new TagHelperDescriptor(
"MissingAccessor", "missing-accessor",
typeof(MissingAccessorTagHelper).FullName, typeof(MissingAccessorTagHelper).FullName,
AssemblyName, AssemblyName,
ContentBehavior.None, ContentBehavior.None,
new[] { new[] {
new TagHelperAttributeDescriptor(nameof(MissingAccessorTagHelper.ValidAttribute), validProperty) new TagHelperAttributeDescriptor("valid-attribute", validProperty)
}); });
// Act // Act
@ -185,13 +222,13 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
var validProperty = typeof(PrivateAccessorTagHelper).GetProperty( var validProperty = typeof(PrivateAccessorTagHelper).GetProperty(
nameof(PrivateAccessorTagHelper.ValidAttribute)); nameof(PrivateAccessorTagHelper.ValidAttribute));
var expectedDescriptor = new TagHelperDescriptor( var expectedDescriptor = new TagHelperDescriptor(
"PrivateAccessor", "private-accessor",
typeof(PrivateAccessorTagHelper).FullName, typeof(PrivateAccessorTagHelper).FullName,
AssemblyName, AssemblyName,
ContentBehavior.None, ContentBehavior.None,
new[] { new[] {
new TagHelperAttributeDescriptor( new TagHelperAttributeDescriptor(
nameof(PrivateAccessorTagHelper.ValidAttribute), validProperty) "valid-attribute", validProperty)
}); });
// Act // Act
@ -207,7 +244,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
{ {
// Arrange // Arrange
var expectedDescriptor = new TagHelperDescriptor( var expectedDescriptor = new TagHelperDescriptor(
"CustomContentBehavior", "custom-content-behavior",
typeof(CustomContentBehaviorTagHelper).FullName, typeof(CustomContentBehaviorTagHelper).FullName,
AssemblyName, AssemblyName,
ContentBehavior.Append); ContentBehavior.Append);
@ -225,7 +262,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
{ {
// Arrange // Arrange
var expectedDescriptor = new TagHelperDescriptor( var expectedDescriptor = new TagHelperDescriptor(
"InheritedCustomContentBehavior", "inherited-custom-content-behavior",
typeof(InheritedCustomContentBehaviorTagHelper).FullName, typeof(InheritedCustomContentBehaviorTagHelper).FullName,
AssemblyName, AssemblyName,
ContentBehavior.None); ContentBehavior.None);
@ -251,7 +288,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
AssemblyName, AssemblyName,
ContentBehavior.None, ContentBehavior.None,
new[] { new[] {
new TagHelperAttributeDescriptor(nameof(MultiTagTagHelper.ValidAttribute), validProp) new TagHelperAttributeDescriptor("valid-attribute", validProp)
}), }),
new TagHelperDescriptor( new TagHelperDescriptor(
"p", "p",
@ -259,7 +296,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
AssemblyName, AssemblyName,
ContentBehavior.None, ContentBehavior.None,
new[] { new[] {
new TagHelperAttributeDescriptor(nameof(MultiTagTagHelper.ValidAttribute), validProp) new TagHelperAttributeDescriptor("valid-attribute", validProp)
}) })
}; };
@ -276,12 +313,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
// Arrange // Arrange
var validProp = typeof(InheritedMultiTagTagHelper).GetProperty(nameof(InheritedMultiTagTagHelper.ValidAttribute)); var validProp = typeof(InheritedMultiTagTagHelper).GetProperty(nameof(InheritedMultiTagTagHelper.ValidAttribute));
var expectedDescriptor = new TagHelperDescriptor( var expectedDescriptor = new TagHelperDescriptor(
"InheritedMultiTag", "inherited-multi-tag",
typeof(InheritedMultiTagTagHelper).FullName, typeof(InheritedMultiTagTagHelper).FullName,
AssemblyName, AssemblyName,
ContentBehavior.None, ContentBehavior.None,
new[] { new[] {
new TagHelperAttributeDescriptor(nameof(InheritedMultiTagTagHelper.ValidAttribute), validProp) new TagHelperAttributeDescriptor("valid-attribute", validProp)
}); });
// Act // Act
@ -419,5 +456,41 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
private class InheritedNotOverriddenAttributeTagHelper : OverriddenAttributeTagHelper private class InheritedNotOverriddenAttributeTagHelper : OverriddenAttributeTagHelper
{ {
} }
private class ALLCAPSTAGHELPER : TagHelper
{
public int ALLCAPSATTRIBUTE { get; set; }
}
private class CAPSOnOUTSIDETagHelper : TagHelper
{
public int CAPSOnOUTSIDEATTRIBUTE { get; set; }
}
private class capsONInsideTagHelper : TagHelper
{
public int capsONInsideattribute { get; set; }
}
private class One1Two2Three3TagHelper : TagHelper
{
public int One1Two2Three3Attribute { get; set; }
}
private class ONE1TWO2THREE3TagHelper : TagHelper
{
public int ONE1TWO2THREE3Attribute { get; set; }
}
private class First_Second_ThirdHiTagHelper : TagHelper
{
public int First_Second_ThirdAttribute { get; set; }
}
private class UNSuffixedCLASS : TagHelper
{
public int UNSuffixedATTRIBUTE { get; set; }
}
} }
} }

View File

@ -25,7 +25,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
{ {
get get
{ {
return new TagHelperDescriptor("Valid_Plain", return new TagHelperDescriptor("valid_plain",
Valid_PlainTagHelperType.FullName, Valid_PlainTagHelperType.FullName,
AssemblyName, AssemblyName,
ContentBehavior.None); ContentBehavior.None);
@ -36,7 +36,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
{ {
get get
{ {
return new TagHelperDescriptor("Valid_Inherited", return new TagHelperDescriptor("valid_inherited",
Valid_InheritedTagHelperType.FullName, Valid_InheritedTagHelperType.FullName,
AssemblyName, AssemblyName,
ContentBehavior.None); ContentBehavior.None);