private static InputTagHelper GetTagHelper( IHtmlGenerator htmlGenerator, object container, Type containerType, object model, string propertyName, string expressionName, IModelMetadataProvider metadataProvider = null) { if (metadataProvider == null) { metadataProvider = new TestModelMetadataProvider(); } var containerMetadata = metadataProvider.GetMetadataForType(containerType); var containerExplorer = metadataProvider.GetModelExplorerForType(containerType, container); var propertyMetadata = metadataProvider.GetMetadataForProperty(containerType, propertyName); var modelExplorer = containerExplorer.GetExplorerForExpression(propertyMetadata, model); var modelExpression = new ModelExpression(expressionName, modelExplorer); var viewContext = TestableHtmlGenerator.GetViewContext(container, htmlGenerator, metadataProvider); var inputTagHelper = new InputTagHelper { For = modelExpression, Generator = htmlGenerator, ViewContext = viewContext, }; return(inputTagHelper); }
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); }
private static InputTagHelper GetTagHelper( IHtmlGenerator htmlGenerator, object container, Type containerType, Func <object> modelAccessor, string propertyName, string expressionName) { var metadataProvider = new EmptyModelMetadataProvider(); var metadata = metadataProvider.GetMetadataForProperty(modelAccessor, containerType, propertyName); var modelExpression = new ModelExpression(expressionName, metadata); var viewContext = TestableHtmlGenerator.GetViewContext(container, htmlGenerator, metadataProvider); var inputTagHelper = new InputTagHelper { For = modelExpression, Generator = htmlGenerator, ViewContext = viewContext, }; return(inputTagHelper); }
private static InputTagHelper GetTagHelper( IHtmlGenerator htmlGenerator, object container, Type containerType, object model, string propertyName, string expressionName, IModelMetadataProvider metadataProvider = null) { if (metadataProvider == null) { metadataProvider = new TestModelMetadataProvider(); } var containerMetadata = metadataProvider.GetMetadataForType(containerType); var containerExplorer = metadataProvider.GetModelExplorerForType(containerType, container); var propertyMetadata = metadataProvider.GetMetadataForProperty(containerType, propertyName); var modelExplorer = containerExplorer.GetExplorerForExpression(propertyMetadata, model); var modelExpression = new ModelExpression(expressionName, modelExplorer); var viewContext = TestableHtmlGenerator.GetViewContext(container, htmlGenerator, metadataProvider); var inputTagHelper = new InputTagHelper(htmlGenerator) { For = modelExpression, ViewContext = viewContext, }; return inputTagHelper; }