Skip to content
This repository has been archived by the owner on Dec 19, 2018. It is now read-only.

Commit

Permalink
Add tests to validate TagHelper attribute targeting.
Browse files Browse the repository at this point in the history
- Added tests to validate TargetElementAttribute, TagHelperDescriptorFactory, CSharpTagHelperCodeRenderer and TagHelperParseTreeRewriterTests.
- Renamed HtmlElementNameAttributeTest to TargetElementAttributeTest.

#311
  • Loading branch information
NTaylorMullen committed Mar 3, 2015
1 parent 5f0e7b9 commit c48abc6
Show file tree
Hide file tree
Showing 10 changed files with 1,724 additions and 118 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
// 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 System.Reflection;
using Microsoft.AspNet.Razor.TagHelpers;
using Xunit;
Expand All @@ -13,6 +15,158 @@ public class TagHelperDescriptorFactoryTest
private static readonly string AssemblyName =
typeof(TagHelperDescriptorFactoryTest).GetTypeInfo().Assembly.GetName().Name;

public static TheoryData AttributeTargetData
{
get
{
var attributes = Enumerable.Empty<TagHelperAttributeDescriptor>();

// tagHelperType, expectedDescriptors
return new TheoryData<Type, IEnumerable<TagHelperDescriptor>>
{
{
typeof(AttributeTargetingTagHelper),
new[]
{
new TagHelperDescriptor(
"*",
typeof(AttributeTargetingTagHelper).FullName,
AssemblyName,
attributes,
requiredAttributes: new[] { "class" })
}
},
{
typeof(MultiAttributeTargetingTagHelper),
new[]
{
new TagHelperDescriptor(
"*",
typeof(MultiAttributeTargetingTagHelper).FullName,
AssemblyName,
attributes,
requiredAttributes: new[] { "class", "style" })
}
},
{
typeof(MultiAttributeAttributeTargetingTagHelper),
new[]
{
new TagHelperDescriptor(
"*",
typeof(MultiAttributeAttributeTargetingTagHelper).FullName,
AssemblyName,
attributes,
requiredAttributes: new[] { "custom" }),
new TagHelperDescriptor(
"*",
typeof(MultiAttributeAttributeTargetingTagHelper).FullName,
AssemblyName,
attributes,
requiredAttributes: new[] { "class", "style" })
}
},
{
typeof(InheritedAttributeTargetingTagHelper),
new[]
{
new TagHelperDescriptor(
"*",
typeof(InheritedAttributeTargetingTagHelper).FullName,
AssemblyName,
attributes,
requiredAttributes: new[] { "style" })
}
},
{
typeof(RequiredAttributeTagHelper),
new[]
{
new TagHelperDescriptor(
"input",
typeof(RequiredAttributeTagHelper).FullName,
AssemblyName,
attributes,
requiredAttributes: new[] { "class" })
}
},
{
typeof(InheritedRequiredAttributeTagHelper),
new[]
{
new TagHelperDescriptor(
"div",
typeof(InheritedRequiredAttributeTagHelper).FullName,
AssemblyName,
attributes,
requiredAttributes: new[] { "class" })
}
},
{
typeof(MultiAttributeRequiredAttributeTagHelper),
new[]
{
new TagHelperDescriptor(
"div",
typeof(MultiAttributeRequiredAttributeTagHelper).FullName,
AssemblyName,
attributes,
requiredAttributes: new[] { "class" }),
new TagHelperDescriptor(
"input",
typeof(MultiAttributeRequiredAttributeTagHelper).FullName,
AssemblyName,
attributes,
requiredAttributes: new[] { "class" })
}
},
{
typeof(MultiRequiredAttributeTagHelper),
new[]
{
new TagHelperDescriptor(
"input",
typeof(MultiRequiredAttributeTagHelper).FullName,
AssemblyName,
attributes,
requiredAttributes: new[] { "class", "style" })
}
},
{
typeof(MultiTagMultiRequiredAttributeTagHelper),
new[]
{
new TagHelperDescriptor(
"div",
typeof(MultiTagMultiRequiredAttributeTagHelper).FullName,
AssemblyName,
attributes,
requiredAttributes: new[] { "class", "style" }),
new TagHelperDescriptor(
"input",
typeof(MultiTagMultiRequiredAttributeTagHelper).FullName,
AssemblyName,
attributes,
requiredAttributes: new[] { "class", "style" }),
}
},
};
}
}

[Theory]
[MemberData(nameof(AttributeTargetData))]
public void CreateDescriptor_UnderstandsAttributeTargets(
Type tagHelperType,
IEnumerable<TagHelperDescriptor> expectedDescriptors)
{
// Act
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(AssemblyName, tagHelperType);

// Assert
Assert.Equal(expectedDescriptors, descriptors, CompleteTagHelperDescriptorComparer.Default);
}

public static TheoryData HtmlCaseData
{
get
Expand Down Expand Up @@ -246,14 +400,14 @@ public void CreateDescriptor_ResolvesMultipleTagHelperDescriptorsFromSingleType(
var validProp = typeof(MultiTagTagHelper).GetProperty(nameof(MultiTagTagHelper.ValidAttribute));
var expectedDescriptors = new[] {
new TagHelperDescriptor(
"div",
"p",
typeof(MultiTagTagHelper).FullName,
AssemblyName,
new[] {
new TagHelperAttributeDescriptor("valid-attribute", validProp)
}),
new TagHelperDescriptor(
"p",
"div",
typeof(MultiTagTagHelper).FullName,
AssemblyName,
new[] {
Expand Down Expand Up @@ -341,11 +495,11 @@ public void CreateDescriptor_GetsTagNamesFromMultipleAttributes()
typeof(MultipleAttributeTagHelper).FullName,
AssemblyName),
new TagHelperDescriptor(
"p",
"div",
typeof(MultipleAttributeTagHelper).FullName,
AssemblyName),
new TagHelperDescriptor(
"div",
"p",
typeof(MultipleAttributeTagHelper).FullName,
AssemblyName)
};
Expand All @@ -358,7 +512,59 @@ public void CreateDescriptor_GetsTagNamesFromMultipleAttributes()
Assert.Equal(expectedDescriptors, descriptors, CompleteTagHelperDescriptorComparer.Default);
}

[HtmlElementName("p", "div")]
[TargetElement(Attributes = "class")]
private class AttributeTargetingTagHelper : TagHelper
{
}

[TargetElement(Attributes = "class,style")]
private class MultiAttributeTargetingTagHelper : TagHelper
{
}

[TargetElement(Attributes = "custom")]
[TargetElement(Attributes = "class,style")]
private class MultiAttributeAttributeTargetingTagHelper : TagHelper
{
}

[TargetElement(Attributes = "style")]
private class InheritedAttributeTargetingTagHelper : AttributeTargetingTagHelper
{
}

[TargetElement("input", Attributes = "class")]
private class RequiredAttributeTagHelper : TagHelper
{
}

[TargetElement("div", Attributes = "class")]
private class InheritedRequiredAttributeTagHelper : RequiredAttributeTagHelper
{
}

[TargetElement("div", Attributes = "class")]
[TargetElement("input", Attributes = "class")]
private class MultiAttributeRequiredAttributeTagHelper : TagHelper
{
}

[TargetElement("input", Attributes = "class,style")]
private class MultiRequiredAttributeTagHelper : TagHelper
{
}

[TargetElement("div", Attributes = "style")]
private class InheritedMultiRequiredAttributeTagHelper : MultiRequiredAttributeTagHelper
{
}

[TargetElement("div,input", Attributes = "class,style")]
private class MultiTagMultiRequiredAttributeTagHelper : TagHelper
{
}

[TargetElement("p,div")]
private class MultiTagTagHelper
{
public string ValidAttribute { get; set; }
Expand All @@ -368,18 +574,18 @@ private class InheritedMultiTagTagHelper : MultiTagTagHelper
{
}

[HtmlElementName("p", "p", "div", "div")]
[TargetElement("p,p,div,div")]
private class DuplicateTagNameTagHelper
{
}

[HtmlElementName("data-condition")]
[TargetElement("data-condition")]
private class OverrideNameTagHelper
{
}

[HtmlElementName("span")]
[HtmlElementName("div", "p")]
[TargetElement("span")]
[TargetElement("div,p")]
private class MultipleAttributeTagHelper
{
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1369,7 +1369,8 @@ private static TagHelperDescriptor CreateDescriptor(
tagName,
typeName,
assemblyName,
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>());
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: Enumerable.Empty<string>());
}

private static TagHelperDescriptor CreatePrefixedValidPlainDescriptor(string prefix)
Expand Down
Loading

0 comments on commit c48abc6

Please sign in to comment.