public void Editor_AppliesNonDefaultEditFormat(string dataTypeName, Html5DateRenderingMode renderingMode) { // Arrange var expectedInput = "<input class=\"text-box single-line\" id=\"FieldPrefix\" name=\"FieldPrefix\" type=\"" + dataTypeName + "\" value=\"Formatted as 2000-01-02T03:04:05.0600000+00:00\" />"; var offset = TimeSpan.FromHours(0); var model = new DateTimeOffset( year: 2000, month: 1, day: 2, hour: 3, minute: 4, second: 5, millisecond: 60, offset: offset); var viewEngine = new Mock <ICompositeViewEngine>(); viewEngine .Setup(v => v.FindPartialView(It.IsAny <ActionContext>(), It.IsAny <string>())) .Returns(ViewEngineResult.NotFound("", Enumerable.Empty <string>())); var helper = DefaultTemplatesUtilities.GetHtmlHelper(model, viewEngine.Object); helper.Html5DateRenderingMode = renderingMode; // Ignored due to HasNonDefaultEditFormat. helper.ViewData.ModelMetadata.DataTypeName = dataTypeName; helper.ViewData.ModelMetadata.EditFormatString = "Formatted as {0:O}"; helper.ViewData.ModelMetadata.HasNonDefaultEditFormat = true; helper.ViewData.TemplateInfo.HtmlFieldPrefix = "FieldPrefix"; // Act var result = helper.Editor(""); // Assert Assert.Equal(expectedInput, result.ToString()); }
public void Editor_AppliesNonDefaultEditFormat(string dataTypeName, Html5DateRenderingMode renderingMode) { // Arrange // Mono issue - https://github.com/aspnet/External/issues/19 var expectedInput = PlatformNormalizer.NormalizeContent( "<input class=\"HtmlEncode[[text-box single-line]]\" data-val=\"HtmlEncode[[true]]\" " + "data-val-required=\"HtmlEncode[[The DateTimeOffset field is required.]]\" id=\"HtmlEncode[[FieldPrefix]]\" " + "name=\"HtmlEncode[[FieldPrefix]]\" type=\"HtmlEncode[[" + dataTypeName + "]]\" value=\"HtmlEncode[[Formatted as 2000-01-02T03:04:05.0600000+00:00]]\" />"); var offset = TimeSpan.FromHours(0); var model = new DateTimeOffset( year: 2000, month: 1, day: 2, hour: 3, minute: 4, second: 5, millisecond: 60, offset: offset); var viewEngine = new Mock <ICompositeViewEngine>(); viewEngine .Setup(v => v.FindPartialView(It.IsAny <ActionContext>(), It.IsAny <string>())) .Returns(ViewEngineResult.NotFound("", Enumerable.Empty <string>())); var provider = new TestModelMetadataProvider(); provider.ForType <DateTimeOffset>().DisplayDetails(dd => { dd.DataTypeName = dataTypeName; dd.EditFormatString = "Formatted as {0:O}"; // What [DataType] does for given type. dd.HasNonDefaultEditFormat = true; }); var helper = DefaultTemplatesUtilities.GetHtmlHelper( model, null, viewEngine.Object, provider); helper.Html5DateRenderingMode = renderingMode; // Ignored due to HasNonDefaultEditFormat. helper.ViewData.TemplateInfo.HtmlFieldPrefix = "FieldPrefix"; // Act var result = helper.Editor(""); // Assert Assert.Equal(expectedInput, result.ToString()); }
public async Task ProcessAsync_CallsGenerateTextBox_AddsExpectedAttributesForRfc3339( string propertyName, Html5DateRenderingMode dateRenderingMode, string expectedFormat, string expectedType) { // Arrange var expectedAttributes = new TagHelperAttributeList { { "type", expectedType }, // Calculated; not passed to HtmlGenerator. }; var expectedTagName = "not-input"; var context = new TagHelperContext( allAttributes: new TagHelperAttributeList( Enumerable.Empty <TagHelperAttribute>()), items: new Dictionary <object, object>(), uniqueId: "test"); var output = new TagHelperOutput( expectedTagName, attributes: new TagHelperAttributeList(), getChildContentAsync: (useCachedResult, encoder) => Task.FromResult <TagHelperContent>( new DefaultTagHelperContent())) { TagMode = TagMode.SelfClosing, }; var htmlAttributes = new Dictionary <string, object> { { "type", expectedType } }; var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider(); var htmlGenerator = new Mock <IHtmlGenerator>(MockBehavior.Strict); var tagHelper = GetTagHelper( htmlGenerator.Object, model: null, propertyName: propertyName, metadataProvider: metadataProvider); tagHelper.ViewContext.Html5DateRenderingMode = dateRenderingMode; var tagBuilder = new TagBuilder("input"); htmlGenerator .Setup(mock => mock.GenerateTextBox( tagHelper.ViewContext, tagHelper.For.ModelExplorer, tagHelper.For.Name, null, // value expectedFormat, htmlAttributes)) // htmlAttributes .Returns(tagBuilder) .Verifiable(); // Act await tagHelper.ProcessAsync(context, output); // Assert htmlGenerator.Verify(); Assert.Equal(TagMode.SelfClosing, output.TagMode); Assert.Equal(expectedAttributes, output.Attributes); Assert.Empty(output.PreContent.GetContent()); Assert.Equal(string.Empty, output.Content.GetContent()); Assert.Empty(output.PostContent.GetContent()); Assert.Equal(expectedTagName, output.TagName); }
public async Task ProcessAsync_CallsGenerateTextBox_AddsExpectedAttributesForRfc3339( string propertyName, Html5DateRenderingMode dateRenderingMode, string expectedFormat, string expectedType) { // Arrange var expectedAttributes = new TagHelperAttributeList { { "type", expectedType }, // Calculated; not passed to HtmlGenerator. }; var expectedTagName = "not-input"; var context = new TagHelperContext( allAttributes: new ReadOnlyTagHelperAttributeList<IReadOnlyTagHelperAttribute>( Enumerable.Empty<IReadOnlyTagHelperAttribute>()), items: new Dictionary<object, object>(), uniqueId: "test", getChildContentAsync: useCachedResult => Task.FromResult<TagHelperContent>(new DefaultTagHelperContent())); var output = new TagHelperOutput(expectedTagName, attributes: new TagHelperAttributeList()) { TagMode = TagMode.SelfClosing, }; var htmlAttributes = new Dictionary<string, object> { { "type", expectedType } }; var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider(); var htmlGenerator = new Mock<IHtmlGenerator>(MockBehavior.Strict); var tagHelper = GetTagHelper( htmlGenerator.Object, model: null, propertyName: propertyName, metadataProvider: metadataProvider); tagHelper.ViewContext.Html5DateRenderingMode = dateRenderingMode; var tagBuilder = new TagBuilder("input"); htmlGenerator .Setup(mock => mock.GenerateTextBox( tagHelper.ViewContext, tagHelper.For.ModelExplorer, tagHelper.For.Name, null, // value expectedFormat, htmlAttributes)) // htmlAttributes .Returns(tagBuilder) .Verifiable(); // Act await tagHelper.ProcessAsync(context, output); // Assert htmlGenerator.Verify(); Assert.Equal(TagMode.SelfClosing, output.TagMode); Assert.Equal(expectedAttributes, output.Attributes); Assert.Empty(output.PreContent.GetContent()); Assert.Equal(string.Empty, output.Content.GetContent()); Assert.Empty(output.PostContent.GetContent()); Assert.Equal(expectedTagName, output.TagName); }
public void GenerateTextBox_AlwaysUsesCultureSpecificFormatting_WhenOptionIsSet(string type, Html5DateRenderingMode dateRenderingMode, bool shouldUseInvariantFormatting) { // Arrange var metadataProvider = new TestModelMetadataProvider(); var htmlHelperOptions = new HtmlHelperOptions() { Html5DateRenderingMode = dateRenderingMode, FormInputRenderMode = FormInputRenderMode.AlwaysUseCurrentCulture, }; var htmlGenerator = GetGenerator(metadataProvider, new() { HtmlHelperOptions = htmlHelperOptions }); var viewContext = GetViewContext <Model>(model: null, metadataProvider, htmlHelperOptions); var expression = nameof(Model.Name); var modelMetadata = metadataProvider.GetMetadataForProperty(typeof(Model), expression); var modelExplorer = new ModelExplorer(metadataProvider, modelMetadata, null); var htmlAttributes = new Dictionary <string, object> { { "name", "testElement" }, { "type", type }, }; // Act _ = htmlGenerator.GenerateTextBox(viewContext, modelExplorer, expression, null, null, htmlAttributes); // Assert var didForceInvariantFormatting = viewContext.FormContext.InvariantField(expression); Assert.False(didForceInvariantFormatting); }