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);
        }
Exemple #2
0
    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());
    }
Exemple #3
0
    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());
    }
Exemple #4
0
    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);
        }
Exemple #6
0
    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);
    }
Exemple #7
0
        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);
        }
Exemple #8
0
    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);
    }
Exemple #11
0
    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);
    }