//-----------------------------
        // Here's the interface methods
        //-----------------------------

        /// <inheritdoc />
        public virtual IEnumerable <string> GetViewFolders(ControllerContext controllerContext)
        {
            string area       = HandlebarsViewEngine.ExtractAreaName(controllerContext);
            string controller = HandlebarsViewEngine.ExtractControllerName(controllerContext);

            string viewsfoldername               = ViewsFolderName;
            string sharedviewsfoldername         = SharedViewsFolderName;
            bool   allowcontrollerlessviewfolder = AllowControllerlessViewFolder;

            if (!string.IsNullOrEmpty(area))
            {
                string areasfoldername = AreasFolderName;

                yield return("~/" + areasfoldername + "/" + area + "/" + viewsfoldername + "/" + controller + "/");                                 // "~/Areas/areaname/Views/controllername/"

                if (!string.IsNullOrEmpty(sharedviewsfoldername))
                {
                    yield return("~/" + areasfoldername + "/" + area + "/" + viewsfoldername + "/" + sharedviewsfoldername + "/");                      // "~/Areas/areaname/Views/_Shared/"
                }
                if (allowcontrollerlessviewfolder)
                {
                    yield return("~/" + areasfoldername + "/" + area + "/" + viewsfoldername + "/");                                                    // "~/Areas/areaname/Views/"
                }
            }
            yield return("~/" + viewsfoldername + "/" + controller + "/");                                                                      // "~/Views/controllername/"

            if (!string.IsNullOrEmpty(sharedviewsfoldername))
            {
                yield return("~/" + viewsfoldername + "/" + sharedviewsfoldername + "/");                                                           // "~/Views/_Shared/"
            }
            if (allowcontrollerlessviewfolder)
            {
                yield return("~/" + viewsfoldername + "/");                                                                                         // "~/Views/"
            }
        }
Beispiel #2
0
        public void HandlebarsConfiguration_is_usable()
        {
            var hbsve = new HandlebarsViewEngine();

            hbsve.HandlebarsConfiguration.Helpers.Add("link_to", (writer, context, parameters) =>
            {
                string html = "<a href='" + context.url + "'>" + context.text + "</a>";
                writer.WriteSafeString(html);
            });
        }
Beispiel #3
0
            public void Registering_helper_doesnt_pollute_global_Handlebars()
            {
                var hbsve = new HandlebarsViewEngine();

                hbsve.RegisterHelper("name", (writer, context, args) =>
                {
                    writer.Write("Rendered by helper in HandlebarsViewEngine");
                });

                // compile with global Handlebars
                var func = Handlebars.Compile("Name: {{name}}");

                string output = func(new {});

                Assert.Equal("Name: ", output);
            }
            public void RenderSection_doesnt_throw_for_undefined_section_when_not_required()
            {
                var hbsve = new HandlebarsViewEngine();

                hbsve.RegisterSectionsHelpers();
                var handlebars = Handlebars.Create(hbsve.HandlebarsConfiguration);

                var view   = new CompiledView(handlebars.Compile("Body not rendered."), null, null);
                var layout = new CompiledView(handlebars.Compile("Name: {{rendersection \"name\" required=false}}."), null, null);

                var controllerContext = new ControllerContext();
                var hbsview           = new HandlebarsView(controllerContext, view, new[] { layout });

                var html = GetHtmlFromView(hbsview);

                Assert.Equal("Name: .", html);
            }
            public void Sidebar_not_defined_renders_default_content()
            {
                var hbsve = new HandlebarsViewEngine();

                hbsve.RegisterSectionsHelpers();
                var handlebars = Handlebars.Create(hbsve.HandlebarsConfiguration);

                var view   = new CompiledView(handlebars.Compile("No section here."), null, null);
                var layout = new CompiledView(handlebars.Compile(source), null, null);

                var controllerContext = new ControllerContext();
                var hbsview           = new HandlebarsView(controllerContext, view, new[] { layout });

                var html = GetHtmlFromView(hbsview);

                Assert.Equal("<p>Default sidebar content...</p>", html);
            }
            public void Sidebar_defined_renders_content_and_chrome()
            {
                var hbsve = new HandlebarsViewEngine();

                hbsve.RegisterSectionsHelpers();
                var handlebars = Handlebars.Create(hbsve.HandlebarsConfiguration);

                var view   = new CompiledView(handlebars.Compile("{{#definesection \"sidebar\"}}Sidebar{{/definesection}}"), null, null);
                var layout = new CompiledView(handlebars.Compile(source), null, null);

                var controllerContext = new ControllerContext();
                var hbsview           = new HandlebarsView(controllerContext, view, new[] { layout });

                var html = GetHtmlFromView(hbsview);

                Assert.Equal("<div id=\"sidebar\">Sidebar</div>", html);
            }
            public void DefineSection_can_append()
            {
                var hbsve = new HandlebarsViewEngine();

                hbsve.RegisterSectionsHelpers();
                var handlebars = Handlebars.Create(hbsve.HandlebarsConfiguration);

                var view    = new CompiledView(handlebars.Compile("{{#definesection \"name\"}}From view.{{/definesection}}"), null, null);
                var layout1 = new CompiledView(handlebars.Compile("{{#definesection \"name\" mode=\"append\"}}Appended.{{/definesection}}"), null, null);
                var layout2 = new CompiledView(handlebars.Compile("{{rendersection \"name\"}}"), null, null);

                var controllerContext = new ControllerContext();
                var hbsview           = new HandlebarsView(controllerContext, view, new[] { layout1, layout2 });

                var html = GetHtmlFromView(hbsview);

                Assert.Equal("From view.Appended.", html);
            }
