private IHtmlContent CreateButtonElement(TagHelperContext context) { var buttonTagHelper = new AnchorTagHelper(Generator) { Action = "Create", Controller = "File", RouteValues = { { "category", CategoryString } }, ViewContext = ViewContext }; TagHelperOutput buttonOutput = CreateTagHelperOutput("a"); buttonTagHelper.Process(context, buttonOutput); buttonOutput.AddClass("form-control", HtmlEncoder.Default); buttonOutput.Attributes.Add("target", "_blank"); buttonOutput.Content.SetHtmlContent("<i class=\"fa fa-upload\"></i>"); var fileInputId = "file-upload-" + Id; var script = string.Format("document.getElementById('{0}').click(); return false;", fileInputId); buttonOutput.Attributes.Add("onclick", script); return(buttonOutput); }
public async Task ProcessAsync_EmptyStringOnAspAreaIsPassedThroughToRouteValues() { // Arrange var context = new TagHelperContext( tagName: "a", allAttributes: new TagHelperAttributeList( Enumerable.Empty <TagHelperAttribute>()), items: new Dictionary <object, object>(), uniqueId: "test"); var output = new TagHelperOutput( "a", attributes: new TagHelperAttributeList(), getChildContentAsync: (useCachedResult, encoder) => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.SetContent("Something"); return(Task.FromResult <TagHelperContent>(tagHelperContent)); }); output.Content.SetContent(string.Empty); var generator = new Mock <IHtmlGenerator>(); var expectedRouteValues = new Dictionary <string, object> { { "area", string.Empty } }; generator .Setup(mock => mock.GenerateActionLink( It.IsAny <ViewContext>(), string.Empty, "Index", "Home", "http", "contoso.com", "hello=world", expectedRouteValues, null)) .Returns(new TagBuilder("a")) .Verifiable(); var anchorTagHelper = new AnchorTagHelper(generator.Object) { Action = "Index", Controller = "Home", Area = string.Empty, Fragment = "hello=world", Host = "contoso.com", Protocol = "http" }; // Act await anchorTagHelper.ProcessAsync(context, output); // Assert generator.Verify(); Assert.Equal("a", output.TagName); Assert.Empty(output.Attributes); Assert.Empty(output.Content.GetContent()); }
public async Task ProcessAsync_CallsIntoRouteLinkWithExpectedParameters() { // Arrange var context = new TagHelperContext( tagName: "a", allAttributes: new TagHelperAttributeList( Enumerable.Empty <TagHelperAttribute>()), items: new Dictionary <object, object>(), uniqueId: "test"); var output = new TagHelperOutput( "a", attributes: new TagHelperAttributeList(), getChildContentAsync: (useCachedResult, encoder) => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.SetContent("Something"); return(Task.FromResult <TagHelperContent>(tagHelperContent)); }); output.Content.SetContent(string.Empty); var generator = new Mock <IHtmlGenerator>(MockBehavior.Strict); generator .Setup(mock => mock.GenerateRouteLink( It.IsAny <ViewContext>(), string.Empty, "Default", "http", "contoso.com", "hello=world", It.IsAny <IDictionary <string, object> >(), null)) .Returns(new TagBuilder("a")) .Verifiable(); var anchorTagHelper = new AnchorTagHelper(generator.Object) { Fragment = "hello=world", Host = "contoso.com", Protocol = "http", Route = "Default", }; // Act & Assert await anchorTagHelper.ProcessAsync(context, output); generator.Verify(); Assert.Equal("a", output.TagName); Assert.Empty(output.Attributes); Assert.Empty(output.Content.GetContent()); }
public async Task ProcessAsync_AddsPageToRouteValuesAndCallsPageLinkWithExpectedParameters() { // Arrange var context = new TagHelperContext( tagName: "a", allAttributes: new TagHelperAttributeList( Enumerable.Empty <TagHelperAttribute>()), items: new Dictionary <object, object>(), uniqueId: "test"); var output = new TagHelperOutput( "a", attributes: new TagHelperAttributeList(), getChildContentAsync: (useCachedResult, encoder) => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.SetContent("Something"); return(Task.FromResult <TagHelperContent>(tagHelperContent)); }); output.Content.SetContent(string.Empty); var generator = new Mock <IHtmlGenerator>(); generator .Setup(mock => mock.GeneratePageLink( It.IsAny <ViewContext>(), string.Empty, "/User/Home/Index", "page-handler", "http", "contoso.com", "hello=world", It.IsAny <object>(), null)) .Returns(new TagBuilder("a")) .Verifiable(); var anchorTagHelper = new AnchorTagHelper(generator.Object) { Page = "/User/Home/Index", PageHandler = "page-handler", Fragment = "hello=world", Host = "contoso.com", Protocol = "http", }; // Act await anchorTagHelper.ProcessAsync(context, output); // Assert generator.Verify(); }
private AnchorTagHelper GetAnchorTagHelper(string currentPage, out TagHelperAttributeList attributeList) { var anchorTagHelper = new AnchorTagHelper(_generator) { Page = TagHelper.Model.PageUrl, ViewContext = TagHelper.ViewContext }; anchorTagHelper.RouteValues.Add("currentPage", currentPage); anchorTagHelper.RouteValues.Add("sort", TagHelper.Model.Sort); attributeList = new TagHelperAttributeList { new TagHelperAttribute("tabindex", "-1"), new TagHelperAttribute("class", "page-link") }; return(anchorTagHelper); }
public async Task ProcessAsync_ThrowsIfHrefConflictsWithBoundAttributes(string propertyName) { // Arrange var metadataProvider = new EmptyModelMetadataProvider(); var htmlGenerator = new TestableHtmlGenerator(metadataProvider); var anchorTagHelper = new AnchorTagHelper(htmlGenerator); var output = new TagHelperOutput( "a", attributes: new TagHelperAttributeList { { "href", "http://www.contoso.com" } }, getChildContentAsync: (useCachedResult, encoder) => Task.FromResult <TagHelperContent>(null)); if (propertyName == "asp-route-") { anchorTagHelper.RouteValues.Add("name", "value"); } else { typeof(AnchorTagHelper).GetProperty(propertyName).SetValue(anchorTagHelper, "Home"); } var expectedErrorMessage = "Cannot override the 'href' attribute for <a>. An <a> with a specified " + "'href' must not have attributes starting with 'asp-route-' or an " + "'asp-action', 'asp-controller', 'asp-area', 'asp-route', 'asp-protocol', 'asp-host', " + "'asp-fragment', 'asp-page' or 'asp-page-handler' attribute."; var context = new TagHelperContext( tagName: "test", allAttributes: new TagHelperAttributeList( Enumerable.Empty <TagHelperAttribute>()), items: new Dictionary <object, object>(), uniqueId: "test"); // Act & Assert var ex = await Assert.ThrowsAsync <InvalidOperationException>( () => anchorTagHelper.ProcessAsync(context, output)); Assert.Equal(expectedErrorMessage, ex.Message); }
public TagHelperOutput GenerateAnchorTagHelper(string page, string text, string cssClass, IDictionary <string, string> routeValues) { var tagHelper = new AnchorTagHelper(generator) { ViewContext = viewContext, Page = page, RouteValues = routeValues }; var tagOutput = new TagHelperOutput("a", new TagHelperAttributeList(), (useCachedResult, encoder) => Task.Factory.StartNew <TagHelperContent>(() => new DefaultTagHelperContent())); tagOutput.Content.AppendHtml(text); var anchorContext = new TagHelperContext(new TagHelperAttributeList(new[] { new TagHelperAttribute("asp-page", new HtmlString(page)) }), new Dictionary <object, object>(), Guid.NewGuid().ToString()); tagHelper.Process(anchorContext, tagOutput); tagOutput.Attributes.Add(new TagHelperAttribute("class", cssClass)); return(tagOutput); }
public async Task ProcessAsync_ThrowsIfActionAndPageProvided() { // Arrange var metadataProvider = new EmptyModelMetadataProvider(); var htmlGenerator = new TestableHtmlGenerator(metadataProvider); var anchorTagHelper = new AnchorTagHelper(htmlGenerator) { Action = "Action", Page = "Page", }; var output = new TagHelperOutput( "a", attributes: new TagHelperAttributeList(), getChildContentAsync: (useCachedResult, encoder) => Task.FromResult <TagHelperContent>(null)); var expectedErrorMessage = string.Join( Environment.NewLine, "Cannot determine the 'href' attribute for <a>. The following attributes are mutually exclusive:", "asp-route", "asp-controller, asp-action", "asp-page, asp-page-handler"); var context = new TagHelperContext( tagName: "test", allAttributes: new TagHelperAttributeList( Enumerable.Empty <TagHelperAttribute>()), items: new Dictionary <object, object>(), uniqueId: "test"); // Act & Assert var ex = await Assert.ThrowsAsync <InvalidOperationException>( () => anchorTagHelper.ProcessAsync(context, output)); Assert.Equal(expectedErrorMessage, ex.Message); }
private AnchorTagHelper GetAnchorTagHelper( string currentPage, out TagHelperAttributeList attributeList) { AnchorTagHelper anchorTagHelper = new AnchorTagHelper(this._generator) { Page = this.TagHelper.Model.PageUrl, ViewContext = this.TagHelper.ViewContext }; foreach (var item in TagHelper.RouteValues) { anchorTagHelper.RouteValues.AddIfNotContains(item); } anchorTagHelper.RouteValues.Add(nameof(currentPage), currentPage); anchorTagHelper.RouteValues.Add("sort", this.TagHelper.Model.Sort); attributeList = new TagHelperAttributeList() { new TagHelperAttribute("tabindex", (object)"-1"), new TagHelperAttribute("class", (object)"page-link") }; return(anchorTagHelper); }
public override void Process(TagHelperContext context, TagHelperOutput output) { output.TagName = "div"; var anchorTagHelper = new AnchorTagHelper(_htmlGenerator) { Action = "Privacy", ViewContext = viewContext, }; var anchorOutput = new TagHelperOutput("a", new TagHelperAttributeList(), (useCachedResult, encoder) => Task.Factory.StartNew <TagHelperContent>( () => new DefaultTagHelperContent())); anchorOutput.Content.AppendHtml("Privacy Link"); var anchorContext = new TagHelperContext( new TagHelperAttributeList(new[] { new TagHelperAttribute("asp-action", new HtmlString("Privacy")) }), new Dictionary <object, object>(), Guid.NewGuid().ToString()); anchorTagHelper.ProcessAsync(anchorContext, anchorOutput).GetAwaiter().GetResult(); output.Content.SetHtmlContent(anchorOutput); }
public async Task ProcessAsync_GeneratesExpectedOutput() { // Arrange var expectedTagName = "not-a"; var metadataProvider = new TestModelMetadataProvider(); var tagHelperContext = new TagHelperContext( tagName: "not-a", allAttributes: new TagHelperAttributeList { { "id", "myanchor" }, { "asp-route-name", "value" }, { "asp-action", "index" }, { "asp-controller", "home" }, { "asp-fragment", "hello=world" }, { "asp-host", "contoso.com" }, { "asp-protocol", "http" } }, items: new Dictionary <object, object>(), uniqueId: "test"); var output = new TagHelperOutput( expectedTagName, attributes: new TagHelperAttributeList { { "id", "myanchor" }, }, getChildContentAsync: (useCachedResult, encoder) => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.SetContent("Something Else"); return(Task.FromResult <TagHelperContent>(tagHelperContent)); }); output.Content.SetContent("Something"); var urlHelper = new Mock <IUrlHelper>(); urlHelper .Setup(mock => mock.Action(It.IsAny <UrlActionContext>())).Returns("home/index"); var htmlGenerator = new TestableHtmlGenerator(metadataProvider, urlHelper.Object); var viewContext = TestableHtmlGenerator.GetViewContext( model: null, htmlGenerator: htmlGenerator, metadataProvider: metadataProvider); var anchorTagHelper = new AnchorTagHelper(htmlGenerator) { Action = "index", Controller = "home", Fragment = "hello=world", Host = "contoso.com", Protocol = "http", RouteValues = { { "name", "value" }, }, ViewContext = viewContext, }; // Act await anchorTagHelper.ProcessAsync(tagHelperContext, output); // Assert Assert.Equal(2, output.Attributes.Count); var attribute = Assert.Single(output.Attributes, attr => attr.Name.Equals("id")); Assert.Equal("myanchor", attribute.Value); attribute = Assert.Single(output.Attributes, attr => attr.Name.Equals("href")); Assert.Equal("home/index", attribute.Value); Assert.Equal("Something", output.Content.GetContent()); Assert.Equal(expectedTagName, output.TagName); }