From 489caed17c718faf7e39f7fa5f0f188f69afcb62 Mon Sep 17 00:00:00 2001 From: "N. Taylor Mullen" Date: Mon, 8 Sep 2014 17:13:36 -0700 Subject: [PATCH] Validate Tag Helper registration system functionality. - This involved adding tests to cover GetTagHelpers methods on the default tag helper descriptor provider. #70 --- .../TagHelperDescriptorProviderTest.cs | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 test/Microsoft.AspNet.Razor.Test/TagHelpers/TagHelperDescriptorProviderTest.cs diff --git a/test/Microsoft.AspNet.Razor.Test/TagHelpers/TagHelperDescriptorProviderTest.cs b/test/Microsoft.AspNet.Razor.Test/TagHelpers/TagHelperDescriptorProviderTest.cs new file mode 100644 index 0000000000..d5797c47e1 --- /dev/null +++ b/test/Microsoft.AspNet.Razor.Test/TagHelpers/TagHelperDescriptorProviderTest.cs @@ -0,0 +1,88 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Linq; +using Microsoft.AspNet.Razor.TagHelpers; +using Xunit; + +namespace Microsoft.AspNet.Razor.Test.TagHelpers +{ + public class TagHelperDescriptorProviderTest + { + [Fact] + public void TagHelperDescriptorProvider_GetTagHelpersReturnsNothingForUnregisteredTags() + { + // Arrange + var divDescriptor = new TagHelperDescriptor("div", "foo1", ContentBehavior.None); + var spanDescriptor = new TagHelperDescriptor("span", "foo2", ContentBehavior.None); + var descriptors = new TagHelperDescriptor[] { divDescriptor, spanDescriptor }; + var provider = new TagHelperDescriptorProvider(descriptors); + + // Act + var retrievedDescriptors = provider.GetTagHelpers("foo"); + + // Assert + Assert.Empty(retrievedDescriptors); + } + + [Fact] + public void TagHelperDescriptorProvider_GetTagHelpersDoesntReturnNonCatchAllTagsForCatchAll() + { + // Arrange + var divDescriptor = new TagHelperDescriptor("div", "foo1", ContentBehavior.None); + var spanDescriptor = new TagHelperDescriptor("span", "foo2", ContentBehavior.None); + var catchAllDescriptor = new TagHelperDescriptor("*", "foo3", ContentBehavior.None); + var descriptors = new TagHelperDescriptor[] { divDescriptor, spanDescriptor, catchAllDescriptor }; + var provider = new TagHelperDescriptorProvider(descriptors); + + // Act + var retrievedDescriptors = provider.GetTagHelpers("*"); + + // Assert + var descriptor = Assert.Single(retrievedDescriptors); + Assert.Same(catchAllDescriptor, descriptor); + } + + [Fact] + public void TagHelperDescriptorProvider_GetTagHelpersReturnsCatchAllsWithEveryTagName() + { + // Arrange + var divDescriptor = new TagHelperDescriptor("div", "foo1", ContentBehavior.None); + var spanDescriptor = new TagHelperDescriptor("span", "foo2", ContentBehavior.None); + var catchAllDescriptor = new TagHelperDescriptor("*", "foo3", ContentBehavior.None); + var descriptors = new TagHelperDescriptor[] { divDescriptor, spanDescriptor, catchAllDescriptor }; + var provider = new TagHelperDescriptorProvider(descriptors); + + // Act + var divDescriptors = provider.GetTagHelpers("div"); + var spanDescriptors = provider.GetTagHelpers("span"); + + // Assert + // For divs + Assert.Equal(2, divDescriptors.Count()); + Assert.Contains(divDescriptor, divDescriptors); + Assert.Contains(catchAllDescriptor, divDescriptors); + + // For spans + Assert.Equal(2, spanDescriptors.Count()); + Assert.Contains(spanDescriptor, spanDescriptors); + Assert.Contains(catchAllDescriptor, spanDescriptors); + } + + [Fact] + public void TagHelperDescriptorProvider_DuplicateDescriptorsAreNotPartOfTagHelperDescriptorPool() + { + // Arrange + var divDescriptor = new TagHelperDescriptor("div", "foo1", ContentBehavior.None); + var descriptors = new TagHelperDescriptor[] { divDescriptor, divDescriptor }; + var provider = new TagHelperDescriptorProvider(descriptors); + + // Act + var retrievedDescriptors = provider.GetTagHelpers("div"); + + // Assert + var descriptor = Assert.Single(retrievedDescriptors); + Assert.Same(divDescriptor, descriptor); + } + } +} \ No newline at end of file