Enable us to unit test `@Html...For()` methods
- add more `DefaultTemplatesUtilities.GetHtmlHelper()` overloads, all returning a strongly-typed helper - also correct that method to ensure template helpers each get a unique `IHtmlHelper` instance
This commit is contained in:
parent
88cd886a5b
commit
1a4d59ae14
|
|
@ -39,7 +39,7 @@ namespace Microsoft.AspNet.Mvc.Core.Test
|
||||||
public void ObjectTemplateDisplaysNullDisplayTextWhenObjectIsNull()
|
public void ObjectTemplateDisplaysNullDisplayTextWhenObjectIsNull()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var html = DefaultTemplatesUtilities.GetHtmlHelper(null);
|
var html = DefaultTemplatesUtilities.GetHtmlHelper();
|
||||||
var metadata =
|
var metadata =
|
||||||
new EmptyModelMetadataProvider()
|
new EmptyModelMetadataProvider()
|
||||||
.GetMetadataForType(null, typeof(DefaultTemplatesUtilities.ObjectTemplateModel));
|
.GetMetadataForType(null, typeof(DefaultTemplatesUtilities.ObjectTemplateModel));
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ namespace Microsoft.AspNet.Mvc.Core.Test
|
||||||
public void ObjectTemplateDisplaysNullDisplayTextWithNullModelAndTemplateDepthGreaterThanOne()
|
public void ObjectTemplateDisplaysNullDisplayTextWithNullModelAndTemplateDepthGreaterThanOne()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var html = DefaultTemplatesUtilities.GetHtmlHelper(null);
|
var html = DefaultTemplatesUtilities.GetHtmlHelper();
|
||||||
var metadata =
|
var metadata =
|
||||||
new EmptyModelMetadataProvider()
|
new EmptyModelMetadataProvider()
|
||||||
.GetMetadataForType(null, typeof(DefaultTemplatesUtilities.ObjectTemplateModel));
|
.GetMetadataForType(null, typeof(DefaultTemplatesUtilities.ObjectTemplateModel));
|
||||||
|
|
@ -83,11 +83,15 @@ namespace Microsoft.AspNet.Mvc.Core.Test
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var expected =
|
var expected =
|
||||||
@"<div class=""editor-label""><label for=""Property1"">Property1</label></div>
|
@"<div class=""editor-label""><label for=""Property1"">Property1</label></div>" +
|
||||||
<div class=""editor-field""><input class=""text-box single-line"" id=""Property1"" name=""Property1"" type=""text"" value="""" /> </div>
|
Environment.NewLine +
|
||||||
<div class=""editor-label""><label for=""Property1.Property3"">Property3</label></div>
|
@"<div class=""editor-field""><input class=""text-box single-line"" id=""Property1"" name=""Property1"" type=""text"" value="""" /> </div>" +
|
||||||
<div class=""editor-field""> </div>
|
Environment.NewLine +
|
||||||
";
|
@"<div class=""editor-label""><label for=""Property3"">Property3</label></div>" +
|
||||||
|
Environment.NewLine +
|
||||||
|
@"<div class=""editor-field""><input class=""text-box single-line"" id=""Property3"" name=""Property3"" type=""text"" value="""" /> </div>" +
|
||||||
|
Environment.NewLine;
|
||||||
|
|
||||||
var model = new DefaultTemplatesUtilities.ObjectWithScaffoldColumn();
|
var model = new DefaultTemplatesUtilities.ObjectWithScaffoldColumn();
|
||||||
var viewEngine = new Mock<IViewEngine>();
|
var viewEngine = new Mock<IViewEngine>();
|
||||||
viewEngine.Setup(v => v.FindPartialView(It.IsAny<IDictionary<string, object>>(), It.IsAny<string>()))
|
viewEngine.Setup(v => v.FindPartialView(It.IsAny<IDictionary<string, object>>(), It.IsAny<string>()))
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ using Microsoft.AspNet.Security.DataProtection;
|
||||||
using Microsoft.Framework.OptionsModel;
|
using Microsoft.Framework.OptionsModel;
|
||||||
using Moq;
|
using Moq;
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Mvc.Core.Test
|
namespace Microsoft.AspNet.Mvc.Core
|
||||||
{
|
{
|
||||||
public class DefaultTemplatesUtilities
|
public class DefaultTemplatesUtilities
|
||||||
{
|
{
|
||||||
|
|
@ -43,14 +43,38 @@ namespace Microsoft.AspNet.Mvc.Core.Test
|
||||||
public string Property3 { get; set; }
|
public string Property3 { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public static HtmlHelper GetHtmlHelper(object model,
|
public static HtmlHelper<ObjectTemplateModel> GetHtmlHelper()
|
||||||
IViewEngine viewEngine = null)
|
|
||||||
{
|
{
|
||||||
var provider = new DataAnnotationsModelMetadataProvider();
|
return GetHtmlHelper<ObjectTemplateModel>(null);
|
||||||
var viewData = new ViewDataDictionary(provider);
|
}
|
||||||
|
|
||||||
|
public static HtmlHelper<TModel> GetHtmlHelper<TModel>(TModel model)
|
||||||
|
{
|
||||||
|
return GetHtmlHelper(model, CreateViewEngine());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HtmlHelper<ObjectTemplateModel> GetHtmlHelper(IModelMetadataProvider provider)
|
||||||
|
{
|
||||||
|
return GetHtmlHelper<ObjectTemplateModel>(null, provider);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HtmlHelper<TModel> GetHtmlHelper<TModel>(TModel model, IModelMetadataProvider provider)
|
||||||
|
{
|
||||||
|
return GetHtmlHelper(model, CreateViewEngine(), provider);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HtmlHelper<TModel> GetHtmlHelper<TModel>(TModel model, IViewEngine viewEngine)
|
||||||
|
{
|
||||||
|
return GetHtmlHelper(model, viewEngine, new DataAnnotationsModelMetadataProvider());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HtmlHelper<TModel> GetHtmlHelper<TModel>(
|
||||||
|
TModel model,
|
||||||
|
IViewEngine viewEngine,
|
||||||
|
IModelMetadataProvider provider)
|
||||||
|
{
|
||||||
|
var viewData = new ViewDataDictionary<TModel>(provider);
|
||||||
viewData.Model = model;
|
viewData.Model = model;
|
||||||
viewData.ModelMetadata =
|
|
||||||
provider.GetMetadataForType(() => model, typeof(ObjectTemplateModel));
|
|
||||||
|
|
||||||
var httpContext = new Mock<HttpContext>();
|
var httpContext = new Mock<HttpContext>();
|
||||||
httpContext
|
httpContext
|
||||||
|
|
@ -60,8 +84,6 @@ namespace Microsoft.AspNet.Mvc.Core.Test
|
||||||
.Setup(o => o.Items)
|
.Setup(o => o.Items)
|
||||||
.Returns(new Dictionary<object, object>());
|
.Returns(new Dictionary<object, object>());
|
||||||
|
|
||||||
viewEngine = viewEngine ?? CreateViewEngine();
|
|
||||||
|
|
||||||
var actionContext = new ActionContext(httpContext.Object,
|
var actionContext = new ActionContext(httpContext.Object,
|
||||||
new RouteData(),
|
new RouteData(),
|
||||||
new ActionDescriptor());
|
new ActionDescriptor());
|
||||||
|
|
@ -95,18 +117,23 @@ namespace Microsoft.AspNet.Mvc.Core.Test
|
||||||
|
|
||||||
var viewContext = new ViewContext(actionContext, Mock.Of<IView>(), viewData, new StringWriter());
|
var viewContext = new ViewContext(actionContext, Mock.Of<IView>(), viewData, new StringWriter());
|
||||||
|
|
||||||
var htmlHelper = new HtmlHelper(
|
// TemplateRenderer will Contextualize this transient service.
|
||||||
viewEngine,
|
|
||||||
provider,
|
|
||||||
urlHelper,
|
|
||||||
GetAntiForgeryInstance(),
|
|
||||||
actionBindingContextProvider.Object);
|
|
||||||
htmlHelper.Contextualize(viewContext);
|
|
||||||
|
|
||||||
serviceProvider
|
serviceProvider
|
||||||
.Setup(s => s.GetService(typeof(IHtmlHelper)))
|
.Setup(s => s.GetService(typeof(IHtmlHelper)))
|
||||||
.Returns(htmlHelper);
|
.Returns(() => new HtmlHelper(
|
||||||
|
viewEngine,
|
||||||
|
provider,
|
||||||
|
urlHelper,
|
||||||
|
GetAntiForgeryInstance(),
|
||||||
|
actionBindingContextProvider.Object));
|
||||||
|
|
||||||
|
var htmlHelper = new HtmlHelper<TModel>(
|
||||||
|
viewEngine,
|
||||||
|
provider,
|
||||||
|
urlHelper,
|
||||||
|
GetAntiForgeryInstance(),
|
||||||
|
actionBindingContextProvider.Object);
|
||||||
|
htmlHelper.Contextualize(viewContext);
|
||||||
|
|
||||||
return htmlHelper;
|
return htmlHelper;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue