public async Task ProcessAsync_GeneratesExpectedOutput( object model, Type containerType, Func <object> modelAccessor, NameAndId nameAndId, string expectedValue) { // Arrange var expectedAttributes = new Dictionary <string, string> { { "class", "form-control" }, { "type", "text" }, { "id", nameAndId.Id }, { "name", nameAndId.Name }, { "valid", "from validation attributes" }, { "value", expectedValue }, }; var expectedContent = "original content"; var expectedTagName = "input"; var metadataProvider = new DataAnnotationsModelMetadataProvider(); // Property name is either nameof(Model.Text) or nameof(NestedModel.Text). var metadata = metadataProvider.GetMetadataForProperty(modelAccessor, containerType, propertyName: "Text"); var modelExpression = new ModelExpression(nameAndId.Name, metadata); var tagHelperContext = new TagHelperContext(new Dictionary <string, object>()); var htmlAttributes = new Dictionary <string, string> { { "class", "form-control" }, }; var output = new TagHelperOutput("original tag name", htmlAttributes, expectedContent) { SelfClosing = false, }; var htmlGenerator = new TestableHtmlGenerator(metadataProvider) { ValidationAttributes = { { "valid", "from validation attributes" }, } }; var viewContext = TestableHtmlGenerator.GetViewContext(model, htmlGenerator, metadataProvider); var tagHelper = new InputTagHelper { Generator = htmlGenerator, For = modelExpression, ViewContext = viewContext, }; // Act await tagHelper.ProcessAsync(tagHelperContext, output); // Assert Assert.Equal(expectedAttributes, output.Attributes); Assert.Equal(expectedContent, output.Content); Assert.True(output.SelfClosing); Assert.Equal(expectedTagName, output.TagName); }
public async Task ProcessAsync_Throws_IfForNotBoundButFormatIs() { // Arrange var contextAttributes = new Dictionary <string, object>(); var originalAttributes = new Dictionary <string, string>(); var expectedTagName = "select"; var expectedMessage = "Unable to format without a 'asp-for' expression for <input>. 'asp-format' must " + "be null if 'asp-for' is null."; var tagHelperContext = new TagHelperContext( allAttributes: new Dictionary <string, object>(), uniqueId: "test", getChildContentAsync: () => Task.FromResult("Something")); var output = new TagHelperOutput(expectedTagName, originalAttributes); var tagHelper = new InputTagHelper { Format = "{0}", }; // Act & Assert var exception = await Assert.ThrowsAsync <InvalidOperationException>( () => tagHelper.ProcessAsync(tagHelperContext, output)); Assert.Equal(expectedMessage, exception.Message); }
public async Task TagHelper_RestoresTypeAndValue_IfForNotBound() { // Arrange var expectedAttributes = new Dictionary <string, string> { { "class", "form-control" }, { "type", "datetime" }, { "value", "2014-10-15T23:24:19.000-7:00" }, }; var expectedContent = "original content"; var expectedTagName = "original tag name"; var metadataProvider = new DataAnnotationsModelMetadataProvider(); var metadata = metadataProvider.GetMetadataForProperty( modelAccessor: () => null, containerType: typeof(Model), propertyName: nameof(Model.Text)); var modelExpression = new ModelExpression(nameof(Model.Text), metadata); var tagHelperContext = new TagHelperContext(new Dictionary <string, object>()); var output = new TagHelperOutput(expectedTagName, expectedAttributes, expectedContent) { SelfClosing = false, }; var htmlGenerator = new TestableHtmlGenerator(metadataProvider) { ValidationAttributes = { { "valid", "from validation attributes" }, } }; Model model = null; var viewContext = TestableHtmlGenerator.GetViewContext(model, htmlGenerator, metadataProvider); var tagHelper = new InputTagHelper { Generator = htmlGenerator, ViewContext = viewContext, }; // Act await tagHelper.ProcessAsync(tagHelperContext, output); // Assert Assert.Equal(expectedAttributes, output.Attributes); Assert.Equal(expectedContent, output.Content); Assert.False(output.SelfClosing); Assert.Equal(expectedTagName, output.TagName); }