Esempio n. 1
0
        public void LayoutPathPropertyReturnsEmptyStringIfLayoutNotSpecified() {
            // Act
            RazorView view = new RazorView(new ControllerContext(), "view path", null, false, Enumerable.Empty<string>());

            // Assert
            Assert.AreEqual(String.Empty, view.LayoutPath);
        }
Esempio n. 2
0
        public void LayoutPathPropertyReturnsEmptyStringIfLayoutNotSpecified()
        {
            // Act
            RazorView view = new RazorView(new ControllerContext(), "view path", null, false, Enumerable.Empty <string>());

            // Assert
            Assert.AreEqual(String.Empty, view.LayoutPath);
        }
Esempio n. 3
0
        protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath)
        {
            var view = new RazorView(controllerContext, viewPath, layoutPath: masterPath, runViewStartPages: true, viewStartFileExtensions: FileExtensions, viewPageActivator: ViewPageActivator)
            {
            };

            return(view);
        }
Esempio n. 4
0
 protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath)
 {
     var view = new RazorView(controllerContext, viewPath,
                              layoutPath: masterPath, runViewStartPages: true, viewStartFileExtensions: FileExtensions, viewPageActivator: ViewPageActivator)
     {
         DisplayModeProvider = DisplayModeProvider
     };
     return view;
 }
        public async Task <string> RenderToStringAsync <T>(string pageName, string pageLayout, T model) where T : PageModel
        {
            var actionContext =
                new ActionContext(
                    _httpContext.HttpContext,
                    _httpContext.HttpContext.GetRouteData(),
                    _actionContext.ActionContext.ActionDescriptor
                    );

            using (var sw = new StringWriter())
            {
                var result = _razorViewEngine.FindPage(actionContext, pageName);

                if (result.Page == null)
                {
                    throw new ArgumentNullException($"The page {pageName} cannot be found.");
                }

                var page = ((Page)result.Page);
                page.Layout = pageLayout;

                var view = new RazorView(_razorViewEngine,
                                         _activator,
                                         new List <IRazorPage>(),
                                         page,
                                         HtmlEncoder.Default,
                                         new DiagnosticListener("ViewRenderService"));

                var viewContext = new ViewContext(
                    actionContext,
                    view,
                    new ViewDataDictionary <T>(new EmptyModelMetadataProvider(), new ModelStateDictionary())
                {
                    Model = model
                },
                    new TempDataDictionary(
                        _httpContext.HttpContext,
                        _tempDataProvider
                        ),
                    sw,
                    new HtmlHelperOptions()
                    );

                page.PageContext = new Microsoft.AspNetCore.Mvc.RazorPages.PageContext
                {
                    ViewData = viewContext.ViewData
                };

                page.ViewContext = viewContext;

                _activator.Activate(page, viewContext);

                await page.ExecuteAsync();

                return(sw.ToString());
            }
        }
Esempio n. 6
0
        public static string RenderViewToString(string controlPath, ViewDataDictionary data)
        {
            var renderer = Dependency.TryResolve <ITemplateRenderer>();

            if (renderer != null)
            {
                return(renderer.Render(controlPath, data));
            }

            StringBuilder sb = new StringBuilder();

            if (controlPath != null && controlPath.EndsWith(".cshtml", System.StringComparison.InvariantCultureIgnoreCase))
            {
                data = data ?? new ViewDataDictionary(new Dictionary <string, object>());
                var httpBase = new HttpContextWrapper(HttpContext.Current);

                var controller = new FakeController();
                var route      = new RouteData();
                route.Values.Add("controller", "something");
                var controllerContext = new ControllerContext(httpBase, route, controller);

                var actualPath = controlPath;
                if (actualPath.StartsWith("~/"))
                {
                    actualPath = Path.Combine(HostingEnvironment.ApplicationPhysicalPath,
                                              actualPath.Substring(2).Replace("/", "\\"));
                }

                if (!File.Exists(actualPath))
                {
                    throw new ArgumentOutOfRangeException("controlPath", String.Format("controlPath: {0}", actualPath));
                }

                var view = new RazorView(controllerContext, controlPath, null, false, null, null);
                using (StringWriter sw = new StringWriter(sb))
                {
                    var viewContext = new ViewContext(controllerContext, view, data, new TempDataDictionary(), sw);
                    view.Render(viewContext, sw);
                }
            }
            else
            {
                ViewPage vp = new ViewPage {
                    ViewData = data
                };
                Control control = vp.LoadControl(controlPath);
                vp.Controls.Add(control);
                using (StringWriter sw = new StringWriter(sb))
                    using (HtmlTextWriter tw = new HtmlTextWriter(sw))
                    {
                        vp.RenderControl(tw);
                    }
            }

            return(sb.ToString());
        }
