From 8c47f6a67ecd3da91635c251770a6b872ee33f0b Mon Sep 17 00:00:00 2001 From: "N. Taylor Mullen" Date: Tue, 23 Dec 2014 11:57:39 -0800 Subject: [PATCH] Modify tests to account for new tag and attribute names for TagHelpers. - Also added additional tests to validate new lower kebab casing. #240 --- .../CompleteTagHelperDescriptorComparer.cs | 15 ++- .../TagHelperDescriptorFactoryTest.cs | 111 +++++++++++++++--- .../TagHelperDescriptorResolverTest.cs | 4 +- 3 files changed, 103 insertions(+), 27 deletions(-) diff --git a/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/CompleteTagHelperDescriptorComparer.cs b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/CompleteTagHelperDescriptorComparer.cs index 5a00ff6e65..2897de31cb 100644 --- a/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/CompleteTagHelperDescriptorComparer.cs +++ b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/CompleteTagHelperDescriptorComparer.cs @@ -1,6 +1,7 @@ // 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. +using System; using System.Collections.Generic; using System.Linq; using Microsoft.AspNet.Razor.TagHelpers; @@ -20,6 +21,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers bool IEqualityComparer.Equals(TagHelperDescriptor descriptorX, TagHelperDescriptor descriptorY) { return base.Equals(descriptorX, descriptorY) && + // Tests should be exact casing + string.Equals(descriptorX.TagName, descriptorY.TagName, StringComparison.Ordinal) && descriptorX.Attributes.SequenceEqual(descriptorY.Attributes, CompleteTagHelperAttributeDescriptorComparer.Default); } @@ -43,17 +46,17 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers public bool Equals(TagHelperAttributeDescriptor descriptorX, TagHelperAttributeDescriptor descriptorY) { - return descriptorX.Name == descriptorY.Name && - descriptorX.PropertyName == descriptorY.PropertyName && - descriptorX.TypeName == descriptorY.TypeName; + return string.Equals(descriptorX.Name, descriptorY.Name, StringComparison.Ordinal) && + string.Equals(descriptorX.PropertyName, descriptorY.PropertyName, StringComparison.Ordinal) && + string.Equals(descriptorX.TypeName, descriptorY.TypeName, StringComparison.Ordinal); } public int GetHashCode(TagHelperAttributeDescriptor descriptor) { return HashCodeCombiner.Start() - .Add(descriptor.Name) - .Add(descriptor.PropertyName) - .Add(descriptor.TypeName) + .Add(descriptor.Name, StringComparer.Ordinal) + .Add(descriptor.PropertyName, StringComparer.Ordinal) + .Add(descriptor.TypeName, StringComparer.Ordinal) .CombinedHash; } } diff --git a/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperDescriptorFactoryTest.cs b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperDescriptorFactoryTest.cs index b68c041578..ec09ed5ef2 100644 --- a/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperDescriptorFactoryTest.cs +++ b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperDescriptorFactoryTest.cs @@ -1,6 +1,7 @@ // 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. +using System; using System.Reflection; using Microsoft.AspNet.Razor.TagHelpers; using Xunit; @@ -12,6 +13,42 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers private static readonly string AssemblyName = typeof(TagHelperDescriptorFactoryTest).GetTypeInfo().Assembly.GetName().Name; + public static TheoryData HtmlCaseData + { + get + { + // tagHelperType, expectedTagName, expectedAttributeName + return new TheoryData + { + { 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] public void CreateDescriptor_OverridesAttributeNameFromAttribute() { @@ -22,7 +59,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers nameof(OverriddenAttributeTagHelper.ValidAttribute2)); var expectedDescriptors = new[] { new TagHelperDescriptor( - "OverriddenAttribute", + "overridden-attribute", typeof(OverriddenAttributeTagHelper).FullName, AssemblyName, ContentBehavior.None, @@ -49,12 +86,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers nameof(InheritedOverriddenAttributeTagHelper.ValidAttribute2)); var expectedDescriptors = new[] { new TagHelperDescriptor( - "InheritedOverriddenAttribute", + "inherited-overridden-attribute", typeof(InheritedOverriddenAttributeTagHelper).FullName, AssemblyName, ContentBehavior.None, new[] { - new TagHelperAttributeDescriptor(nameof(InheritedOverriddenAttributeTagHelper.ValidAttribute1), + new TagHelperAttributeDescriptor("valid-attribute1", validProperty1), new TagHelperAttributeDescriptor("Something-Else", validProperty2) }) @@ -77,7 +114,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers nameof(InheritedNotOverriddenAttributeTagHelper.ValidAttribute2)); var expectedDescriptors = new[] { new TagHelperDescriptor( - "InheritedNotOverriddenAttribute", + "inherited-not-overridden-attribute", typeof(InheritedNotOverriddenAttributeTagHelper).FullName, AssemblyName, ContentBehavior.None, @@ -100,7 +137,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers // Arrange var objectAssemblyName = typeof(object).GetTypeInfo().Assembly.GetName().Name; var expectedDescriptor = - new TagHelperDescriptor("Object", "System.Object", objectAssemblyName, ContentBehavior.None); + new TagHelperDescriptor("object", "System.Object", objectAssemblyName, ContentBehavior.None); // Act var descriptors = TagHelperDescriptorFactory.CreateDescriptors(typeof(object)); @@ -117,12 +154,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers var intProperty = typeof(InheritedSingleAttributeTagHelper).GetProperty( nameof(InheritedSingleAttributeTagHelper.IntAttribute)); var expectedDescriptor = new TagHelperDescriptor( - "InheritedSingleAttribute", + "inherited-single-attribute", typeof(InheritedSingleAttributeTagHelper).FullName, AssemblyName, ContentBehavior.None, new[] { - new TagHelperAttributeDescriptor(nameof(InheritedSingleAttributeTagHelper.IntAttribute), intProperty) + new TagHelperAttributeDescriptor("int-attribute", intProperty) }); // Act @@ -139,12 +176,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers // Arrange var intProperty = typeof(SingleAttributeTagHelper).GetProperty(nameof(SingleAttributeTagHelper.IntAttribute)); var expectedDescriptor = new TagHelperDescriptor( - "SingleAttribute", + "single-attribute", typeof(SingleAttributeTagHelper).FullName, AssemblyName, ContentBehavior.None, new[] { - new TagHelperAttributeDescriptor(nameof(SingleAttributeTagHelper.IntAttribute), intProperty) + new TagHelperAttributeDescriptor("int-attribute", intProperty) }); // Act @@ -162,12 +199,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers var validProperty = typeof(MissingAccessorTagHelper).GetProperty( nameof(MissingAccessorTagHelper.ValidAttribute)); var expectedDescriptor = new TagHelperDescriptor( - "MissingAccessor", + "missing-accessor", typeof(MissingAccessorTagHelper).FullName, AssemblyName, ContentBehavior.None, new[] { - new TagHelperAttributeDescriptor(nameof(MissingAccessorTagHelper.ValidAttribute), validProperty) + new TagHelperAttributeDescriptor("valid-attribute", validProperty) }); // Act @@ -185,13 +222,13 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers var validProperty = typeof(PrivateAccessorTagHelper).GetProperty( nameof(PrivateAccessorTagHelper.ValidAttribute)); var expectedDescriptor = new TagHelperDescriptor( - "PrivateAccessor", + "private-accessor", typeof(PrivateAccessorTagHelper).FullName, AssemblyName, ContentBehavior.None, new[] { new TagHelperAttributeDescriptor( - nameof(PrivateAccessorTagHelper.ValidAttribute), validProperty) + "valid-attribute", validProperty) }); // Act @@ -207,7 +244,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers { // Arrange var expectedDescriptor = new TagHelperDescriptor( - "CustomContentBehavior", + "custom-content-behavior", typeof(CustomContentBehaviorTagHelper).FullName, AssemblyName, ContentBehavior.Append); @@ -225,7 +262,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers { // Arrange var expectedDescriptor = new TagHelperDescriptor( - "InheritedCustomContentBehavior", + "inherited-custom-content-behavior", typeof(InheritedCustomContentBehaviorTagHelper).FullName, AssemblyName, ContentBehavior.None); @@ -251,7 +288,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers AssemblyName, ContentBehavior.None, new[] { - new TagHelperAttributeDescriptor(nameof(MultiTagTagHelper.ValidAttribute), validProp) + new TagHelperAttributeDescriptor("valid-attribute", validProp) }), new TagHelperDescriptor( "p", @@ -259,7 +296,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers AssemblyName, ContentBehavior.None, new[] { - new TagHelperAttributeDescriptor(nameof(MultiTagTagHelper.ValidAttribute), validProp) + new TagHelperAttributeDescriptor("valid-attribute", validProp) }) }; @@ -276,12 +313,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers // Arrange var validProp = typeof(InheritedMultiTagTagHelper).GetProperty(nameof(InheritedMultiTagTagHelper.ValidAttribute)); var expectedDescriptor = new TagHelperDescriptor( - "InheritedMultiTag", + "inherited-multi-tag", typeof(InheritedMultiTagTagHelper).FullName, AssemblyName, ContentBehavior.None, new[] { - new TagHelperAttributeDescriptor(nameof(InheritedMultiTagTagHelper.ValidAttribute), validProp) + new TagHelperAttributeDescriptor("valid-attribute", validProp) }); // Act @@ -419,5 +456,41 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers 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; } + + } } } \ No newline at end of file diff --git a/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperDescriptorResolverTest.cs b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperDescriptorResolverTest.cs index d240daf0ad..93ec7602ae 100644 --- a/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperDescriptorResolverTest.cs +++ b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperDescriptorResolverTest.cs @@ -25,7 +25,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers { get { - return new TagHelperDescriptor("Valid_Plain", + return new TagHelperDescriptor("valid_plain", Valid_PlainTagHelperType.FullName, AssemblyName, ContentBehavior.None); @@ -36,7 +36,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers { get { - return new TagHelperDescriptor("Valid_Inherited", + return new TagHelperDescriptor("valid_inherited", Valid_InheritedTagHelperType.FullName, AssemblyName, ContentBehavior.None);