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 2, 2015
1 parent dee6ea5 commit c0fb96b
Show file tree
Hide file tree
Showing 9 changed files with 1,687 additions and 91 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
Loading

0 comments on commit c0fb96b

Please sign in to comment.