Esempio n. 7
0
        public void LayoutPathProperty() {
            //Arrange
            ControllerContext controllerContext = new ControllerContext();

            // Act
            RazorView view = new RazorView(new ControllerContext(), "view path", "master path", false, Enumerable.Empty<string>());

            // Assert
            Assert.AreEqual("master path", view.LayoutPath);
        }
Esempio n. 8
0
        public static string GetRazorViewAsString(object model, string filePath, ControllerContext controller)
        {
            StringWriter       stringWriter      = new StringWriter();
            HttpContextWrapper context           = new HttpContextWrapper(HttpContext.Current);
            ControllerContext  controllerContext = GetControllerContext();
            RazorView          razor             = new RazorView(controllerContext, filePath, null, false, null);

            razor.Render(new ViewContext(controllerContext, razor, new ViewDataDictionary(model), new TempDataDictionary(), stringWriter), stringWriter);
            return(stringWriter.ToString());
        }
        private RazorView CreateView(IRazorPage page)
        {
            var view = new RazorView(_engine,
                                     _activator,
                                     new List <IRazorPage>(),
                                     page,
                                     HtmlEncoder.Default,
                                     new DiagnosticListener("RazorPageRenderingService"));

            return(view);
        }
Esempio n. 10
0
        public static async Task <string> RenderViewAsync(this PageModel pageModel, string pageName)
        {
            var actionContext = new ActionContext(
                pageModel.HttpContext,
                pageModel.RouteData,
                pageModel.PageContext.ActionDescriptor
                );

            using (var sw = new StringWriter())
            {
                IRazorViewEngine    _razorViewEngine = pageModel.HttpContext.RequestServices.GetService(typeof(IRazorViewEngine)) as IRazorViewEngine;
                IRazorPageActivator _activator       = pageModel.HttpContext.RequestServices.GetService(typeof(IRazorPageActivator)) as IRazorPageActivator;

                var result = _razorViewEngine.FindPage(actionContext, pageName);

                if (result.Page == null)
                {
                    throw new ArgumentNullException($"The page {pageName} cannot be found.");
                }

                var page = result.Page;

                var view = new RazorView(_razorViewEngine,
                                         _activator,
                                         new List <IRazorPage>(),
                                         page,
                                         HtmlEncoder.Default,
                                         new DiagnosticListener("ViewRenderService"));


                var viewContext = new ViewContext(
                    actionContext,
                    view,
                    pageModel.ViewData,
                    pageModel.TempData,
                    sw,
                    new HtmlHelperOptions()
                    );


                var pageNormal = ((Page)result.Page);

                pageNormal.PageContext = pageModel.PageContext;

                pageNormal.ViewContext = viewContext;


                _activator.Activate(pageNormal, viewContext);

                await page.ExecuteAsync();

                return(sw.ToString());
            }
        }
