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)); }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType != JsonToken.StartObject) { return(null); } // Try reading the optional hashcode // Note; the JsonReader will read a numeric value as a Int64 (long) by default var hashWasRead = reader.TryReadNextProperty <long>(RazorSerializationConstants.HashCodePropertyName, out var hashLong); var hash = hashWasRead ? Convert.ToInt32(hashLong) : 0; if (!DisableCachingForTesting && hashWasRead && TagHelperDescriptorCache.TryGetDescriptor(hash, out var descriptor)) { ReadToEndOfCurrentObject(reader); return(descriptor); } // Required tokens (order matters) if (!reader.TryReadNextProperty <string>(nameof(TagHelperDescriptor.Kind), out var descriptorKind)) { return(default);