Skip to content

Commit

Permalink
Added property bag to tag helper descriptor.
Browse files Browse the repository at this point in the history
  • Loading branch information
Crystal Qian committed Aug 25, 2016
1 parent 8d7c51b commit 795d07e
Show file tree
Hide file tree
Showing 2 changed files with 106 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,11 @@ public class TagHelperDescriptor
private string _tagName;
private string _typeName;
private string _assemblyName;
private IDictionary<string, string> _propertyBag;
private IEnumerable<TagHelperAttributeDescriptor> _attributes =
Enumerable.Empty<TagHelperAttributeDescriptor>();
private IEnumerable<TagHelperRequiredAttributeDescriptor> _requiredAttributes = Enumerable.Empty<TagHelperRequiredAttributeDescriptor>();
private IEnumerable<TagHelperRequiredAttributeDescriptor> _requiredAttributes =
Enumerable.Empty<TagHelperRequiredAttributeDescriptor>();

/// <summary>
/// Text used as a required prefix when matching HTML start and end tags in the Razor source to available
Expand Down Expand Up @@ -200,5 +202,21 @@ public IEnumerable<TagHelperRequiredAttributeDescriptor> RequiredAttributes
/// tag helper.
/// </summary>
public TagHelperDesignTimeDescriptor DesignTimeDescriptor { get; set; }

/// <summary>
/// A dictionary containing additional information about the <see cref="TagHelperDescriptor"/>.
/// </summary>
public IDictionary<string, string> PropertyBag
{
get
{
if (_propertyBag == null)
{
_propertyBag = new Dictionary<string, string>();
}

return _propertyBag;
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
// 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 Microsoft.AspNetCore.Razor.TagHelpers;
using Microsoft.AspNetCore.Razor.Test.Internal;
using Newtonsoft.Json;
Expand Down Expand Up @@ -68,7 +69,8 @@ public void TagHelperDescriptor_CanBeSerialized()
$"\"{ nameof(TagHelperDescriptor.DesignTimeDescriptor) }\":{{" +
$"\"{ nameof(TagHelperDesignTimeDescriptor.Summary) }\":\"usage summary\"," +
$"\"{ nameof(TagHelperDesignTimeDescriptor.Remarks) }\":\"usage remarks\"," +
$"\"{ nameof(TagHelperDesignTimeDescriptor.OutputElementHint) }\":\"some-tag\"}}}}";
$"\"{ nameof(TagHelperDesignTimeDescriptor.OutputElementHint) }\":\"some-tag\"}}," +
$"\"{ nameof(TagHelperDescriptor.PropertyBag) }\":{{}}}}";

// Act
var serializedDescriptor = JsonConvert.SerializeObject(descriptor);
Expand Down Expand Up @@ -132,7 +134,8 @@ public void TagHelperDescriptor_WithAttributes_CanBeSerialized()
$"\"{ nameof(TagHelperDescriptor.AllowedChildren) }\":null," +
$"\"{ nameof(TagHelperDescriptor.RequiredParent) }\":null," +
$"\"{ nameof(TagHelperDescriptor.TagStructure) }\":1," +
$"\"{ nameof(TagHelperDescriptor.DesignTimeDescriptor) }\":null}}";
$"\"{ nameof(TagHelperDescriptor.DesignTimeDescriptor) }\":null," +
$"\"{ nameof(TagHelperDescriptor.PropertyBag) }\":{{}}}}";

// Act
var serializedDescriptor = JsonConvert.SerializeObject(descriptor);
Expand Down Expand Up @@ -200,7 +203,8 @@ public void TagHelperDescriptor_WithIndexerAttributes_CanBeSerialized()
$"\"{ nameof(TagHelperDescriptor.AllowedChildren) }\":[\"allowed child one\",\"allowed child two\"]," +
$"\"{ nameof(TagHelperDescriptor.RequiredParent) }\":\"parent name\"," +
$"\"{ nameof(TagHelperDescriptor.TagStructure) }\":0," +
$"\"{ nameof(TagHelperDescriptor.DesignTimeDescriptor) }\":null}}";
$"\"{ nameof(TagHelperDescriptor.DesignTimeDescriptor) }\":null," +
$"\"{ nameof(TagHelperDescriptor.PropertyBag) }\":{{}}}}";

// Act
var serializedDescriptor = JsonConvert.SerializeObject(descriptor);
Expand All @@ -209,6 +213,43 @@ public void TagHelperDescriptor_WithIndexerAttributes_CanBeSerialized()
Assert.Equal(expectedSerializedDescriptor, serializedDescriptor, StringComparer.Ordinal);
}

[Fact]
public void TagHelperDescriptor_WithPropertyBagElements_CanBeSerialized()
{
// Arrange
var descriptor = new TagHelperDescriptor
{
Prefix = "prefix:",
TagName = "tag name",
TypeName = "type name",
AssemblyName = "assembly name"
};

descriptor.PropertyBag.Add("key one", "value one");
descriptor.PropertyBag.Add("key two", "value two");

var expectedSerializedDescriptor =
$"{{\"{ nameof(TagHelperDescriptor.Prefix) }\":\"prefix:\"," +
$"\"{ nameof(TagHelperDescriptor.TagName) }\":\"tag name\"," +
$"\"{ nameof(TagHelperDescriptor.FullTagName) }\":\"prefix:tag name\"," +
$"\"{ nameof(TagHelperDescriptor.TypeName) }\":\"type name\"," +
$"\"{ nameof(TagHelperDescriptor.AssemblyName) }\":\"assembly name\"," +
$"\"{ nameof(TagHelperDescriptor.Attributes) }\":[]," +
$"\"{ nameof(TagHelperDescriptor.RequiredAttributes) }\":[]," +
$"\"{ nameof(TagHelperDescriptor.AllowedChildren) }\":null," +
$"\"{ nameof(TagHelperDescriptor.RequiredParent) }\":null," +
$"\"{ nameof(TagHelperDescriptor.TagStructure) }\":0," +
$"\"{ nameof(TagHelperDescriptor.DesignTimeDescriptor) }\":null," +
$"\"{ nameof(TagHelperDescriptor.PropertyBag) }\":" +
"{\"key one\":\"value one\",\"key two\":\"value two\"}}";

// Act
var serializedDescriptor = JsonConvert.SerializeObject(descriptor);

// Assert
Assert.Equal(expectedSerializedDescriptor, serializedDescriptor);
}

[Fact]
public void TagHelperDescriptor_CanBeDeserialized()
{
Expand Down Expand Up @@ -283,6 +324,7 @@ public void TagHelperDescriptor_CanBeDeserialized()
expectedDescriptor.DesignTimeDescriptor,
descriptor.DesignTimeDescriptor,
TagHelperDesignTimeDescriptorComparer.Default);
Assert.Empty(descriptor.PropertyBag);
}