Esempio n. 11
0
 public FakeRazorView(ControllerContext controllerContext,
                      string viewPath,
                      string layoutPath,
                      bool runViewStartPages,
                      IEnumerable <string> viewStartFileExtensions,
                      IViewPageActivator viewPageActivator)
 {
     razorView = new RazorView(controllerContext, viewPath, layoutPath, runViewStartPages,
                               viewStartFileExtensions, viewPageActivator);
     Init();
 }
        public static string RenderPartialToString(string viewName)
        {
            var st                = new StringWriter();
            var context           = new HttpContextWrapper(HttpContext.Current);
            var routeData         = new RouteData();
            var controllerContext = new ControllerContext(new RequestContext(context, routeData), new FakeController());
            var razor             = new RazorView(controllerContext, viewName, null, false, null);

            razor.Render(new ViewContext(controllerContext, razor, new ViewDataDictionary(new { }), new TempDataDictionary(), st), st);
            return(st.ToString());
        }
        private string Render(ControllerContext controllerContext, RazorView view, object model)
        {
            //http://forums.asp.net/t/1888849.aspx?Render+PartialView+without+ControllerContext
            //https://weblog.west-wind.com/posts/2012/May/30/Rendering-ASPNET-MVC-Views-to-String

            using (var writer = new StringWriter())
            {
                view.Render(new ViewContext(controllerContext, view, new ViewDataDictionary(model), new TempDataDictionary(), writer), writer);
                return(writer.ToString());
            }
        }
Esempio n. 14
0
        public static string GetRazorViewAsString(object model, string filePath)
        {
            var st                = new StringWriter();
            var context           = new HttpContextWrapper(HttpContext.Current ?? new HttpContext(new HttpRequest(null, "http://tempuri.org", null), new HttpResponse(null)));
            var routeData         = new RouteData();
            var controllerContext = new ControllerContext(new RequestContext(context, routeData), new FakeController());
            var razor             = new RazorView(controllerContext, filePath, null, false, null);

            razor.Render(new ViewContext(controllerContext, razor, new ViewDataDictionary(model), new TempDataDictionary(), st), st);
            return(st.ToString());
        }
Esempio n. 15
0
        public static string RazorViewRender(object model, string filePath)
        {
            var sw                = new StringWriter();
            var context           = new HttpContextWrapper(HttpContext.Current);
            var routeData         = new RouteData();
            var controllerContext = new ControllerContext(new RequestContext(context, routeData), new HomeController());
            var razor             = new RazorView(controllerContext, filePath, null, false, null);

            razor.Render(new ViewContext(controllerContext, razor, new ViewDataDictionary(model), new TempDataDictionary(), sw), sw);
            return(sw.ToString());
        }
        public Task ExecuteAsync(PageContext pageContext, PageViewResult result)
        {
            if (result.Model != null)
            {
                result.Page.PageContext.ViewData.Model = result.Model;
            }

            var view = new RazorView(_razorViewEngine, _razorPageActivator, new IRazorPage[0], result.Page, _htmlEncoder);

            return(ExecuteAsync(pageContext, view, result.ContentType, result.StatusCode));
        }
        public void LayoutPathProperty()
        {
            //Arrange
            ControllerContext controllerContext = new ControllerContext();

            // Act
            RazorView view = new RazorView(new ControllerContext(), "view path", "master path", false, Enumerable.Empty <string>());

            // Assert
            Assert.Equal("master path", view.LayoutPath);
        }
Esempio n. 18
0
        private static string GetVirtualPath(HtmlHelper htmlhelper)
        {
            RazorView view = htmlhelper.ViewContext.View as RazorView;

            if (view != null)
            {
                return(view.ViewPath);
            }

            return(null);
        }
Esempio n. 19
0
 /// <summary>
 /// Convert a partial view to a string
 /// </summary>
 /// <param name="viewName">Absolute path (started by ~)</param>
 /// <param name="model"></param>
 /// <returns></returns>
 public static string RenderView(string viewName, object model)
 {
     using (var st = new StringWriter())
     {
         var context           = new HttpContextWrapper(HttpContext.Current);
         var routeData         = new RouteData();
         var controllerContext = new ControllerContext(new RequestContext(context, routeData), new EmptyController());
         var razor             = new RazorView(controllerContext, viewName, null, false, null);
         razor.Render(new ViewContext(controllerContext, razor, new ViewDataDictionary(model), new TempDataDictionary(), st), st);
         return(st.ToString());
     }
 }
