Exemple #1
0
        public void BoundAttributeDescriptor_HashChangesWithType()
        {
            var expectedPropertyName = "PropertyName";

            var tagHelperBuilder = new DefaultTagHelperDescriptorBuilder(TagHelperConventions.DefaultKind, "TestTagHelper", "Test");

            _ = tagHelperBuilder.TypeName("TestTagHelper");

            var intBuilder = new DefaultBoundAttributeDescriptorBuilder(tagHelperBuilder, TagHelperConventions.DefaultKind);

            _ = intBuilder
                .Name("test")
                .PropertyName(expectedPropertyName)
                .TypeName(typeof(int).FullName);

            var intDescriptor = intBuilder.Build();

            var stringBuilder = new DefaultBoundAttributeDescriptorBuilder(tagHelperBuilder, TagHelperConventions.DefaultKind);

            _ = stringBuilder
                .Name("test")
                .PropertyName(expectedPropertyName)
                .TypeName(typeof(string).FullName);
            var stringDescriptor = stringBuilder.Build();

            Assert.NotEqual(intDescriptor.GetHashCode(), stringDescriptor.GetHashCode());
        }
Exemple #2
0
        public void WriteSetPreallocatedTagHelperProperty_IndexerAttribute_MultipleValues()
        {
            // Arrange
            var extension = new PreallocatedAttributeTargetExtension();
            var context   = TestCodeRenderingContext.CreateRuntime();

            var tagHelperBuilder = new DefaultTagHelperDescriptorBuilder(TagHelperConventions.DefaultKind, "FooTagHelper", "Test");

            tagHelperBuilder.TypeName("FooTagHelper");

            var builder = new DefaultBoundAttributeDescriptorBuilder(tagHelperBuilder, TagHelperConventions.DefaultKind);

            builder
            .Name("Foo")
            .TypeName("System.Collections.Generic.Dictionary<System.String, System.String>")
            .AsDictionaryAttribute("pre-", "System.String")
            .PropertyName("FooProp");

            var boundAttribute = builder.Build();
            var tagHelper      = tagHelperBuilder.Build();

            var tagHelperNode = new TagHelperIntermediateNode();
            var node1         = new PreallocatedTagHelperPropertyIntermediateNode()
            {
                AttributeName      = "pre-Bar",
                FieldName          = "__FooTagHelper",
                VariableName       = "_tagHelper0s",
                BoundAttribute     = boundAttribute,
                IsIndexerNameMatch = true,
                PropertyName       = "FooProp",
                TagHelper          = tagHelper,
            };
            var node2 = new PreallocatedTagHelperPropertyIntermediateNode()
            {
                AttributeName      = "pre-Foo",
                FieldName          = "__FooTagHelper",
                VariableName       = "_tagHelper1",
                BoundAttribute     = boundAttribute,
                IsIndexerNameMatch = true,
                PropertyName       = "FooProp",
                TagHelper          = tagHelper,
            };

            tagHelperNode.Children.Add(node1);
            tagHelperNode.Children.Add(node2);
            Push(context, tagHelperNode);

            // Act
            extension.WriteTagHelperProperty(context, node2);

            // Assert
            var csharp = context.CodeWriter.GenerateCode();

            Assert.Equal(
                @"__FooTagHelper.FooProp[""Foo""] = (string)_tagHelper1.Value;
__tagHelperExecutionContext.AddTagHelperAttribute(_tagHelper1);
",
                csharp,
                ignoreLineEndingDifferences: true);
        }
Exemple #3
0
        public void TagHelperDescriptorCache_TypeNameAffectsHash()
        {
            // Arrange
            var expectedPropertyName = "PropertyName";

            var intTagHelperBuilder = new DefaultTagHelperDescriptorBuilder(TagHelperConventions.DefaultKind, "TestTagHelper", "Test");

            _ = intTagHelperBuilder.TypeName("TestTagHelper");
            intTagHelperBuilder.BoundAttributeDescriptor(intBuilder =>
                                                         intBuilder
                                                         .Name("test")
                                                         .PropertyName(expectedPropertyName)
                                                         .TypeName(typeof(int).FullName)
                                                         );
            var intTagHelper = intTagHelperBuilder.Build();

            var stringTagHelperBuilder = new DefaultTagHelperDescriptorBuilder(TagHelperConventions.DefaultKind, "TestTagHelper", "Test");

            _ = stringTagHelperBuilder.TypeName("TestTagHelper");
            stringTagHelperBuilder.BoundAttributeDescriptor(stringBuilder =>
                                                            stringBuilder
                                                            .Name("test")
                                                            .PropertyName(expectedPropertyName)
                                                            .TypeName(typeof(string).FullName)
                                                            );
            var stringTagHelper = stringTagHelperBuilder.Build();

            // Act
            TagHelperDescriptorCache.Set(intTagHelper.GetHashCode(), intTagHelper);

            // Assert
            Assert.False(TagHelperDescriptorCache.TryGetDescriptor(stringTagHelper.GetHashCode(), out var descriptor));
        }
