//----------------------------- // 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/" } }
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); }); }
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); }
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); }
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); }
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); }
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/" }
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; }