Esempio n. 20
0
        public string SerializeControl(string controlPath, ViewDataDictionary viewData)
        {
            var control = new RazorView(ControllerContext, controlPath, null, false, null);

            using (var stringWriter = new StringWriter())
                using (var writer = new HtmlTextWriter(stringWriter))
                {
                    control.Render(new ViewContext(ControllerContext, control, viewData, TempData, writer), writer);
                    string value = writer.InnerWriter.ToString();
                    return(value);
                }
        }
Esempio n. 21
0
 public static string RenderViewToString2 <T>(this Controller controller, string viewPath, T model)
 {
     using (var writer = new StringWriter())
     {
         var view    = new RazorView(controller.ControllerContext, viewPath, null, false, null);
         var vdd     = new ViewDataDictionary <T>(model);
         var viewCxt = new ViewContext(controller.ControllerContext, view, vdd,
                                       new TempDataDictionary(), writer);
         viewCxt.View.Render(viewCxt, writer);
         return(writer.ToString());
     }
 }
Esempio n. 22
0
        public void SendHtmlEmail(string email, string subject, string body, RazorView model)
        {
            var         smtpClient  = GetSmtpClient();
            MailMessage mailMessage = new MailMessage();

            mailMessage.From = new MailAddress("*****@*****.**");
            mailMessage.To.Add(email);
            mailMessage.Subject = subject;
            mailMessage.Body    = body;
            smtpClient.Send(mailMessage);
            smtpClient.Dispose();
        }
Esempio n. 23
0
        public void CreateView_PassesViewPageActivator()
        {
            // Arrange
            Mock <IViewPageActivator> viewPageActivator = new Mock <IViewPageActivator>();
            TestableRazorViewEngine   viewEngine        = new TestableRazorViewEngine(viewPageActivator.Object);

            // Act
            RazorView result = (RazorView)viewEngine.CreateView("partial path", "master path");

            // Assert
            Assert.Equal(viewEngine.ViewPageActivator, result.ViewPageActivator);
        }
 public static HtmlHelper Html(Controller controller)
 {
     if (htmlHelper == null)
     {
         var vdd = new ViewDataDictionary();
         var tdd = new TempDataDictionary();
         var controllerContext = controller.ControllerContext;
         var view = new RazorView(controllerContext, "/", "/", false, null);
         htmlHelper = new HtmlHelper(new ViewContext(controllerContext, view, vdd, tdd, new StringWriter()),
                                     new ViewDataContainer(vdd), RouteTable.Routes);
     }
     return(htmlHelper);
 }
Esempio n. 25
0
        public static string GetRazorViewAsString(Controller controller, object model, string viewPath)
        {
            var st                = new StringWriter();
            var context           = new HttpContextWrapper(HttpContext.Current);
            var routeData         = new RouteData();
            var controllerContext = new ControllerContext(new RequestContext(context, routeData), new ImageController());

            var razor = new RazorView(controllerContext, "~/Frontend-Assembly/Telerik.Sitefinity.Frontend/Mvc{0}".Arrange(viewPath), null, false, null);

            razor.Render(new ViewContext(controllerContext, razor, new ViewDataDictionary(model), new TempDataDictionary(), st), st);

            return(st.ToString());
        }
Esempio n. 26
0
        public static string Render(object ViewModel, ControllerContext controller, string path)
        {
            var sb = new StringWriter();
            ViewDataDictionary ViewData = new ViewDataDictionary();
            var tempData = new TempDataDictionary();

            ViewData.Model = ViewModel;
            var razor       = new RazorView(controller, path, null, false, null);
            var viewContext = new ViewContext(controller, razor, ViewData, tempData, sb);

            razor.Render(viewContext, sb);
            return(sb.ToString());
        }
