Jo Shields a575963da9 Imported Upstream version 3.6.0
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
2014-08-13 10:39:27 +01:00

177 lines
7.9 KiB
C#

// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
using System;
using System.Collections;
using System.IO;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using Moq;
namespace Microsoft.Web.UnitTestUtil
{
public static class MvcHelper
{
public const string AppPathModifier = "/$(SESSION)";
public static HtmlHelper<object> GetHtmlHelper()
{
HttpContextBase httpcontext = GetHttpContext("/app/", null, null);
RouteCollection rt = new RouteCollection();
rt.Add(new Route("{controller}/{action}/{id}", null) { Defaults = new RouteValueDictionary(new { id = "defaultid" }) });
rt.Add("namedroute", new Route("named/{controller}/{action}/{id}", null) { Defaults = new RouteValueDictionary(new { id = "defaultid" }) });
RouteData rd = new RouteData();
rd.Values.Add("controller", "home");
rd.Values.Add("action", "oldaction");
ViewDataDictionary vdd = new ViewDataDictionary();
ViewContext viewContext = new ViewContext()
{
HttpContext = httpcontext,
RouteData = rd,
ViewData = vdd
};
Mock<IViewDataContainer> mockVdc = new Mock<IViewDataContainer>();
mockVdc.Setup(vdc => vdc.ViewData).Returns(vdd);
HtmlHelper<object> htmlHelper = new HtmlHelper<object>(viewContext, mockVdc.Object, rt);
return htmlHelper;
}
public static HtmlHelper GetHtmlHelper(string protocol, int port)
{
HttpContextBase httpcontext = GetHttpContext("/app/", null, null, protocol, port);
RouteCollection rt = new RouteCollection();
rt.Add(new Route("{controller}/{action}/{id}", null) { Defaults = new RouteValueDictionary(new { id = "defaultid" }) });
rt.Add("namedroute", new Route("named/{controller}/{action}/{id}", null) { Defaults = new RouteValueDictionary(new { id = "defaultid" }) });
RouteData rd = new RouteData();
rd.Values.Add("controller", "home");
rd.Values.Add("action", "oldaction");
ViewDataDictionary vdd = new ViewDataDictionary();
Mock<ViewContext> mockViewContext = new Mock<ViewContext>();
mockViewContext.Setup(c => c.HttpContext).Returns(httpcontext);
mockViewContext.Setup(c => c.RouteData).Returns(rd);
mockViewContext.Setup(c => c.ViewData).Returns(vdd);
Mock<IViewDataContainer> mockVdc = new Mock<IViewDataContainer>();
mockVdc.Setup(vdc => vdc.ViewData).Returns(vdd);
HtmlHelper htmlHelper = new HtmlHelper(mockViewContext.Object, mockVdc.Object, rt);
return htmlHelper;
}
public static HtmlHelper GetHtmlHelper(ViewDataDictionary viewData)
{
Mock<ViewContext> mockViewContext = new Mock<ViewContext>() { CallBase = true };
mockViewContext.Setup(c => c.ViewData).Returns(viewData);
mockViewContext.Setup(c => c.HttpContext.Items).Returns(new Hashtable());
IViewDataContainer container = GetViewDataContainer(viewData);
return new HtmlHelper(mockViewContext.Object, container);
}
public static HtmlHelper<TModel> GetHtmlHelper<TModel>(ViewDataDictionary<TModel> viewData)
{
Mock<ViewContext> mockViewContext = new Mock<ViewContext>() { CallBase = true };
mockViewContext.Setup(c => c.ViewData).Returns(viewData);
mockViewContext.Setup(c => c.HttpContext.Items).Returns(new Hashtable());
IViewDataContainer container = GetViewDataContainer(viewData);
return new HtmlHelper<TModel>(mockViewContext.Object, container);
}
public static HtmlHelper GetHtmlHelperWithPath(ViewDataDictionary viewData)
{
return GetHtmlHelperWithPath(viewData, "/");
}
public static HtmlHelper GetHtmlHelperWithPath(ViewDataDictionary viewData, string appPath)
{
ViewContext viewContext = GetViewContextWithPath(appPath, viewData);
Mock<IViewDataContainer> mockContainer = new Mock<IViewDataContainer>();
mockContainer.Setup(c => c.ViewData).Returns(viewData);
IViewDataContainer container = mockContainer.Object;
return new HtmlHelper(viewContext, container, new RouteCollection());
}
public static HtmlHelper<TModel> GetHtmlHelperWithPath<TModel>(ViewDataDictionary<TModel> viewData, string appPath)
{
ViewContext viewContext = GetViewContextWithPath(appPath, viewData);
Mock<IViewDataContainer> mockContainer = new Mock<IViewDataContainer>();
mockContainer.Setup(c => c.ViewData).Returns(viewData);
IViewDataContainer container = mockContainer.Object;
return new HtmlHelper<TModel>(viewContext, container, new RouteCollection());
}
public static HtmlHelper<TModel> GetHtmlHelperWithPath<TModel>(ViewDataDictionary<TModel> viewData)
{
return GetHtmlHelperWithPath(viewData, "/");
}
public static HttpContextBase GetHttpContext(string appPath, string requestPath, string httpMethod, string protocol, int port)
{
Mock<HttpContextBase> mockHttpContext = new Mock<HttpContextBase>();
if (!String.IsNullOrEmpty(appPath))
{
mockHttpContext.Setup(o => o.Request.ApplicationPath).Returns(appPath);
}
if (!String.IsNullOrEmpty(requestPath))
{
mockHttpContext.Setup(o => o.Request.AppRelativeCurrentExecutionFilePath).Returns(requestPath);
}
Uri uri;
if (port >= 0)
{
uri = new Uri(protocol + "://localhost" + ":" + Convert.ToString(port));
}
else
{
uri = new Uri(protocol + "://localhost");
}
mockHttpContext.Setup(o => o.Request.Url).Returns(uri);
mockHttpContext.Setup(o => o.Request.PathInfo).Returns(String.Empty);
if (!String.IsNullOrEmpty(httpMethod))
{
mockHttpContext.Setup(o => o.Request.HttpMethod).Returns(httpMethod);
}
mockHttpContext.Setup(o => o.Session).Returns((HttpSessionStateBase)null);
mockHttpContext.Setup(o => o.Response.ApplyAppPathModifier(It.IsAny<string>())).Returns<string>(r => AppPathModifier + r);
mockHttpContext.Setup(o => o.Items).Returns(new Hashtable());
return mockHttpContext.Object;
}
public static HttpContextBase GetHttpContext(string appPath, string requestPath, string httpMethod)
{
return GetHttpContext(appPath, requestPath, httpMethod, Uri.UriSchemeHttp.ToString(), -1);
}
public static ViewContext GetViewContextWithPath(string appPath, ViewDataDictionary viewData)
{
HttpContextBase httpContext = GetHttpContext(appPath, "/request", "GET");
Mock<ViewContext> mockViewContext = new Mock<ViewContext>() { DefaultValue = DefaultValue.Mock };
mockViewContext.Setup(c => c.HttpContext).Returns(httpContext);
mockViewContext.Setup(c => c.ViewData).Returns(viewData);
mockViewContext.Setup(c => c.Writer).Returns(new StringWriter());
return mockViewContext.Object;
}
public static ViewContext GetViewContextWithPath(ViewDataDictionary viewData)
{
return GetViewContextWithPath("/", viewData);
}
public static IViewDataContainer GetViewDataContainer(ViewDataDictionary viewData)
{
Mock<IViewDataContainer> mockContainer = new Mock<IViewDataContainer>();
mockContainer.Setup(c => c.ViewData).Returns(viewData);
return mockContainer.Object;
}
}
}