[Fact]
Expand Down Expand Up @@ -354,6 +396,7 @@ public void TagHelperDescriptor_WithAttributes_CanBeDeserialized()
Assert.Equal(expectedDescriptor.AssemblyName, descriptor.AssemblyName, StringComparer.Ordinal);
Assert.Equal(expectedDescriptor.Attributes, descriptor.Attributes, TagHelperAttributeDescriptorComparer.Default);
Assert.Empty(descriptor.RequiredAttributes);
Assert.Empty(descriptor.PropertyBag);
}

[Fact]
Expand Down Expand Up @@ -385,7 +428,9 @@ public void TagHelperDescriptor_WithIndexerAttributes_CanBeDeserialized()
$"\"{ nameof(TagHelperDescriptor.AllowedChildren) }\":null," +
$"\"{ nameof(TagHelperDescriptor.RequiredParent) }\":null," +
$"\"{nameof(TagHelperDescriptor.TagStructure)}\":1," +
$"\"{ nameof(TagHelperDescriptor.DesignTimeDescriptor) }\":null}}";
$"\"{ nameof(TagHelperDescriptor.DesignTimeDescriptor) }\":null," +
$"\"{ nameof(TagHelperDescriptor.PropertyBag) }\":{{}}}}";

var expectedDescriptor = new TagHelperDescriptor
{
Prefix = "prefix:",
Expand Down Expand Up @@ -427,6 +472,44 @@ public void TagHelperDescriptor_WithIndexerAttributes_CanBeDeserialized()
Assert.Equal(expectedDescriptor.AssemblyName, descriptor.AssemblyName, StringComparer.Ordinal);
Assert.Equal(expectedDescriptor.Attributes, descriptor.Attributes, TagHelperAttributeDescriptorComparer.Default);
Assert.Empty(descriptor.RequiredAttributes);
Assert.Empty(descriptor.PropertyBag);
}

[Fact]
public void TagHelperDescriptor_WithPropertyBagElements_CanBeDeserialized()
{
// Arrange
var serializedDescriptor =
$"{{\"{nameof(TagHelperDescriptor.Prefix)}\":\"prefix:\"," +
$"\"{nameof(TagHelperDescriptor.TagName)}\":\"tag name\"," +
$"\"{nameof(TagHelperDescriptor.TypeName)}\":\"type name\"," +
$"\"{nameof(TagHelperDescriptor.AssemblyName)}\":\"assembly name\"," +
$"\"{ nameof(TagHelperDescriptor.PropertyBag) }\":" +
"{\"key one\":\"value one\",\"key two\":\"value two\"}}";
var expectedDescriptor = new TagHelperDescriptor
{
Prefix = "prefix:",
TagName = "tag name",
TypeName = "type name",
AssemblyName = "assembly name"
};

expectedDescriptor.PropertyBag.Add("key one", "value one");
expectedDescriptor.PropertyBag.Add("key two", "value two");

// Act
var descriptor = JsonConvert.DeserializeObject<TagHelperDescriptor>(serializedDescriptor);

// Assert
Assert.NotNull(descriptor);
Assert.Equal(expectedDescriptor.Prefix, descriptor.Prefix, StringComparer.Ordinal);
Assert.Equal(expectedDescriptor.TagName, descriptor.TagName, StringComparer.Ordinal);
Assert.Equal(expectedDescriptor.TypeName, descriptor.TypeName, StringComparer.Ordinal);
Assert.Equal(expectedDescriptor.AssemblyName, descriptor.AssemblyName, StringComparer.Ordinal);
Assert.Empty(descriptor.Attributes);
Assert.Empty(descriptor.RequiredAttributes);
Assert.Equal(expectedDescriptor.PropertyBag["key one"], descriptor.PropertyBag["key one"]);
Assert.Equal(expectedDescriptor.PropertyBag["key two"], descriptor.PropertyBag["key two"]);
}
}
}

0 comments on commit 795d07e

Please sign in to comment.