Esempio n. 27
0
        public void CreatePartialView_ReturnsRazorView()
        {
            // Arrange
            TestableRazorViewEngine viewEngine = new TestableRazorViewEngine();

            // Act
            RazorView result = (RazorView)viewEngine.CreatePartialView("partial path");

            // Assert
            Assert.Equal("partial path", result.ViewPath);
            Assert.Equal(String.Empty, result.LayoutPath);
            Assert.False(result.RunViewStartPages);
        }
Esempio n. 28
0
        public static string RenderView(object model, string filePath)
        {
            using (var oWriter = new StringWriter())
            {
                var context           = new HttpContextWrapper(HttpContext.Current);
                var routeData         = new RouteData();
                var controllerContext = new ControllerContext(new RequestContext(context, routeData), new EmptyController());
                var razor             = new RazorView(controllerContext, filePath, null, false, null);
                razor.Render(new ViewContext(controllerContext, razor, new ViewDataDictionary(model), new TempDataDictionary(), oWriter), oWriter);

                return(oWriter.GetStringBuilder().ToString());
            }
        }
Esempio n. 29
0
        protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath)
        {
            bool debugOn = controllerContext.Controller.ControllerContext.HttpContext.Request.QueryString["debugModeOn"] != null;

            if (debugOn)
            {
                RazorView view = (RazorView)base.CreateView(controllerContext, viewPath, masterPath);
                return(new DebugInfoRazorView(controllerContext, view.ViewPath, view.LayoutPath, view.RunViewStartPages, view.ViewStartFileExtensions));
            }
            else
            {
                return(base.CreateView(controllerContext, viewPath, masterPath));
            }
        }
Esempio n. 30
0
        public void RenderWithNullWriterThrows() {
            // Arrange
            RazorView view = new RazorView(new ControllerContext(), "~/viewPath", null, false, Enumerable.Empty<string>());
            Mock<ViewContext> viewContextMock = new Mock<ViewContext>();

            MockBuildManager buildManager = new MockBuildManager("~/viewPath", typeof(object));
            view.BuildManager = buildManager;

            // Act & Assert
            ExceptionHelper.ExpectArgumentNullException(
                () => view.Render(viewContextMock.Object, null),
                "writer"
            );
        }
Esempio n. 31
0
        protected override IView CreatePartialView(ControllerContext controllerContext, string partialPath)
        {
            bool debugOn = controllerContext.Controller.ViewData["debugModeOn"] != null;

            if (debugOn)
            {
                RazorView view = (RazorView)base.CreatePartialView(controllerContext, partialPath);
                return(new DebugInfoRazorView(controllerContext, view.ViewPath, view.LayoutPath, view.RunViewStartPages, view.ViewStartFileExtensions));
            }
            else
            {
                return(base.CreatePartialView(controllerContext, partialPath));
            }
        }
Esempio n. 32
0
        public override void OnBackPressed()
        {
            var model = new HomeModel()
            {
                View = homeView.requestedView
            };
            var template = new RazorView()
            {
                Model = model
            };
            var page = template.GenerateString();

            webView.LoadDataWithBaseURL("file:///android_asset/", page, "text/html", "UTF-8", null);
        }
        public void ShowRazorView()
        {
            var model = new Model1()
            {
                Text = "Text from model"
            };
            var template = new RazorView()
            {
                Model = model
            };
            var page = template.GenerateString();

            webView.LoadHtmlString(page);
        }
Esempio n. 34
0
        protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath)
        {
            string layoutPath                   = masterPath;
            bool   runViewStartPage             = true;
            IEnumerable <string> fileExtensions = base.FileExtensions;
            //if (viewPath.StartsWith("~/Views"))
            //{
            //    layoutPath = "~/Templates/" + ThemeName + "/Shared/";
            //    runViewStartPage = false;
            //}
            var razorView = new RazorView(controllerContext, viewPath, layoutPath, runViewStartPage, fileExtensions,
                                          _viewPageActivator);

            return(razorView);
        }