Exemple #4
0
    public DefaultBoundAttributeDescriptorBuilder(DefaultTagHelperDescriptorBuilder parent, string kind)
    {
        _parent = parent;
        _kind   = kind;

        _metadata = new Dictionary <string, string>();
    }
    public void CanSatisfyBoundAttribute_IndexerAttribute_ReturnsTrueIfMatching()
    {
        // Arrange
        var tagHelperBuilder = new DefaultTagHelperDescriptorBuilder(TagHelperConventions.DefaultKind, "TestTagHelper", "Test");
        var builder          = new DefaultBoundAttributeDescriptorBuilder(tagHelperBuilder, TagHelperConventions.DefaultKind);

        builder.AsDictionary("asp-", typeof(Dictionary <string, string>).FullName);

        var boundAttribute = builder.Build();

        // Act
        var result = TagHelperMatchingConventions.CanSatisfyBoundAttribute("asp-route-controller", boundAttribute);

        // Assert
        Assert.True(result);
    }
    public void Build_DisplayNameIsNameWithDots_NameComparisonPrefixMatch()
    {
        // Arrange
        var tagHelperBuilder       = new DefaultTagHelperDescriptorBuilder(TagHelperConventions.DefaultKind, "TestTagHelper", "Test");
        var tagMatchingRuleBuilder = new DefaultTagMatchingRuleDescriptorBuilder(tagHelperBuilder);
        var builder = new DefaultRequiredAttributeDescriptorBuilder(tagMatchingRuleBuilder);

        builder
        .Name("asp-route-")
        .NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.PrefixMatch);

        // Act
        var descriptor = builder.Build();

        // Assert
        Assert.Equal("asp-route-...", descriptor.DisplayName);
    }
Exemple #7
0
    public void DisplayName_SetsDescriptorsDisplayName()
    {
        // Arrange
        var expectedDisplayName = "ExpectedDisplayName";

        var tagHelperBuilder = new DefaultTagHelperDescriptorBuilder(TagHelperConventions.DefaultKind, "TestTagHelper", "Test");

        var builder = new DefaultBoundAttributeDescriptorBuilder(tagHelperBuilder, TagHelperConventions.DefaultKind);

        builder.DisplayName(expectedDisplayName);

        // Act
        var descriptor = builder.Build();

        // Assert
        Assert.Equal(expectedDisplayName, descriptor.DisplayName);
    }
Exemple #8
0
        public void WriteTagHelperProperty_RendersCorrectly()
        {
            // Arrange
            var extension = new PreallocatedAttributeTargetExtension();
            var context   = TestCodeRenderingContext.CreateRuntime();

            var tagHelperBuilder = new DefaultTagHelperDescriptorBuilder(TagHelperConventions.DefaultKind, "FooTagHelper", "Test");

            tagHelperBuilder.TypeName("FooTagHelper");

            var builder = new DefaultBoundAttributeDescriptorBuilder(tagHelperBuilder, TagHelperConventions.DefaultKind);

            builder
            .Name("Foo")
            .TypeName("System.String")
            .PropertyName("FooProp");

            var descriptor = builder.Build();

            var tagHelperNode = new TagHelperIntermediateNode();
            var node          = new PreallocatedTagHelperPropertyIntermediateNode()
            {
                AttributeName  = descriptor.Name,
                BoundAttribute = descriptor,
                FieldName      = "__FooTagHelper",
                PropertyName   = "FooProp",
                VariableName   = "_tagHelper1",
            };

            tagHelperNode.Children.Add(node);
            Push(context, tagHelperNode);

            // Act
            extension.WriteTagHelperProperty(context, node);

            // Assert
            var csharp = context.CodeWriter.GenerateCode();

            Assert.Equal(
                @"__FooTagHelper.FooProp = (string)_tagHelper1.Value;
__tagHelperExecutionContext.AddTagHelperAttribute(_tagHelper1);
",
                csharp,
                ignoreLineEndingDifferences: true);
        }
Exemple #9
0
    public void DisplayName_DefaultsToPropertyLookingDisplayName()
    {
        // Arrange
        var tagHelperBuilder = new DefaultTagHelperDescriptorBuilder(TagHelperConventions.DefaultKind, "TestTagHelper", "Test");

        tagHelperBuilder.TypeName("TestTagHelper");

        var builder = new DefaultBoundAttributeDescriptorBuilder(tagHelperBuilder, TagHelperConventions.DefaultKind);

        builder
        .TypeName(typeof(int).FullName)
        .PropertyName("SomeProperty");

        // Act
        var descriptor = builder.Build();

        // Assert
        Assert.Equal("int TestTagHelper.SomeProperty", descriptor.DisplayName);
    }
