示例#1
0
        public void Process_WithEmptyForName_Throws()
        {
            // Arrange
            var expectedMessage = "The name of an HTML field cannot be null or empty. Instead use methods " +
                                  "Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Editor or Microsoft.AspNetCore.Mvc.Rendering." +
                                  "IHtmlHelper`1.EditorFor with a non-empty htmlFieldName argument value.";
            var expectedTagName = "select";

            var metadataProvider = new EmptyModelMetadataProvider();
            var htmlGenerator    = new TestableHtmlGenerator(metadataProvider);
            var model            = "model-value";
            var modelExplorer    = metadataProvider.GetModelExplorerForType(typeof(string), model);
            var modelExpression  = new ModelExpression(name: string.Empty, modelExplorer: modelExplorer);
            var viewContext      = TestableHtmlGenerator.GetViewContext(model, htmlGenerator, metadataProvider);
            var tagHelper        = new SelectTagHelper(htmlGenerator)
            {
                For         = modelExpression,
                ViewContext = viewContext,
            };

            var context = new TagHelperContext(new TagHelperAttributeList(), new Dictionary <object, object>(), "test");
            var output  = new TagHelperOutput(
                expectedTagName,
                new TagHelperAttributeList(),
                (_, __) => Task.FromResult <TagHelperContent>(new DefaultTagHelperContent()));

            // Act & Assert
            ExceptionAssert.ThrowsArgument(
                () => tagHelper.Process(context, output),
                paramName: "expression",
                exceptionMessage: expectedMessage);
        }
示例#2
0
        public void Process_PassesNameThrough_EvenIfNullFor()
        {
            // Arrange
            var expectedAttributeValue = "-expression-";
            var expectedTagName        = "span";

            var selectList = Array.Empty <SelectListItem>();
            var generator  = new Mock <IHtmlGenerator>(MockBehavior.Strict);

            generator
            .Setup(gen => gen.GenerateGroupsAndOptions(/* optionLabel: */ null, selectList))
            .Returns(HtmlString.Empty)
            .Verifiable();

            var metadataProvider = new EmptyModelMetadataProvider();
            var viewContext      = TestableHtmlGenerator.GetViewContext(
                model: null,
                htmlGenerator: generator.Object,
                metadataProvider: metadataProvider);

            var tagHelper = new SelectTagHelper(generator.Object)
            {
                Items       = selectList,
                Name        = expectedAttributeValue,
                ViewContext = viewContext,
            };

            var attributes = new TagHelperAttributeList
            {
                { "name", expectedAttributeValue },
            };

            var tagHelperContext = new TagHelperContext(attributes, new Dictionary <object, object>(), "test");
            var output           = new TagHelperOutput(
                expectedTagName,
                new TagHelperAttributeList(),
                (_, __) => Task.FromResult <TagHelperContent>(new DefaultTagHelperContent()));

            // Act
            tagHelper.Process(tagHelperContext, output);

            // Assert
            generator.VerifyAll();
            Assert.Equal(expectedTagName, output.TagName);
            var attribute = Assert.Single(output.Attributes);

            Assert.Equal("name", attribute.Name);
            Assert.Equal(expectedAttributeValue, attribute.Value);
        }
示例#3
0
        public void Process_WithEmptyForName_DoesNotThrow_WithName()
        {
            // Arrange
            var expectedAttributeValue = "-expression-";
            var expectedTagName        = "select";

            var metadataProvider = new EmptyModelMetadataProvider();
            var htmlGenerator    = new TestableHtmlGenerator(metadataProvider);
            var model            = "model-value";
            var modelExplorer    = metadataProvider.GetModelExplorerForType(typeof(string), model);
            var modelExpression  = new ModelExpression(name: string.Empty, modelExplorer: modelExplorer);
            var viewContext      = TestableHtmlGenerator.GetViewContext(model, htmlGenerator, metadataProvider);
            var tagHelper        = new SelectTagHelper(htmlGenerator)
            {
                For         = modelExpression,
                Name        = expectedAttributeValue,
                ViewContext = viewContext,
            };

            var attributes = new TagHelperAttributeList
            {
                { "name", expectedAttributeValue },
            };

            var context = new TagHelperContext(attributes, new Dictionary <object, object>(), "test");
            var output  = new TagHelperOutput(
                expectedTagName,
                new TagHelperAttributeList(),
                (_, __) => Task.FromResult <TagHelperContent>(new DefaultTagHelperContent()));

            // Act
            tagHelper.Process(context, output);

            // Assert
            Assert.Equal(expectedTagName, output.TagName);
            Assert.False(output.IsContentModified);

            var attribute = Assert.Single(output.Attributes);

            Assert.Equal("name", attribute.Name);
            Assert.Equal(expectedAttributeValue, attribute.Value);
        }