Esempio n. 35
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad ();

            // Intercept URL loading to handle native calls from browser
            WebView.ShouldStartLoad += HandleShouldStartLoad;

            // Render the view from the type generated from RazorView.cshtml
            var model = new Model1 { Text = "Text goes here" };
            var template = new RazorView { Model = model };
            var page = template.GenerateString ();

            // Load the rendered HTML into the view with a base URL
            // that points to the root of the bundled Resources folder
            WebView.LoadHtmlString (page, NSBundle.MainBundle.BundleUrl);

            // Perform any additional setup after loading the view, typically from a nib.
        }
Esempio n. 36
0
        public void RenderWithViewPageAndLayoutPageRendersView() {
            // Arrange
            StubWebViewPage viewPage = new StubWebViewPage();
            ViewContext context = new Mock<ViewContext>().Object;
            MockBuildManager buildManager = new MockBuildManager("~/viewPath", typeof(object));
            Mock<IViewPageActivator> activator = new Mock<IViewPageActivator>(MockBehavior.Strict);
            ControllerContext controllerContext = new ControllerContext();
            activator.Setup(l => l.Create(controllerContext, typeof(object))).Returns(viewPage);
            RazorView view = new RazorView(controllerContext, "~/viewPath", "~/layoutPath", false, Enumerable.Empty<string>(), activator.Object);
            view.BuildManager = buildManager;

            // Act
            view.Render(context, new Mock<TextWriter>().Object);

            // Assert
            Assert.IsNull(viewPage.Layout);
            Assert.AreEqual("~/layoutPath", viewPage.OverridenLayoutPath);
            Assert.AreSame(context, viewPage.ViewContext);
            Assert.AreEqual("~/viewPath", viewPage.VirtualPath);
        }
Esempio n. 37
0
        public void RenderWithUnsupportedTypeThrows()
        {
            // Arrange
            ViewContext context = new Mock<ViewContext>().Object;
            MockBuildManager buildManagerMock = new MockBuildManager("view path", typeof(object));
            RazorView view = new RazorView(new ControllerContext(), "view path", null, false, Enumerable.Empty<string>());
            view.BuildManager = buildManagerMock;

            // Act & Assert
            Assert.Throws<InvalidOperationException>(
                () => view.Render(context, new Mock<TextWriter>().Object),
                "The view at 'view path' must derive from WebViewPage, or WebViewPage<TModel>."
                );
        }
Esempio n. 38
0
        public void RenderWithViewPageAndNoStartPageLookupRendersView()
        {
            // Arrange
            StubWebViewPage viewPage = new StubWebViewPage();
            Mock<ViewContext> viewContextMock = new Mock<ViewContext>();
            viewContextMock.Setup(vc => vc.HttpContext.Items).Returns(new Dictionary<object, object>());
            viewContextMock.Setup(vc => vc.HttpContext.Request.IsLocal).Returns(false);
            MockBuildManager buildManager = new MockBuildManager("~/viewPath", typeof(object));
            Mock<IViewPageActivator> activator = new Mock<IViewPageActivator>(MockBehavior.Strict);
            ControllerContext controllerContext = new ControllerContext();
            activator.Setup(l => l.Create(controllerContext, typeof(object))).Returns(viewPage);
            RazorView view = new RazorView(controllerContext, "~/viewPath", null, false, Enumerable.Empty<string>(), activator.Object);
            view.StartPageLookup = (WebPageRenderingBase p, string n, IEnumerable<string> e) =>
            {
                Assert.True(false, "ViewStart page lookup should not be called");
                return null;
            };
            view.BuildManager = buildManager;

            // Act
            view.Render(viewContextMock.Object, new Mock<TextWriter>().Object);

            // Assert
            Assert.Null(viewPage.Layout);
            Assert.Equal("", viewPage.OverridenLayoutPath);
            Assert.Same(viewContextMock.Object, viewPage.ViewContext);
            Assert.Equal("~/viewPath", viewPage.VirtualPath);
        }
