public void Process_DoesNothingIfTagNameIsNull() { // Arrange var tagHelperOutput = new TagHelperOutput( tagName: null, attributes: new TagHelperAttributeList { { "href", "~/home/index.html" } }, getChildContentAsync: (useCachedResult, encoder) => Task.FromResult<TagHelperContent>(null)); var tagHelper = new UrlResolutionTagHelper(Mock.Of<IUrlHelperFactory>(), new HtmlTestEncoder()); var context = new TagHelperContext( allAttributes: new TagHelperAttributeList( Enumerable.Empty<TagHelperAttribute>()), items: new Dictionary<object, object>(), uniqueId: "test"); // Act tagHelper.Process(context, tagHelperOutput); // Assert var attribute = Assert.Single(tagHelperOutput.Attributes); Assert.Equal("href", attribute.Name, StringComparer.Ordinal); var attributeValue = Assert.IsType<string>(attribute.Value); Assert.Equal("~/home/index.html", attributeValue, StringComparer.Ordinal); }
public void Process_DoesNothingIfTagNameIsNull() { // Arrange var tagHelperOutput = new TagHelperOutput( tagName: null, attributes: new TagHelperAttributeList { { "href", "~/home/index.html" } }, getChildContentAsync: (useCachedResult, encoder) => Task.FromResult <TagHelperContent>(null)); var tagHelper = new UrlResolutionTagHelper(Mock.Of <IUrlHelperFactory>(), new HtmlTestEncoder()); var context = new TagHelperContext( allAttributes: new TagHelperAttributeList( Enumerable.Empty <TagHelperAttribute>()), items: new Dictionary <object, object>(), uniqueId: "test"); // Act tagHelper.Process(context, tagHelperOutput); // Assert var attribute = Assert.Single(tagHelperOutput.Attributes); Assert.Equal("href", attribute.Name, StringComparer.Ordinal); var attributeValue = Assert.IsType <string>(attribute.Value); Assert.Equal("~/home/index.html", attributeValue, StringComparer.Ordinal); }
public void Process_IgnoresNonHtmlStringOrStringValues() { // Arrange var tagHelperOutput = new TagHelperOutput( tagName: "a", attributes: new TagHelperAttributeList { { "href", true } }, getChildContentAsync: (useCachedResult, encoder) => Task.FromResult <TagHelperContent>(null)); var tagHelper = new UrlResolutionTagHelper(urlHelperFactory: null, htmlEncoder: null); var context = new TagHelperContext( tagName: "a", allAttributes: new TagHelperAttributeList( Enumerable.Empty <TagHelperAttribute>()), items: new Dictionary <object, object>(), uniqueId: "test"); // Act tagHelper.Process(context, tagHelperOutput); // Assert var attribute = Assert.Single(tagHelperOutput.Attributes); Assert.Equal("href", attribute.Name, StringComparer.Ordinal); Assert.True(Assert.IsType <bool>(attribute.Value)); Assert.Equal(HtmlAttributeValueStyle.DoubleQuotes, attribute.ValueStyle); }
public void Process_ThrowsWhenEncodingNeededAndIUrlHelperActsUnexpectedly() { // Arrange var relativeUrl = "~/home/index.html"; var expectedExceptionMessage = Resources.FormatCouldNotResolveApplicationRelativeUrl_TagHelper( relativeUrl, nameof(IUrlHelper), nameof(IUrlHelper.Content), "removeTagHelper", typeof(UrlResolutionTagHelper).FullName, typeof(UrlResolutionTagHelper).GetTypeInfo().Assembly.GetName().Name); var tagHelperOutput = new TagHelperOutput( tagName: "a", attributes: new TagHelperAttributeList { { "href", new HtmlString(relativeUrl) } }, getChildContentAsync: (useCachedResult, encoder) => Task.FromResult <TagHelperContent>(null)); var urlHelperMock = new Mock <IUrlHelper>(); urlHelperMock .Setup(urlHelper => urlHelper.Content(It.IsAny <string>())) .Returns("UnexpectedResult"); var urlHelperFactory = new Mock <IUrlHelperFactory>(); urlHelperFactory .Setup(f => f.GetUrlHelper(It.IsAny <ActionContext>())) .Returns(urlHelperMock.Object); var tagHelper = new UrlResolutionTagHelper(urlHelperFactory.Object, new HtmlTestEncoder()); var context = new TagHelperContext( tagName: "a", allAttributes: new TagHelperAttributeList( Enumerable.Empty <TagHelperAttribute>()), items: new Dictionary <object, object>(), uniqueId: "test"); // Act & Assert var exception = Assert.Throws <InvalidOperationException>( () => tagHelper.Process(context, tagHelperOutput)); Assert.Equal(expectedExceptionMessage, exception.Message, StringComparer.Ordinal); }
public void Process_ResolvesTildeSlashValues(string url, string expectedHref) { // Arrange var tagHelperOutput = new TagHelperOutput( tagName: "a", attributes: new TagHelperAttributeList { { "href", url } }, getChildContentAsync: (useCachedResult, encoder) => Task.FromResult <TagHelperContent>(null)); var urlHelperMock = new Mock <IUrlHelper>(); urlHelperMock .Setup(urlHelper => urlHelper.Content(It.IsAny <string>())) .Returns(new Func <string, string>(value => "/approot" + value.Substring(1))); var urlHelperFactory = new Mock <IUrlHelperFactory>(); urlHelperFactory .Setup(f => f.GetUrlHelper(It.IsAny <ActionContext>())) .Returns(urlHelperMock.Object); var tagHelper = new UrlResolutionTagHelper(urlHelperFactory.Object, new HtmlTestEncoder()); var context = new TagHelperContext( tagName: "a", allAttributes: new TagHelperAttributeList( Enumerable.Empty <TagHelperAttribute>()), items: new Dictionary <object, object>(), uniqueId: "test"); // Act tagHelper.Process(context, tagHelperOutput); // Assert var attribute = Assert.Single(tagHelperOutput.Attributes); Assert.Equal("href", attribute.Name, StringComparer.Ordinal); var attributeValue = Assert.IsType <string>(attribute.Value); Assert.Equal(expectedHref, attributeValue, StringComparer.Ordinal); Assert.Equal(HtmlAttributeValueStyle.DoubleQuotes, attribute.ValueStyle); }
public void Process_DoesNotResolveNonTildeSlashValues_InHtmlString(HtmlString url) { // Arrange var tagHelperOutput = new TagHelperOutput( tagName: "a", attributes: new TagHelperAttributeList { { "href", url } }, getChildContentAsync: (useCachedResult, encoder) => Task.FromResult <TagHelperContent>(null)); var urlHelperMock = new Mock <IUrlHelper>(); urlHelperMock .Setup(urlHelper => urlHelper.Content(It.IsAny <string>())) .Returns("approot/home/index.html"); var urlHelperFactory = new Mock <IUrlHelperFactory>(); urlHelperFactory .Setup(f => f.GetUrlHelper(It.IsAny <ActionContext>())) .Returns(urlHelperMock.Object); var tagHelper = new UrlResolutionTagHelper(urlHelperFactory.Object, new HtmlTestEncoder()); var context = new TagHelperContext( allAttributes: new TagHelperAttributeList( Enumerable.Empty <TagHelperAttribute>()), items: new Dictionary <object, object>(), uniqueId: "test"); // Act tagHelper.Process(context, tagHelperOutput); // Assert var attribute = Assert.Single(tagHelperOutput.Attributes); Assert.Equal("href", attribute.Name, StringComparer.Ordinal); var attributeValue = Assert.IsType <HtmlString>(attribute.Value); Assert.Equal(url.ToString(), attributeValue.ToString(), StringComparer.Ordinal); Assert.False(attribute.Minimized); }
public void Process_ThrowsWhenEncodingNeededAndIUrlHelperActsUnexpectedly() { // Arrange var relativeUrl = "~/home/index.html"; var expectedExceptionMessage = Resources.FormatCouldNotResolveApplicationRelativeUrl_TagHelper( relativeUrl, nameof(IUrlHelper), nameof(IUrlHelper.Content), "removeTagHelper", typeof(UrlResolutionTagHelper).FullName, typeof(UrlResolutionTagHelper).GetTypeInfo().Assembly.GetName().Name); var tagHelperOutput = new TagHelperOutput( tagName: "a", attributes: new TagHelperAttributeList { { "href", new HtmlString(relativeUrl) } }, getChildContentAsync: (useCachedResult, encoder) => Task.FromResult<TagHelperContent>(null)); var urlHelperMock = new Mock<IUrlHelper>(); urlHelperMock .Setup(urlHelper => urlHelper.Content(It.IsAny<string>())) .Returns("UnexpectedResult"); var urlHelperFactory = new Mock<IUrlHelperFactory>(); urlHelperFactory .Setup(f => f.GetUrlHelper(It.IsAny<ActionContext>())) .Returns(urlHelperMock.Object); var tagHelper = new UrlResolutionTagHelper(urlHelperFactory.Object, new HtmlTestEncoder()); var context = new TagHelperContext( allAttributes: new TagHelperAttributeList( Enumerable.Empty<TagHelperAttribute>()), items: new Dictionary<object, object>(), uniqueId: "test"); // Act & Assert var exception = Assert.Throws<InvalidOperationException>( () => tagHelper.Process(context, tagHelperOutput)); Assert.Equal(expectedExceptionMessage, exception.Message, StringComparer.Ordinal); }
public void Process_ResolvesTildeSlashValues_InHtmlString(object url, string expectedHref) { // Arrange var tagHelperOutput = new TagHelperOutput( tagName: "a", attributes: new TagHelperAttributeList { { "href", url } }, getChildContentAsync: (useCachedResult, encoder) => Task.FromResult<TagHelperContent>(null)); var urlHelperMock = new Mock<IUrlHelper>(); urlHelperMock .Setup(urlHelper => urlHelper.Content(It.IsAny<string>())) .Returns(new Func<string, string>(value => "/approot" + value.Substring(1))); var urlHelperFactory = new Mock<IUrlHelperFactory>(); urlHelperFactory .Setup(f => f.GetUrlHelper(It.IsAny<ActionContext>())) .Returns(urlHelperMock.Object); var tagHelper = new UrlResolutionTagHelper(urlHelperFactory.Object, new HtmlTestEncoder()); var context = new TagHelperContext( allAttributes: new TagHelperAttributeList( Enumerable.Empty<TagHelperAttribute>()), items: new Dictionary<object, object>(), uniqueId: "test"); // Act tagHelper.Process(context, tagHelperOutput); // Assert var attribute = Assert.Single(tagHelperOutput.Attributes); Assert.Equal("href", attribute.Name, StringComparer.Ordinal); var htmlContent = Assert.IsAssignableFrom<IHtmlContent>(attribute.Value); Assert.Equal(expectedHref, HtmlContentUtilities.HtmlContentToString(htmlContent), StringComparer.Ordinal); Assert.Equal(HtmlAttributeValueStyle.DoubleQuotes, attribute.ValueStyle); }
public void Process_IgnoresNonHtmlStringOrStringValues() { // Arrange var tagHelperOutput = new TagHelperOutput( tagName: "a", attributes: new TagHelperAttributeList { { "href", true } }, getChildContentAsync: (useCachedResult, encoder) => Task.FromResult<TagHelperContent>(null)); var tagHelper = new UrlResolutionTagHelper(urlHelperFactory: null, htmlEncoder: null); var context = new TagHelperContext( allAttributes: new TagHelperAttributeList( Enumerable.Empty<TagHelperAttribute>()), items: new Dictionary<object, object>(), uniqueId: "test"); // Act tagHelper.Process(context, tagHelperOutput); // Assert var attribute = Assert.Single(tagHelperOutput.Attributes); Assert.Equal("href", attribute.Name, StringComparer.Ordinal); Assert.Equal(true, attribute.Value); Assert.Equal(HtmlAttributeValueStyle.DoubleQuotes, attribute.ValueStyle); }
public void Process_DoesNotResolveNonTildeSlashValues_InHtmlString(HtmlString url) { // Arrange var tagHelperOutput = new TagHelperOutput( tagName: "a", attributes: new TagHelperAttributeList { { "href", url } }, getChildContentAsync: (useCachedResult, encoder) => Task.FromResult<TagHelperContent>(null)); var urlHelperMock = new Mock<IUrlHelper>(); urlHelperMock .Setup(urlHelper => urlHelper.Content(It.IsAny<string>())) .Returns("approot/home/index.html"); var urlHelperFactory = new Mock<IUrlHelperFactory>(); urlHelperFactory .Setup(f => f.GetUrlHelper(It.IsAny<ActionContext>())) .Returns(urlHelperMock.Object); var tagHelper = new UrlResolutionTagHelper(urlHelperFactory.Object, new HtmlTestEncoder()); var context = new TagHelperContext( allAttributes: new TagHelperAttributeList( Enumerable.Empty<TagHelperAttribute>()), items: new Dictionary<object, object>(), uniqueId: "test"); // Act tagHelper.Process(context, tagHelperOutput); // Assert var attribute = Assert.Single(tagHelperOutput.Attributes); Assert.Equal("href", attribute.Name, StringComparer.Ordinal); var attributeValue = Assert.IsType<HtmlString>(attribute.Value); Assert.Equal(url.ToString(), attributeValue.ToString(), StringComparer.Ordinal); Assert.Equal(HtmlAttributeValueStyle.DoubleQuotes, attribute.ValueStyle); }