Beispiel #8
0
            public void Partials_are_scoped_to_controller()
            {
                var vpp = new VPP(
                    new VPP.Dir("Views",
                                new VPP.Dir("Blog",
                                            new VPP.Dir("_Partials",
                                                        new VPP.File("person.hbs", "Blog's partial")
                                                        )
                                            ),
                                new VPP.Dir("_Partials",
                                            new VPP.File("person.hbs", "Global partial")
                                            ),
                                new VPP.Dir("_Shared",
                                            new VPP.File("index.hbs", "Hello, {{>person}}!")
                                            )
                                )
                    );
                var hbsve = new HandlebarsViewEngine();

                hbsve.VirtualPathProvider = vpp;

                var httpContext = new Mock <HttpContextBase>();
                var controller  = new Mock <ControllerBase>();
                var routeData   = new RouteData();

                routeData.Values.Add("controller", "Blog");
                var controllerContext = new ControllerContext(httpContext.Object, routeData, controller.Object);

                var viewengineResult = hbsve.FindView(controllerContext, viewName: "index", masterName: null, useCache: false);
                var hbsview          = viewengineResult.View;

                string actual = GetHtmlFromView(hbsview, new {});

                Assert.Equal("Hello, Blog's partial!", actual);

                // Redo the test, now for the HomeController
                routeData.Values["controller"] = "Home";
                controllerContext = new ControllerContext(httpContext.Object, routeData, controller.Object);
                viewengineResult  = hbsve.FindView(controllerContext, viewName: "index", masterName: null, useCache: false);
                hbsview           = viewengineResult.View;
                actual            = GetHtmlFromView(hbsview, new {});
                Assert.Equal("Hello, Global partial!", actual);
            }
Beispiel #9
0
        private void ConfigureAsp()
        {
            var jsonFormatter   = new JsonMediaTypeFormatter();
            var viewModelMapper = Resolve <IViewModelMapper>();

            JsonSettings = jsonFormatter.SerializerSettings;

            JsonSettings.NullValueHandling     = NullValueHandling.Ignore;
            JsonSettings.MissingMemberHandling = MissingMemberHandling.Ignore;

            JsonSettings.Converters
            .Add(new ViewModelSerialization(viewModelMapper, MetadataRegistry));

            ViewEngine = new HandlebarsViewEngine(Resolve <ICacheProvider>());

            _aspNetConfigurationManager.Configure(
                RootResolver,
                ViewEngine,
                jsonFormatter);
        }
Beispiel #10
0
        public void Handlebars_1_9_doesnt_throw_when_compiling_mustache_as_part_of_string()
        {
            var vpp = new VPP(
                new VPP.Dir("Views",
                            new VPP.Dir("Home",
                                        new VPP.File("index.hbs", "Pi is about {{formatvalue pi '{0:N}'}}")
                                        )
                            )
                );
            var hbsve = new HandlebarsViewEngine();

            hbsve.VirtualPathProvider = vpp;

            hbsve.RegisterHelper("formatvalue", (writer, context, args) =>
            {
                object val              = args[0];
                string format           = args[1] as string;
                ViewContext viewContext = HandlebarsView.GetViewContext(context);
                HtmlHelper htmlHelper   = new HtmlHelper(viewContext, viewContext.View as HandlebarsView);
                string formatted        = htmlHelper.FormatValue(val, format);
                writer.Write(formatted);
            });

            var httpContext = new Mock <HttpContextBase>();
            var controller  = new Mock <ControllerBase>();
            var routeData   = new RouteData();

            routeData.Values.Add("controller", "Home");
            var controllerContext = new ControllerContext(httpContext.Object, routeData, controller.Object);

            var viewengineResult = hbsve.FindView(controllerContext, viewName: "index", masterName: null, useCache: false);
            var hbsview          = viewengineResult.View;

            string actual = GetHtmlFromView(hbsview, new
            {
                pi = 3.14159265358979
            });

            Assert.Equal("Pi is about 3.14", actual);
        }