Exemple #10
0
    public void GetPropertyName_ReturnsNullIfNoPropertyName()
    {
        // Arrange
        var tagHelperBuilder = new DefaultTagHelperDescriptorBuilder(TagHelperConventions.DefaultKind, "TestTagHelper", "Test");

        tagHelperBuilder.TypeName("TestTagHelper");

        var builder = new DefaultBoundAttributeDescriptorBuilder(tagHelperBuilder, TagHelperConventions.DefaultKind);

        builder
        .Name("test")
        .TypeName(typeof(int).FullName);

        var descriptor = builder.Build();

        // Act
        var propertyName = descriptor.GetPropertyName();

        // Assert
        Assert.Null(propertyName);
    }
    public void Matches_ReturnsExpectedResult(
        Action <RequiredAttributeDescriptorBuilder> configure,
        string attributeName,
        string attributeValue,
        bool expectedResult)
    {
        // Arrange
        var tagHelperBuilder       = new DefaultTagHelperDescriptorBuilder(TagHelperConventions.DefaultKind, "TestTagHelper", "Test");
        var tagMatchingRuleBuilder = new DefaultTagMatchingRuleDescriptorBuilder(tagHelperBuilder);
        var builder = new DefaultRequiredAttributeDescriptorBuilder(tagMatchingRuleBuilder);

        configure(builder);

        var requiredAttibute = builder.Build();

        // Act
        var result = TagHelperMatchingConventions.SatisfiesRequiredAttribute(attributeName, attributeValue, requiredAttibute);

        // Assert
        Assert.Equal(expectedResult, result);
    }
Exemple #12
0
    public void IsDefaultKind_ReturnsFalse_IfKindIsNotDefault()
    {
        // Arrange
        var tagHelperBuilder = new DefaultTagHelperDescriptorBuilder("other-kind", "TestTagHelper", "Test");

        tagHelperBuilder.TypeName("TestTagHelper");

        var builder = new DefaultBoundAttributeDescriptorBuilder(tagHelperBuilder, "other-kind");

        builder
        .Name("test")
        .PropertyName("IntProperty")
        .TypeName(typeof(int).FullName);

        var descriptor = builder.Build();

        // Act
        var isDefault = descriptor.IsDefaultKind();

        // Assert
        Assert.False(isDefault);
    }
Exemple #13
0
    public void IsDefaultKind_ReturnsTrue_IfKindIsDefault()
    {
        // Arrange
        var tagHelperBuilder = new DefaultTagHelperDescriptorBuilder(TagHelperConventions.DefaultKind, "TestTagHelper", "Test");

        tagHelperBuilder.TypeName("TestTagHelper");

        var builder = new DefaultBoundAttributeDescriptorBuilder(tagHelperBuilder, TagHelperConventions.DefaultKind);

        builder
        .Name("test")
        .PropertyName("IntProperty")
        .TypeName(typeof(int).FullName);

        var descriptor = builder.Build();

        // Act
        var isDefault = descriptor.IsDefaultKind();

        // Assert
        Assert.True(isDefault);
    }
Exemple #14
0
    public void ExpectsBooleanValue_ReturnsFalse_ForNonBooleanProperty()
    {
        // Arrange
        var tagHelperBuilder = new DefaultTagHelperDescriptorBuilder(TagHelperConventions.DefaultKind, "TestTagHelper", "Test");

        tagHelperBuilder.TypeName("TestTagHelper");

        var builder = new DefaultBoundAttributeDescriptorBuilder(tagHelperBuilder, TagHelperConventions.DefaultKind);

        builder
        .Name("test")
        .PropertyName("BoundProp")
        .TypeName(typeof(int).FullName);

        var descriptor = builder.Build();

        // Act
        var result = descriptor.ExpectsBooleanValue("test");

        // Assert
        Assert.False(result);
    }
Exemple #15
0
    public void ExpectsBooleanValue_ReturnsFalse_BooleanIndexerAndNameMismatch()
    {
        // Arrange
        var tagHelperBuilder = new DefaultTagHelperDescriptorBuilder(TagHelperConventions.DefaultKind, "TestTagHelper", "Test");

        tagHelperBuilder.TypeName("TestTagHelper");

        var builder = new DefaultBoundAttributeDescriptorBuilder(tagHelperBuilder, TagHelperConventions.DefaultKind);

        builder
        .Name("test")
        .PropertyName("BoundProp")
        .TypeName("System.Collection.Generic.IDictionary<string, bool>")
        .AsDictionary("prefix-test-", typeof(bool).FullName);

        var descriptor = builder.Build();

        // Act
        var result = descriptor.ExpectsBooleanValue("test");

        // Assert
        Assert.False(result);
    }
 public DefaultAllowedChildTagDescriptorBuilder(DefaultTagHelperDescriptorBuilder parent)
 {
     _parent = parent;
 }
Exemple #17
0
 internal DefaultTagMatchingRuleDescriptorBuilder(DefaultTagHelperDescriptorBuilder parent)
 {
     _parent = parent;
 }