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()
|
||||
{
|
||||
// Arrange
|
||||
var html = DefaultTemplatesUtilities.GetHtmlHelper(null);
|
||||
var html = DefaultTemplatesUtilities.GetHtmlHelper();
|
||||
var metadata =
|
||||
new EmptyModelMetadataProvider()
|
||||
.GetMetadataForType(null, typeof(DefaultTemplatesUtilities.ObjectTemplateModel));
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ namespace Microsoft.AspNet.Mvc.Core.Test
|
|||
public void ObjectTemplateDisplaysNullDisplayTextWithNullModelAndTemplateDepthGreaterThanOne()
|
||||
{
|
||||
// Arrange
|
||||
var html = DefaultTemplatesUtilities.GetHtmlHelper(null);
|
||||
var html = DefaultTemplatesUtilities.GetHtmlHelper();
|
||||
var metadata =
|
||||
new EmptyModelMetadataProvider()
|
||||
.GetMetadataForType(null, typeof(DefaultTemplatesUtilities.ObjectTemplateModel));
|
||||
|
|
@ -83,11 +83,15 @@ namespace Microsoft.AspNet.Mvc.Core.Test
|
|||
{
|
||||
// Arrange
|
||||
var expected =
|
||||
@"<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>
|
||||
<div class=""editor-label""><label for=""Property1.Property3"">Property3</label></div>
|
||||
<div class=""editor-field""> </div>
|
||||
";
|
||||
@"<div class=""editor-label""><label for=""Property1"">Property1</label></div>" +
|
||||
Environment.NewLine +
|
||||
@"<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=""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 viewEngine = new Mock<IViewEngine>();
|
||||
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 Moq;
|
||||
|
||||
namespace Microsoft.AspNet.Mvc.Core.Test
|
||||
namespace Microsoft.AspNet.Mvc.Core
|
||||
{
|
||||
public class DefaultTemplatesUtilities
|
||||
{
|
||||
|
|
@ -43,14 +43,38 @@ namespace Microsoft.AspNet.Mvc.Core.Test
|
|||
public string Property3 { get; set; }
|
||||
}
|
||||
|
||||
public static HtmlHelper GetHtmlHelper(object model,
|
||||
IViewEngine viewEngine = null)
|
||||
public static HtmlHelper<ObjectTemplateModel> GetHtmlHelper()
|
||||
{
|
||||
var provider = new DataAnnotationsModelMetadataProvider();
|
||||
var viewData = new ViewDataDictionary(provider);
|
||||
return GetHtmlHelper<ObjectTemplateModel>(null);
|
||||
}
|
||||
|
||||
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.ModelMetadata =
|
||||
provider.GetMetadataForType(() => model, typeof(ObjectTemplateModel));
|
||||
|
||||
var httpContext = new Mock<HttpContext>();
|
||||
httpContext
|
||||
|
|
@ -60,8 +84,6 @@ namespace Microsoft.AspNet.Mvc.Core.Test
|
|||
.Setup(o => o.Items)
|
||||
.Returns(new Dictionary<object, object>());
|
||||
|
||||
viewEngine = viewEngine ?? CreateViewEngine();
|
||||
|
||||
var actionContext = new ActionContext(httpContext.Object,
|
||||
new RouteData(),
|
||||
new ActionDescriptor());
|
||||
|
|
@ -95,18 +117,23 @@ namespace Microsoft.AspNet.Mvc.Core.Test
|
|||
|
||||
var viewContext = new ViewContext(actionContext, Mock.Of<IView>(), viewData, new StringWriter());
|
||||
|
||||
var htmlHelper = new HtmlHelper(
|
||||
viewEngine,
|
||||
provider,
|
||||
urlHelper,
|
||||
GetAntiForgeryInstance(),
|
||||
actionBindingContextProvider.Object);
|
||||
htmlHelper.Contextualize(viewContext);
|
||||
|
||||
// TemplateRenderer will Contextualize this transient service.
|
||||
serviceProvider
|
||||
.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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue