コード例 #1
0
    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());
    }
コード例 #2
0
    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]);
    }
コード例 #3
0
    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]);
        }
    }