public void ViewComponentTagHelperPass_Execute_CreatesViewComponentTagHelper_Nested() { // Arrange var codeDocument = CreateDocument(@" @addTagHelper *, TestAssembly <p foo=""17""><tagcloud foo=""17""></p>"); var tagHelpers = new[] { TagHelperDescriptorBuilder.Create("PTestTagHelper", "TestAssembly") .TypeName("PTestTagHelper") .BoundAttributeDescriptor(attribute => attribute .PropertyName("Foo") .Name("Foo") .TypeName("System.Int32")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("p")) .Build(), TagHelperDescriptorBuilder.Create(ViewComponentTagHelperConventions.Kind, "TestTagHelper", "TestAssembly") .TypeName("__Generated__TagCloudViewComponentTagHelper") .BoundAttributeDescriptor(attribute => attribute .PropertyName("Foo") .Name("Foo") .TypeName("System.Int32")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("tagcloud")) .AddMetadata(ViewComponentTagHelperMetadata.Name, "TagCloud") .Build() }; var projectEngine = CreateProjectEngine(tagHelpers); var pass = new ViewComponentTagHelperPass() { Engine = projectEngine.Engine, }; var irDocument = CreateIRDocument(projectEngine, codeDocument); var vcthFullName = "AspNetCore.test.__Generated__TagCloudViewComponentTagHelper"; // Act pass.Execute(codeDocument, irDocument); // Assert var outerTagHelper = FindTagHelperNode(irDocument); Assert.Equal("PTestTagHelper", Assert.IsType <DefaultTagHelperCreateIntermediateNode>(outerTagHelper.Children[1]).TypeName); Assert.Equal("Foo", Assert.IsType <DefaultTagHelperPropertyIntermediateNode>(outerTagHelper.Children[2]).PropertyName); var vcth = FindTagHelperNode(outerTagHelper.Children[0]); Assert.Equal(vcthFullName, Assert.IsType <DefaultTagHelperCreateIntermediateNode>(vcth.Children[1]).TypeName); Assert.Equal("Foo", Assert.IsType <DefaultTagHelperPropertyIntermediateNode>(vcth.Children[2]).PropertyName); var @class = FindClassNode(irDocument); Assert.Equal(5, @class.Children.Count); Assert.IsType <ViewComponentTagHelperIntermediateNode>(@class.Children.Last()); }
public void ViewComponentTagHelperPass_Execute_CreatesViewComponentTagHelper_WithIndexer() { // Arrange var codeDocument = CreateDocument(@" @addTagHelper TestTagHelper, TestAssembly <tagcloud tag-foo=""17"">"); var tagHelpers = new[] { TagHelperDescriptorBuilder.Create(ViewComponentTagHelperConventions.Kind, "TestTagHelper", "TestAssembly") .TypeName("__Generated__TagCloudViewComponentTagHelper") .BoundAttributeDescriptor(attribute => attribute .Name("Foo") .TypeName("System.Collections.Generic.Dictionary<System.String, System.Int32>") .PropertyName("Tags") .AsDictionaryAttribute("foo-", "System.Int32")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("tagcloud")) .AddMetadata(ViewComponentTagHelperMetadata.Name, "TagCloud") .Build() }; var projectEngine = CreateProjectEngine(tagHelpers); var pass = new ViewComponentTagHelperPass() { Engine = projectEngine.Engine, }; var irDocument = CreateIRDocument(projectEngine, codeDocument); var vcthFullName = "AspNetCore.test.__Generated__TagCloudViewComponentTagHelper"; // Act pass.Execute(codeDocument, irDocument); // Assert var tagHelper = FindTagHelperNode(irDocument); Assert.Equal(vcthFullName, Assert.IsType <DefaultTagHelperCreateIntermediateNode>(tagHelper.Children[1]).TypeName); Assert.IsType <DefaultTagHelperHtmlAttributeIntermediateNode>(tagHelper.Children[2]); var @class = FindClassNode(irDocument); Assert.Equal(4, @class.Children.Count); Assert.IsType <ViewComponentTagHelperIntermediateNode>(@class.Children[3]); }
public void ViewComponentTagHelperPass_Execute_IgnoresRegularTagHelper() { // Arrange var codeDocument = CreateDocument(@" @addTagHelper TestTagHelper, TestAssembly <p foo=""17"">"); var tagHelpers = new[] { TagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly") .TypeName("TestTagHelper") .BoundAttributeDescriptor(attribute => attribute .Name("Foo") .TypeName("System.Int32")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("p")) .Build() }; var projectEngine = CreateProjectEngine(tagHelpers); var pass = new ViewComponentTagHelperPass() { Engine = projectEngine.Engine, }; var irDocument = CreateIRDocument(projectEngine, codeDocument); // Act pass.Execute(codeDocument, irDocument); // Assert var @class = FindClassNode(irDocument); Assert.Equal(3, @class.Children.Count); // No class node created for a VCTH for (var i = 0; i < @class.Children.Count; i++) { Assert.IsNotType <ViewComponentTagHelperIntermediateNode>(@class.Children[i]); } }