Beispiel #11
0
            public void BasicPartialWithStringParametersAndImplicitContext()
            {
                // The same test as the same named in https://github.com/rexm/Handlebars.Net/blob/master/source/Handlebars.Test/PartialTests.cs,
                // only using a VirtualPathProvider instead of source strings.

                var vpp = new VPP(
                    new VPP.Dir("Views",
                                new VPP.Dir("_Partials",
                                            new VPP.File("person.hbs", "{{firstName}} {{lastName}}")
                                            ),
                                new VPP.Dir("_Shared",
                                            new VPP.File("index.hbs", "Hello, {{>person lastName='Smith'}}!")
                                            )
                                )
                    );
                var hbsve = new HandlebarsViewEngine();

                hbsve.VirtualPathProvider = vpp;

                var data = new
                {
                    firstName = "Marc",
                    lastName  = "Jones"
                };

                var httpContext = new Mock <HttpContextBase>();
                var controller  = new Mock <ControllerBase>();
                var routeData   = new RouteData();

                routeData.Values.Add("controller", "Blog");
                var controllerContext = new ControllerContext(httpContext.Object, routeData, controller.Object);

                var viewengineResult = hbsve.FindView(controllerContext, viewName: "index", masterName: null, useCache: false);
                var hbsview          = viewengineResult.View;

                string actual = GetHtmlFromView(hbsview, data);

                Assert.Equal("Hello, Marc Smith!", actual);
            }
        /// <inheritdoc />
        public virtual IEnumerable <string> GetPartialsFolders(ControllerContext controllerContext)
        {
            string area       = HandlebarsViewEngine.ExtractAreaName(controllerContext);
            string controller = HandlebarsViewEngine.ExtractControllerName(controllerContext);

            string viewsfoldername       = ViewsFolderName;
            string sharedviewsfoldername = SharedViewsFolderName;
            string partialsfoldername    = PartialsFolderName;

            if (!string.IsNullOrEmpty(area))
            {
                string areasfoldername = AreasFolderName;

                yield return("~/" + areasfoldername + "/" + area + "/" + viewsfoldername + "/" + controller + "/" + partialsfoldername + "/");                                  // "~/Areas/areaname/Views/controllername/_Partials/"

                yield return("~/" + areasfoldername + "/" + area + "/" + viewsfoldername + "/" + partialsfoldername + "/");                                                     // "~/Areas/areaname/Views/_Partials/"
            }

            yield return("~/" + viewsfoldername + "/" + controller + "/" + partialsfoldername + "/");                                                                       // "~/Views/controllername/_Partials/"

            yield return("~/" + viewsfoldername + "/" + partialsfoldername + "/");                                                                                          // "~/Views/_Partials/"
        }
Beispiel #13
0
        public CachingTests()
        {
            // Constructor - run before each test

            VPP vpp = new VPP(
                new VPP.Dir("Views",
                            new VPP.Dir("_Layouts",
                                        new VPP.File("default.hbs", "Body: {{{body}}}")
                                        ),
                            new VPP.Dir("_Shared"),
                            new VPP.Dir("Home",
                                        new VPP.File("Index.hbs", "{{!< default}} {{val}}")
                                        )
                            )
                );

            var dumbcache = new Dictionary <string, object>();

            _mockCache = new Mock <ICache>();

            _mockCache.Setup <object>(c => c.Get(It.IsAny <string>()))
            .Returns((string key) => dumbcache.ContainsKey(key) ? dumbcache[key] : null);

            _mockCache.Setup(c => c.Insert(It.IsAny <string>(), It.IsAny <object>(), It.IsAny <CacheDependency>()))
            .Callback((string key, object val, CacheDependency cd) =>
                      dumbcache[key] = val);
            _mockCache.Setup(c => c.Insert(It.IsAny <string>(), It.IsAny <object>(), It.IsAny <CacheDependency>(), It.IsAny <DateTime>(), It.IsAny <TimeSpan>()))
            .Callback((string key, object val, CacheDependency cd, DateTime dt, TimeSpan ts) =>
                      dumbcache[key] = val);
            _mockCache.Setup(c => c.Insert(It.IsAny <string>(), It.IsAny <object>(), It.IsAny <CacheDependency>(), It.IsAny <DateTime>(), It.IsAny <TimeSpan>(), It.IsAny <CacheItemUpdateCallback>()))
            .Callback((string key, object val, CacheDependency cd, DateTime dt, TimeSpan ts, CacheItemUpdateCallback cb) =>
                      dumbcache[key] = val);

            _hbve = new HandlebarsViewEngine();
            _hbve.VirtualPathProvider = vpp;
            _hbve.Cache = _mockCache.Object;
        }