Esempio n. 39
0
        public void RenderWithViewPageAndStartPageLookupExecutesStartPage()
        {
            // Arrange
            StubWebViewPage viewPage = new StubWebViewPage();
            Mock<ViewContext> viewContextMock = new Mock<ViewContext>();
            viewContextMock.Setup(vc => vc.HttpContext.Items).Returns(new Dictionary<object, object>());
            MockBuildManager buildManager = new MockBuildManager("~/viewPath", typeof(object));
            Mock<IViewPageActivator> activator = new Mock<IViewPageActivator>(MockBehavior.Strict);
            ControllerContext controllerContext = new ControllerContext();
            activator.Setup(l => l.Create(controllerContext, typeof(object))).Returns(viewPage);
            RazorView view = new RazorView(controllerContext, "~/viewPath", null, true, new[] { "cshtml" }, activator.Object);
            Mock<ViewStartPage> startPage = new Mock<ViewStartPage>();
            startPage.Setup(sp => sp.ExecutePageHierarchy()).Verifiable();
            view.StartPageLookup = (WebPageRenderingBase page, string fileName, IEnumerable<string> extensions) =>
            {
                Assert.Equal(viewPage, page);
                Assert.Equal("_ViewStart", fileName);
                Assert.Equal(new[] { "cshtml" }, extensions.ToArray());
                return startPage.Object;
            };
            view.BuildManager = buildManager;

            // Act
            view.Render(viewContextMock.Object, new Mock<TextWriter>().Object);

            // Assert
            startPage.Verify(sp => sp.ExecutePageHierarchy(), Times.Once());
        }
Esempio n. 40
0
        public void RenderWithViewPageAndLayoutPageRendersView()
        {
            // Arrange
            StubWebViewPage viewPage = new StubWebViewPage();
            Mock<ViewContext> viewContext = new Mock<ViewContext>();
            Mock<HttpContextBase> httpContext = new Mock<HttpContextBase>();
            Mock<HttpRequestBase> httpRequest = new Mock<HttpRequestBase>();

            httpRequest.SetupGet(r => r.IsLocal).Returns(false);
            httpRequest.SetupGet(r => r.Browser.IsMobileDevice).Returns(false);
            httpRequest.SetupGet(r => r.Cookies).Returns(new HttpCookieCollection());

            httpContext.SetupGet(c => c.Request).Returns(httpRequest.Object);
            httpContext.SetupGet(c => c.Response.Cookies).Returns(new HttpCookieCollection());
            httpContext.SetupGet(c => c.Items).Returns(new Hashtable());

            viewContext.SetupGet(v => v.HttpContext).Returns(httpContext.Object);

            MockBuildManager buildManager = new MockBuildManager("~/viewPath", typeof(object));
            Mock<IViewPageActivator> activator = new Mock<IViewPageActivator>(MockBehavior.Strict);

            Mock<WebPage> layoutPage = new Mock<WebPage> { CallBase = true };
            layoutPage.Setup(c => c.Execute()).Callback(() => layoutPage.Object.RenderBody());
            Mock<IVirtualPathFactory> virtualPathFactory = new Mock<IVirtualPathFactory>(MockBehavior.Strict);
            virtualPathFactory.Setup(f => f.Exists("~/layoutPath")).Returns(true);
            virtualPathFactory.Setup(f => f.CreateInstance("~/layoutPath")).Returns(layoutPage.Object);
            ControllerContext controllerContext = new ControllerContext();
            activator.Setup(l => l.Create(controllerContext, typeof(object))).Returns(viewPage);
            RazorView view = new RazorView(controllerContext, "~/viewPath", "~/layoutPath", false, Enumerable.Empty<string>(), activator.Object);
            view.BuildManager = buildManager;
            view.VirtualPathFactory = virtualPathFactory.Object;
            view.DisplayModeProvider = DisplayModeProvider.Instance;

            // Act
            view.Render(viewContext.Object, TextWriter.Null);

            // Assert
            Assert.Equal("~/layoutPath", viewPage.Layout);
            Assert.Equal("~/layoutPath", viewPage.OverridenLayoutPath);
            Assert.Same(viewContext.Object, viewPage.ViewContext);
            Assert.Equal("~/viewPath", viewPage.VirtualPath);
        }