diff --git a/test/Microsoft.AspNet.Mvc.Core.Test/Rendering/DefaultEditorTemplatesTests.cs b/test/Microsoft.AspNet.Mvc.Core.Test/Rendering/DefaultEditorTemplatesTests.cs
index e18f9012d3..066c2325ba 100644
--- a/test/Microsoft.AspNet.Mvc.Core.Test/Rendering/DefaultEditorTemplatesTests.cs
+++ b/test/Microsoft.AspNet.Mvc.Core.Test/Rendering/DefaultEditorTemplatesTests.cs
@@ -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 = "";
+ 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();
+ viewEngine
+ .Setup(v => v.FindPartialView(It.IsAny(), It.IsAny()))
+ .Returns(ViewEngineResult.NotFound("", Enumerable.Empty()));
+ 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 = "";
+
+ // 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();
+ viewEngine
+ .Setup(v => v.FindPartialView(It.IsAny(), It.IsAny()))
+ .Returns(ViewEngineResult.NotFound("", Enumerable.Empty()));
+ 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 = "";
+ 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();
+ viewEngine
+ .Setup(v => v.FindPartialView(It.IsAny(), It.IsAny()))
+ .Returns(ViewEngineResult.NotFound("", Enumerable.Empty()));
+ 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()
{