Fixing the TODOs dependent on SimpleDisplayText.
This commit is contained in:
parent
cca78bb055
commit
15b06a4057
|
|
@ -209,8 +209,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
||||||
|
|
||||||
if (templateInfo.TemplateDepth > 1)
|
if (templateInfo.TemplateDepth > 1)
|
||||||
{
|
{
|
||||||
// TODO: add ModelMetadata.SimpleDisplayText and use here (return SimpleDisplayText)
|
return modelMetadata.Model == null ? modelMetadata.NullDisplayText : modelMetadata.SimpleDisplayText;
|
||||||
return modelMetadata.Model.ToString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var serviceProvider = html.ViewContext.HttpContext.RequestServices;
|
var serviceProvider = html.ViewContext.HttpContext.RequestServices;
|
||||||
|
|
|
||||||
|
|
@ -210,8 +210,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
||||||
|
|
||||||
if (templateInfo.TemplateDepth > 1)
|
if (templateInfo.TemplateDepth > 1)
|
||||||
{
|
{
|
||||||
// TODO: add ModelMetadata.SimpleDisplayText and use here (return SimpleDisplayText, not ToString())
|
return modelMetadata.Model == null ? modelMetadata.NullDisplayText : modelMetadata.SimpleDisplayText;
|
||||||
return modelMetadata.Model == null ? modelMetadata.NullDisplayText : modelMetadata.Model.ToString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var serviceProvider = html.ViewContext.HttpContext.RequestServices;
|
var serviceProvider = html.ViewContext.HttpContext.RequestServices;
|
||||||
|
|
|
||||||
|
|
@ -59,6 +59,9 @@
|
||||||
<Compile Include="PropertyHelperTest.cs" />
|
<Compile Include="PropertyHelperTest.cs" />
|
||||||
<Compile Include="ReflectedActionDescriptorProviderTests.cs" />
|
<Compile Include="ReflectedActionDescriptorProviderTests.cs" />
|
||||||
<Compile Include="ReflectedActionInvokerTest.cs" />
|
<Compile Include="ReflectedActionInvokerTest.cs" />
|
||||||
|
<Compile Include="Rendering\DefaultTemplatesUtilities.cs" />
|
||||||
|
<Compile Include="Rendering\DefaultDisplayTemplatesTests.cs" />
|
||||||
|
<Compile Include="Rendering\DefaultEditorTemplatesTests.cs" />
|
||||||
<Compile Include="Rendering\HtmlAttributePropertyHelperTest.cs" />
|
<Compile Include="Rendering\HtmlAttributePropertyHelperTest.cs" />
|
||||||
<Compile Include="Rendering\ViewContextTests.cs" />
|
<Compile Include="Rendering\ViewContextTests.cs" />
|
||||||
<Compile Include="Rendering\ViewDataOfTTest.cs" />
|
<Compile Include="Rendering\ViewDataOfTTest.cs" />
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,74 @@
|
||||||
|
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using Microsoft.AspNet.Mvc.ModelBinding;
|
||||||
|
using Microsoft.AspNet.Mvc.Rendering;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc.Core.Test
|
||||||
|
{
|
||||||
|
public class DefaultDisplayTemplateTests
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void ObjectTemplateDisplaysSimplePropertiesOnObjectByDefault()
|
||||||
|
{
|
||||||
|
var expected =
|
||||||
|
"<div class=\"display-label\">Property1</div>" + Environment.NewLine
|
||||||
|
+ "<div class=\"display-field\">Model = p1, ModelType = System.String, PropertyName = Property1," +
|
||||||
|
" SimpleDisplayText = p1</div>" + Environment.NewLine
|
||||||
|
+ "<div class=\"display-label\">Property2</div>" + Environment.NewLine
|
||||||
|
+ "<div class=\"display-field\">Model = (null), ModelType = System.String, PropertyName = Property2," +
|
||||||
|
" SimpleDisplayText = (null)</div>" + Environment.NewLine;
|
||||||
|
|
||||||
|
// Arrange
|
||||||
|
var model = new DefaultTemplatesUtilities.ObjectTemplateModel { Property1 = "p1", Property2 = null };
|
||||||
|
var html = DefaultTemplatesUtilities.GetHtmlHelper(model);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var result = DefaultDisplayTemplates.ObjectTemplate(html);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Equal(expected, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ObjectTemplateDisplaysNullDisplayTextWhenObjectIsNull()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var html = DefaultTemplatesUtilities.GetHtmlHelper(null);
|
||||||
|
var metadata =
|
||||||
|
new EmptyModelMetadataProvider()
|
||||||
|
.GetMetadataForType(null, typeof(DefaultTemplatesUtilities.ObjectTemplateModel));
|
||||||
|
metadata.NullDisplayText = "(null value)";
|
||||||
|
html.ViewData.ModelMetadata = metadata;
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var result = DefaultDisplayTemplates.ObjectTemplate(html);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Equal(metadata.NullDisplayText, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ObjectTemplateDisplaysSimpleDisplayTextWhenTemplateDepthGreaterThanOne()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var model = new DefaultTemplatesUtilities.ObjectTemplateModel();
|
||||||
|
var html = DefaultTemplatesUtilities.GetHtmlHelper(model);
|
||||||
|
var metadata =
|
||||||
|
new EmptyModelMetadataProvider()
|
||||||
|
.GetMetadataForType(() => model, typeof(DefaultTemplatesUtilities.ObjectTemplateModel));
|
||||||
|
metadata.SimpleDisplayText = "Simple Display Text";
|
||||||
|
html.ViewData.ModelMetadata = metadata;
|
||||||
|
html.ViewData.TemplateInfo.AddVisited("foo");
|
||||||
|
html.ViewData.TemplateInfo.AddVisited("bar");
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var result = DefaultDisplayTemplates.ObjectTemplate(html);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Equal(metadata.SimpleDisplayText, result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,78 @@
|
||||||
|
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using Microsoft.AspNet.Mvc.ModelBinding;
|
||||||
|
using Microsoft.AspNet.Mvc.Rendering;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc.Core.Test
|
||||||
|
{
|
||||||
|
public class DefaultEditorTemplatesTests
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void ObjectTemplateEditsSimplePropertiesOnObjectByDefault()
|
||||||
|
{
|
||||||
|
var expected =
|
||||||
|
"<div class=\"editor-label\"><label for=\"Property1\">Property1</label></div>" + Environment.NewLine
|
||||||
|
+ "<div class=\"editor-field\">Model = p1, ModelType = System.String, PropertyName = Property1," +
|
||||||
|
" SimpleDisplayText = p1 </div>" + Environment.NewLine
|
||||||
|
+ "<div class=\"editor-label\"><label for=\"Property2\">Property2</label></div>" + Environment.NewLine
|
||||||
|
+ "<div class=\"editor-field\">Model = (null), ModelType = System.String, PropertyName = Property2," +
|
||||||
|
" SimpleDisplayText = (null) </div>" + Environment.NewLine;
|
||||||
|
|
||||||
|
// Arrange
|
||||||
|
var model = new DefaultTemplatesUtilities.ObjectTemplateModel { Property1 = "p1", Property2 = null };
|
||||||
|
var html = DefaultTemplatesUtilities.GetHtmlHelper(model);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var result = DefaultEditorTemplates.ObjectTemplate(html);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Equal(expected, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ObjectTemplateDisplaysNullDisplayTextWithNullModelAndTemplateDepthGreaterThanOne()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var html = DefaultTemplatesUtilities.GetHtmlHelper(null);
|
||||||
|
var metadata =
|
||||||
|
new EmptyModelMetadataProvider()
|
||||||
|
.GetMetadataForType(null, typeof(DefaultTemplatesUtilities.ObjectTemplateModel));
|
||||||
|
metadata.NullDisplayText = "Null Display Text";
|
||||||
|
metadata.SimpleDisplayText = "Simple Display Text";
|
||||||
|
html.ViewData.ModelMetadata = metadata;
|
||||||
|
html.ViewData.TemplateInfo.AddVisited("foo");
|
||||||
|
html.ViewData.TemplateInfo.AddVisited("bar");
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var result = DefaultEditorTemplates.ObjectTemplate(html);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Equal(metadata.NullDisplayText, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ObjectTemplateDisplaysSimpleDisplayTextWithNonNullModelTemplateDepthGreaterThanOne()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var model = new DefaultTemplatesUtilities.ObjectTemplateModel();
|
||||||
|
var html = DefaultTemplatesUtilities.GetHtmlHelper(model);
|
||||||
|
var metadata =
|
||||||
|
new EmptyModelMetadataProvider()
|
||||||
|
.GetMetadataForType(() => model, typeof(DefaultTemplatesUtilities.ObjectTemplateModel));
|
||||||
|
html.ViewData.ModelMetadata = metadata;
|
||||||
|
metadata.NullDisplayText = "Null Display Text";
|
||||||
|
metadata.SimpleDisplayText = "Simple Display Text";
|
||||||
|
html.ViewData.TemplateInfo.AddVisited("foo");
|
||||||
|
html.ViewData.TemplateInfo.AddVisited("bar");
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var result = DefaultEditorTemplates.ObjectTemplate(html);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Equal(metadata.SimpleDisplayText, result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,119 @@
|
||||||
|
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
|
||||||
|
// 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.Globalization;
|
||||||
|
using System.IO;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNet.Http;
|
||||||
|
using Microsoft.AspNet.Mvc.ModelBinding;
|
||||||
|
using Microsoft.AspNet.Mvc.Rendering;
|
||||||
|
using Microsoft.AspNet.Routing;
|
||||||
|
using Microsoft.AspNet.Security.DataProtection;
|
||||||
|
using Microsoft.Framework.OptionsModel;
|
||||||
|
using Moq;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc.Core.Test
|
||||||
|
{
|
||||||
|
public class DefaultTemplatesUtilities
|
||||||
|
{
|
||||||
|
public class ObjectTemplateModel
|
||||||
|
{
|
||||||
|
public ObjectTemplateModel()
|
||||||
|
{
|
||||||
|
ComplexInnerModel = new object();
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Property1 { get; set; }
|
||||||
|
public string Property2 { get; set; }
|
||||||
|
public object ComplexInnerModel { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HtmlHelper GetHtmlHelper(object model)
|
||||||
|
{
|
||||||
|
var provider = new DataAnnotationsModelMetadataProvider();
|
||||||
|
var viewData = new ViewDataDictionary(provider);
|
||||||
|
viewData.Model = model;
|
||||||
|
viewData.ModelMetadata =
|
||||||
|
provider.GetMetadataForType(() => model, typeof(ObjectTemplateModel));
|
||||||
|
|
||||||
|
var httpContext = new Mock<HttpContext>();
|
||||||
|
httpContext
|
||||||
|
.Setup(o => o.Response)
|
||||||
|
.Returns(Mock.Of<HttpResponse>());
|
||||||
|
httpContext
|
||||||
|
.Setup(o => o.Items)
|
||||||
|
.Returns(new Dictionary<object, object>());
|
||||||
|
|
||||||
|
var view = new Mock<IView>();
|
||||||
|
view
|
||||||
|
.Setup(v => v.RenderAsync(It.IsAny<ViewContext>()))
|
||||||
|
.Callback(async (ViewContext v) =>
|
||||||
|
{
|
||||||
|
await v.Writer.WriteAsync(FormatOutput(v.ViewData.ModelMetadata));
|
||||||
|
})
|
||||||
|
.Returns(Task.FromResult(0));
|
||||||
|
|
||||||
|
var routeDictionary = new Dictionary<string, object>();
|
||||||
|
var viewEngine = new Mock<IViewEngine>();
|
||||||
|
viewEngine
|
||||||
|
.Setup(v => v.FindPartialView(routeDictionary, It.IsAny<string>()))
|
||||||
|
.Returns(ViewEngineResult.Found("MyView", view.Object));
|
||||||
|
|
||||||
|
var serviceProvider = new Mock<IServiceProvider>();
|
||||||
|
serviceProvider
|
||||||
|
.Setup(s => s.GetService(typeof(IViewEngine)))
|
||||||
|
.Returns(viewEngine.Object);
|
||||||
|
serviceProvider
|
||||||
|
.Setup(s => s.GetService(typeof(IUrlHelper)))
|
||||||
|
.Returns(new Mock<IUrlHelper>().Object);
|
||||||
|
serviceProvider
|
||||||
|
.Setup(s => s.GetService(typeof(IViewComponentHelper)))
|
||||||
|
.Returns(new Mock<IViewComponentHelper>().Object);
|
||||||
|
|
||||||
|
httpContext
|
||||||
|
.Setup(o => o.RequestServices)
|
||||||
|
.Returns(serviceProvider.Object);
|
||||||
|
|
||||||
|
var actionContext = new ActionContext(httpContext.Object,
|
||||||
|
new RouteData() { Values = routeDictionary },
|
||||||
|
new ActionDescriptor());
|
||||||
|
|
||||||
|
var viewContext = new ViewContext(actionContext, view.Object, viewData, new StringWriter());
|
||||||
|
|
||||||
|
var htmlHelper = new HtmlHelper(
|
||||||
|
viewEngine.Object,
|
||||||
|
provider,
|
||||||
|
new Mock<IUrlHelper>().Object,
|
||||||
|
GetAntiForgeryInstance(),
|
||||||
|
new Mock<IActionBindingContextProvider>().Object);
|
||||||
|
htmlHelper.Contextualize(viewContext);
|
||||||
|
|
||||||
|
return htmlHelper;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static AntiForgery GetAntiForgeryInstance()
|
||||||
|
{
|
||||||
|
var claimExtractor = new Mock<IClaimUidExtractor>();
|
||||||
|
var dataProtectionProvider = new Mock<IDataProtectionProvider>();
|
||||||
|
var additionalDataProvider = new Mock<IAntiForgeryAdditionalDataProvider>();
|
||||||
|
var optionsAccessor = new Mock<IOptionsAccessor<MvcOptions>>();
|
||||||
|
optionsAccessor.SetupGet(o => o.Options).Returns(new MvcOptions());
|
||||||
|
return new AntiForgery(claimExtractor.Object,
|
||||||
|
dataProtectionProvider.Object,
|
||||||
|
additionalDataProvider.Object,
|
||||||
|
optionsAccessor.Object);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string FormatOutput(ModelMetadata metadata)
|
||||||
|
{
|
||||||
|
return string.Format(CultureInfo.InvariantCulture,
|
||||||
|
"Model = {0}, ModelType = {1}, PropertyName = {2}, SimpleDisplayText = {3}",
|
||||||
|
metadata.Model ?? "(null)",
|
||||||
|
metadata.ModelType == null ? "(null)" : metadata.ModelType.FullName,
|
||||||
|
metadata.PropertyName ?? "(null)",
|
||||||
|
metadata.SimpleDisplayText ?? "(null)");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue