Test data/time templates

- focus on affect of `ModelMetadata.HasNonDefaultEditFormat` and
  `IHtmlHelper.Html5DateRenderingMode`
- work through `TemplateRenderer` because individual templates only do
  formatting in a few cases
This commit is contained in:
dougbu 2014-08-18 12:43:45 -07:00
parent 0b548997d2
commit 041d350d51
1 changed files with 121 additions and 1 deletions

View File

@ -2,10 +2,10 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNet.Mvc.ModelBinding;
using Microsoft.AspNet.Mvc.Rendering;
using Microsoft.AspNet.Testing;
using Moq;
using Xunit;
@ -203,6 +203,126 @@ Environment.NewLine;
result.ToString());
}
// DateTime-local is not special-cased unless using Html5DateRenderingMode.Rfc3339.
[Theory]
[InlineData("date", "{0:d}", "02/01/2000")]
[InlineData("datetime", null, "02/01/2000 03:04:05 +00:00")]
[InlineData("datetime-local", null, "02/01/2000 03:04:05 +00:00")]
[InlineData("time", "{0:t}", "03:04")]
[ReplaceCulture]
public void Editor_FindsCorrectDateOrTimeTemplate(string dataTypeName, string editFormatString, string expected)
{
// Arrange
var expectedInput = "<input class=\"text-box single-line\" id=\"FieldPrefix\" name=\"FieldPrefix\" type=\"" +
dataTypeName + "\" value=\"" + expected + "\" />";
var offset = TimeSpan.FromHours(0);
var model = new DateTimeOffset(
year: 2000,
month: 1,
day: 2,
hour: 3,
minute: 4,
second: 5,
millisecond: 6,
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.ViewData.ModelMetadata.DataTypeName = dataTypeName;
helper.ViewData.ModelMetadata.EditFormatString = editFormatString; // What [DataType] does for given type.
helper.ViewData.TemplateInfo.HtmlFieldPrefix = "FieldPrefix";
// Act
var result = helper.Editor("");
// Assert
Assert.Equal(expectedInput, result.ToString());
}
[Theory]
[InlineData("date", "{0:d}", "2000-01-02")]
[InlineData("datetime", null, "2000-01-02T03:04:05.060+00:00")]
[InlineData("datetime-local", null, "2000-01-02T03:04:05.060")]
[InlineData("time", "{0:t}", "03:04:05.060")]
[ReplaceCulture]
public void Editor_AppliesRfc3339(string dataTypeName, string editFormatString, string expected)
{
// Arrange
var expectedInput = "<input class=\"text-box single-line\" id=\"FieldPrefix\" name=\"FieldPrefix\" type=\"" +
dataTypeName + "\" value=\"" + expected + "\" />";
// Place DateTime-local value in current timezone.
var offset = string.Equals("", dataTypeName) ? DateTimeOffset.Now.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 = Html5DateRenderingMode.Rfc3339;
helper.ViewData.ModelMetadata.DataTypeName = dataTypeName;
helper.ViewData.ModelMetadata.EditFormatString = editFormatString; // What [DataType] does for given type.
helper.ViewData.TemplateInfo.HtmlFieldPrefix = "FieldPrefix";
// Act
var result = helper.Editor("");
// Assert
Assert.Equal(expectedInput, result.ToString());
}
[Theory]
[InlineData("date", Html5DateRenderingMode.CurrentCulture)]
[InlineData("date", Html5DateRenderingMode.Rfc3339)]
[InlineData("datetime", Html5DateRenderingMode.CurrentCulture)]
[InlineData("datetime", Html5DateRenderingMode.Rfc3339)]
[InlineData("datetime-local", Html5DateRenderingMode.CurrentCulture)]
[InlineData("datetime-local", Html5DateRenderingMode.Rfc3339)]
[InlineData("time", Html5DateRenderingMode.CurrentCulture)]
[InlineData("time", Html5DateRenderingMode.Rfc3339)]
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());
}
[Fact]
public void EditorFor_FindsModel()
{