public void SetUp()
		{
			TestHelper.SetupLog4NetForTests();
			Umbraco.Core.Configuration.UmbracoSettings.UseLegacyXmlSchema = false;
			_httpContextFactory = new FakeHttpContextFactory("~/Home");
			//ensure the StateHelper is using our custom context
			StateHelper.HttpContext = _httpContextFactory.HttpContext;
			
			_umbracoContext = new UmbracoContext(_httpContextFactory.HttpContext, 
				new ApplicationContext(), 
				new DefaultRoutesCache(false));

			_umbracoContext.GetXmlDelegate = () =>
				{
					var xDoc = new XmlDocument();

					//create a custom xml structure to return

					xDoc.LoadXml(GetXml());
					//return the custom x doc
					return xDoc;
				};

			_publishedContentStore = new DefaultPublishedContentStore();			
		}
		public void SetUp()
		{
			TestHelper.SetupLog4NetForTests();

            //create the app context 
            ApplicationContext.Current = new ApplicationContext(false);

			_httpContextFactory = new FakeHttpContextFactory("~/Home");
			//ensure the StateHelper is using our custom context
			StateHelper.HttpContext = _httpContextFactory.HttpContext;

			UmbracoSettings.UseLegacyXmlSchema = false;
            var cache = new PublishedContentCache
                {
                    GetXmlDelegate = (context, preview) =>
                        {
                            var doc = new XmlDocument();
                            doc.LoadXml(GetXml());
                            return doc;
                        }
                };

		    _umbracoContext = new UmbracoContext(
                _httpContextFactory.HttpContext,
                ApplicationContext.Current,
                new PublishedCaches(cache, new PublishedMediaCache()));

		    _cache = _umbracoContext.ContentCache;
		}
		/// <summary>
		/// Checks if the URL will be ignored in the RouteTable
		/// </summary>
		/// <param name="url"></param>
		/// <returns></returns>
		/// <remarks>
		/// MVCContrib has a similar one but is faulty:
		///  http://mvccontrib.codeplex.com/workitem/7173
		/// </remarks>
		public static bool ShouldIgnoreRoute(this string url)
		{
			var http = new FakeHttpContextFactory(url);
			var r = RouteTable.Routes.GetRouteData(http.HttpContext);
			if (r == null) return false;
			return (r.RouteHandler is StopRoutingHandler);
		}
        public void Ensure_All_Ancestor_ViewData_Is_Merged_Without_Data_Loss()
        {
            var http = new FakeHttpContextFactory("http://localhost");

            //setup an heirarchy
            var rootViewCtx = new ViewContext { Controller = new MyController(), RequestContext = http.RequestContext, ViewData = new ViewDataDictionary() };
            var parentViewCtx = new ViewContext { Controller = new MyController(), RequestContext = http.RequestContext, RouteData = new RouteData(), ViewData = new ViewDataDictionary() };
            parentViewCtx.RouteData.DataTokens.Add("ParentActionViewContext", rootViewCtx);
            var controllerCtx = new ControllerContext(http.RequestContext, new MyController()) { RouteData = new RouteData() };
            controllerCtx.RouteData.DataTokens.Add("ParentActionViewContext", parentViewCtx);

            //set up the view data with overlapping keys
            controllerCtx.Controller.ViewData["Test1"] = "Test1";
            controllerCtx.Controller.ViewData["Test2"] = "Test2";
            controllerCtx.Controller.ViewData["Test3"] = "Test3";
            parentViewCtx.ViewData["Test2"] = "Test4";
            parentViewCtx.ViewData["Test3"] = "Test5";
            parentViewCtx.ViewData["Test4"] = "Test6";
            rootViewCtx.ViewData["Test3"] = "Test7";
            rootViewCtx.ViewData["Test4"] = "Test8";
            rootViewCtx.ViewData["Test5"] = "Test9";

            var filter = new ResultExecutingContext(controllerCtx, new ContentResult()) { RouteData = controllerCtx.RouteData };
            var att = new MergeParentContextViewDataAttribute();

            Assert.IsTrue(filter.IsChildAction);
            att.OnResultExecuting(filter);

            Assert.AreEqual(5, controllerCtx.Controller.ViewData.Count);
            Assert.AreEqual("Test1", controllerCtx.Controller.ViewData["Test1"]);
            Assert.AreEqual("Test2", controllerCtx.Controller.ViewData["Test2"]);
            Assert.AreEqual("Test3", controllerCtx.Controller.ViewData["Test3"]);
            Assert.AreEqual("Test6", controllerCtx.Controller.ViewData["Test4"]);
            Assert.AreEqual("Test9", controllerCtx.Controller.ViewData["Test5"]);
        }
        public override void Initialize()
        {
            base.Initialize();

            _httpContextFactory = new FakeHttpContextFactory("~/Home");
            //ensure the StateHelper is using our custom context
            StateHelper.HttpContext = _httpContextFactory.HttpContext;

		    var settings = SettingsForTests.GetMockSettings();
		    var contentMock = Mock.Get(settings.Content);
            contentMock.Setup(x => x.UseLegacyXmlSchema).Returns(false);
		    SettingsForTests.ConfigureSettings(settings);
            _xml = new XmlDocument();
            _xml.LoadXml(GetXml());
            var cache = new PublishedContentCache
                {
                    GetXmlDelegate = (context, preview) => _xml
                };

		    _umbracoContext = new UmbracoContext(
                _httpContextFactory.HttpContext,
                ApplicationContext.Current,
                new PublishedCaches(cache, new PublishedMediaCache()),
                new WebSecurity(_httpContextFactory.HttpContext, ApplicationContext.Current));

		    _cache = _umbracoContext.ContentCache;
        }
		public void Ensure_Request_Routable(string url, bool assert)
		{
			var httpContextFactory = new FakeHttpContextFactory(url);
			var httpContext = httpContextFactory.HttpContext;
			var routingContext = GetRoutingContext(url);
			var umbracoContext = routingContext.UmbracoContext;
			
			var result = _module.EnsureUmbracoRoutablePage(umbracoContext, httpContext);

			Assert.AreEqual(assert, result);
		}
        public override void Initialize()
        {
            base.Initialize();

            _httpContextFactory = new FakeHttpContextFactory("~/Home");
            //ensure the StateHelper is using our custom context
            StateHelper.HttpContext = _httpContextFactory.HttpContext;

			UmbracoSettings.UseLegacyXmlSchema = false;
            _xml = new XmlDocument();
            _xml.LoadXml(GetXml());
            var cache = new PublishedContentCache
                {
                    GetXmlDelegate = (context, preview) => _xml
                };

		    _umbracoContext = new UmbracoContext(
                _httpContextFactory.HttpContext,
                ApplicationContext.Current,
                new PublishedCaches(cache, new PublishedMediaCache()));

		    _cache = _umbracoContext.ContentCache;
        }
		public void Is_Reserved_By_Route(string url, bool shouldMatch)
		{
			//reset the app config, we only want to test routes not the hard coded paths
		    Umbraco.Core.Configuration.GlobalSettings.ReservedPaths = "";
		    Umbraco.Core.Configuration.GlobalSettings.ReservedUrls = "";

			var routes = new RouteCollection();

			routes.MapRoute(
				"Umbraco_default",
				"Umbraco/RenderMvc/{action}/{id}",
				new { controller = "RenderMvc", action = "Index", id = UrlParameter.Optional });
			routes.MapRoute(
				"WebAPI",
				"api/{controller}/{id}",
				new { controller = "WebApiTestController", action = "Index", id = UrlParameter.Optional });


			var context = new FakeHttpContextFactory(url);
		

			Assert.AreEqual(
				shouldMatch,
				Umbraco.Core.Configuration.GlobalSettings.IsReservedPathOrUrl(url, context.HttpContext, routes));
		}
		/// <summary>
		/// Return the route data for the url based on a mocked context
		/// </summary>
		/// <param name="routes"></param>
		/// <param name="requestUrl"></param>
		/// <returns></returns>
		public static RouteData GetDataForRoute(this RouteCollection routes, string requestUrl)
		{
			var context = new FakeHttpContextFactory(requestUrl);
			return routes.GetDataForRoute(context.HttpContext);
		}
 public override void Setup()
 {
     base.Setup();
     _ctx = new FakeHttpContextFactory("http://localhost/test");
     _provider = new HttpRequestCacheProvider(() => _ctx.HttpContext);
 }