public void VBWorksAsWell() { var config = @" <xipton.razor> <templates language='VB' defaultExtension='.vbhtml'/> </xipton.razor> ".Replace("'", "\""); var rm = new RazorMachine(config); // or... //var rm = new RazorMachine(language:new XiptonVBCodeLanguage(),defaultExtension:".vbhtml"); rm.RegisterTemplate("~/shared/_layout", @" BEGIN TEMPLATE _layout @RenderBody() END TEMPLATE _layout"); rm.RegisterTemplate("~/_viewStart", @" BEGIN INCLUDE @Code Layout = ""_layout"" ViewBag.Title = ""My Title"" End Code END INCLUDE"); rm.RegisterTemplate("~/vbTemplate", @" @ModelType Xipton.Razor.UnitTest.Person @Imports System.Collections.Concurrent VB template says: Hello @Model.FirstName @Model.LastName"); Console.WriteLine(rm.ExecuteUrl("/vbTemplate", new Person { FirstName = "Dick", LastName = "Tracy" })); }
public void TemplateCanBePreCompiled() { var rm = new RazorMachine(); rm.RegisterTemplate("/yep", "any content"); rm.EnsureViewCompiled("/yep"); }
public void SpacesArePreservedWithinAttributes() { var m = new RazorMachine(); var t = m.ExecuteContent("<Tag attribute=\"@Model.FirstName @Model.LastName\"></Tag>", new { FirstName = "John", LastName = "Smith" }); Assert.AreEqual("<Tag attribute=\"John Smith\"></Tag>", t.Result); }
public static void Initialise() { if (m_razorMachine == null) { m_razorMachine = new RazorMachine(htmlEncode: false); } }
public void LastSectionHolds() { var rm = new RazorMachine(); rm.RegisterTemplate("~/_ViewStart", @" @{ Layout=""_layout""; } @section footer{ Contact me on any crime at 666-666-666 } "); rm.RegisterTemplate("~/Shared/_layout", "Layout says: @RenderBody() @RenderSection(\"footer\")"); rm.RegisterTemplate("~/simpleTemplate", @" Hello @Model.FirstName @Model.LastName @section footer{ corrected: Contact @Model.FirstName on any crime at 777-777-777 }" ); var executedTemplate = rm.ExecuteUrl("~/simpleTemplate", new { FirstName = "Dick", LastName = "Tracy" }); Debug.WriteLine("Template source code: \r\n" + executedTemplate.GeneratedSourceCode); Debug.WriteLine("Layout source code: \r\n" + executedTemplate.Childs[0].GeneratedSourceCode); // layout is executed as a child of executedTemplate Debug.WriteLine(executedTemplate.Result); Assert.IsTrue(executedTemplate.Result.Trim().StartsWith("Layout says:")); Assert.IsTrue(executedTemplate.Result.Contains("corrected")); }
static ApiGenerator() { RazorHelper = new RazorMachine(); Assembly = typeof(ApiGenerator).Assembly; var directoryInfo = new DirectoryInfo(Directory.GetCurrentDirectory()); if (directoryInfo.Name == "CodeGeneration.LowLevelClient" && directoryInfo.Parent != null && directoryInfo.Parent.Name == "CodeGeneration") { // running as a dnx project NestFolder = @"..\..\..\src\Nest\"; EsNetFolder = @"..\..\..\src\Elasticsearch.Net\"; ViewFolder = @"Views\"; ApiEndpointsFolder = @"ApiEndpoints\"; } else { NestFolder = @"..\..\..\..\..\src\Nest\"; EsNetFolder = @"..\..\..\..\..\src\Elasticsearch.Net\"; ViewFolder = @"..\..\Views\"; ApiEndpointsFolder = @"..\..\ApiEndpoints\"; } }
public void Performance_Uncompiled_vs_Compiled() { var rm = new RazorMachine(includeGeneratedSourceCode: false); rm.ExecuteContent(Guid.NewGuid().ToString("N")); // to warm up the engine var list = new List <string>(); const int count = 50; for (var i = 0; i < count; i++) { // generate templates that display a guid value list.Add(Guid.NewGuid().ToString("N")); } var sw = new Stopwatch(); sw.Start(); for (var i = 0; i < count; i++) { rm.ExecuteContent(list[i]); } sw.Stop(); Console.WriteLine("Elapsed compile and run {0} times: {1} ms", count, sw.ElapsedMilliseconds); sw = new Stopwatch(); sw.Start(); for (var i = 0; i < count; i++) { rm.ExecuteContent(list[i]); } sw.Stop(); Console.WriteLine("Elapsed run again {0} times: {1} ms", count, sw.ElapsedMilliseconds == 0 ? "< 1" : sw.ElapsedMilliseconds.ToString()); }
private static RazorMachine CreateRazorMachineWithoutContentProviders(bool includeGeneratedSourceCode = false, string rootOperatorPath = null, bool htmlEncode = true) { var rm = new RazorMachine(includeGeneratedSourceCode: includeGeneratedSourceCode, htmlEncode: htmlEncode, rootOperatorPath: rootOperatorPath); rm.Context.TemplateFactory.ContentManager.ClearAllContentProviders(); return(rm); }
public string Parse <T>(string template, T model, bool isHtml = true) { var rm = new RazorMachine(htmlEncode: false); var razorTemplate = rm.ExecuteContent(template, model, null, true); return(razorTemplate.Result); }
public static void EnsureViewCompiled(this RazorMachine self, string path, bool throwException = true) { if (self == null) { throw new ArgumentNullException("self"); } self.Context.TemplateFactory.CreateTemplateInstance(path, throwException); }
public void ViewBagValueIsSet() { var engine = new RazorMachine() .RegisterTemplate("~/Test", "@{ViewBag.Foo = 1;} Hello World!"); var template = engine.ExecuteUrl("~/Test"); Debug.WriteLine(template.Result); // => prints: Hello World! Assert.AreEqual(1, template.ViewBag.Foo); }
public void TemplateCanBeExcecutedDirectlyByContent() { var rm = new RazorMachine(); var executedTemplate = rm.ExecuteContent("Hello @Model.FirstName @Model.LastName", new { FirstName = "Dick", LastName = "Tracy" }); Assert.AreEqual("Hello Dick Tracy", executedTemplate.Result); executedTemplate = rm.Execute("Hello @Model.FirstName @Model.LastName", new { FirstName = "Dick", LastName = "Tracy" }); Assert.AreEqual("Hello Dick Tracy", executedTemplate.Result); }
public void TemplateCanBeExcecutedIndirectlyByUrlAdOmittingDefaultExtension() { var rm = new RazorMachine(); rm.RegisterTemplate("~/simpleTemplate", "Hello @Model.FirstName @Model.LastName"); var executedTemplate = rm.ExecuteUrl("~/simpleTemplate", new { FirstName = "Dick", LastName = "Tracy" }); Assert.AreEqual("Hello Dick Tracy", executedTemplate.Result); }
public void ViewStartIsExecuted() { var rm = new RazorMachine(); rm.RegisterTemplate("~/_ViewStart", "@{ViewBag.ViewStartExecuted = true;}"); rm.RegisterTemplate("~/simpleTemplate", "Hello @Model.FirstName @Model.LastName"); var executedTemplate = rm.ExecuteUrl("~/simpleTemplate", new { FirstName = "Dick", LastName = "Tracy" }); Assert.AreEqual("Hello Dick Tracy", executedTemplate.Result.Trim()); Assert.AreEqual(true, executedTemplate.ViewBag.ViewStartExecuted); }
public static string GetTemplate(this RazorMachine razor, string templateName) { try { return(razor.GetRegisteredInMemoryTemplates()[templateName.ToLower()]); } catch (KeyNotFoundException) { throw new KeyNotFoundException("Could not find a template called " + templateName); } }
public void RenderPageWorks() { var rm = new RazorMachine(); rm.RegisterTemplate("~/someControl", "Hello @Model.Name"); rm.RegisterTemplate("~/somePage", "@RenderPage(\"someControl\",skipLayout:true)"); rm.RegisterTemplate("~/shared/someLayout", ">>@RenderBody()"); rm.RegisterTemplate("~/_viewStart", "@{Layout=\"someLayout\";}"); var t = rm.ExecuteUrl("/somePage", new { Name = "John" }); Assert.AreEqual(t.Result, ">>Hello John"); }
// ********************* Other examples ********************************************************************************* // public static void RunEmbeddedTemplate() { // this example only works if the embedded content provider has been configured. Here it is configured at app.config, includeGeneratedSourceCode is forced to true var rm = new RazorMachine(includeGeneratedSourceCode: true); // => default configuration from app.config is loaded var t = rm.ExecuteUrl("~/embeddedTemplate"); Console.WriteLine("Generated source code:"); Console.WriteLine(t.GeneratedSourceCode); Console.WriteLine("Generated output:"); Console.WriteLine(t); // => writes the embedded template's result //NOTE: since now all content providers (file content providers as well) are loaded the ~/ViewStart.cshtml from the ./Views folder is executed as well }
public static void AppendGeneratedRazorTemplate(string templateText, StringBuilder templateProlog, ref StringBuilder templateStringBuilder, object model) { StringBuilder templateStr = new StringBuilder(); templateStr.AppendLine(templateProlog.ToString()); templateStr.AppendLine(templateText); RazorMachine rm = new RazorMachine(); ITemplate template = rm.ExecuteContent(templateStr.ToString(), model); templateStringBuilder.Append(template.Result); }
public void LayoutIsAppliedImplicitlyByViewStart() { var rm = new RazorMachine(); rm.RegisterTemplate("~/_ViewStart", "@{/* _ViewStart*/ Layout=\"_layout\";}"); rm.RegisterTemplate("~/Shared/_layout", "Layout says: @RenderBody()"); rm.RegisterTemplate("~/simpleTemplate", "Hello @Model.FirstName @Model.LastName"); var executedTemplate = rm.ExecuteUrl("~/simpleTemplate", new { FirstName = "Dick", LastName = "Tracy" }); Debug.WriteLine("Template source code: \r\n" + executedTemplate.GeneratedSourceCode); Debug.WriteLine("Layout source code: \r\n" + executedTemplate.Childs[0].GeneratedSourceCode); // layout is executed as a child of executedTemplate Assert.AreEqual("Layout says: Hello Dick Tracy", executedTemplate.Result.Trim()); }
/// <summary> /// Initializes the provider. Already called by the 2 constructors. /// </summary> /// <param name="name"></param> /// <param name="configValue"></param> public override void Initialize(string name, NameValueCollection configValue) { QueueName = "UserForgotPassword"; base.Initialize(name, configValue); SmtpServer = configValue.GetStringValue("SmtpServer", ""); Port = configValue.GetInt32Value("Port", Port); SmtpUserName = configValue.GetStringValue("SmtpUserName", SmtpUserName); SmtpPassword = configValue.GetStringValue("SmtpPassword", SmtpPassword); FromAddress = configValue.GetStringValue("DefaultFromAddress", FromAddress); _razorMachine = new RazorMachine(); }
public string GetExecuted(string Template, Table md) { ITemplate template; try { RazorMachine rm = new RazorMachine(); template = rm.ExecuteContent(Template, md); } catch { throw; } return(template.Result); }
public void RelativePathNameIsResolved() { var rm = new RazorMachine(); rm.RegisterTemplate("/views/main/index", @"@RenderPage(""aaa/bbb"")"); rm.RegisterTemplate("/views/main/aaa/bbb", "this is: /views/main/aaa/bbb"); rm.RegisterTemplate("/views/shared/bbb", "this is /views/shared/bbb"); rm.RegisterTemplate("/views/shared/aaa/bbb", "this is /views/shared/aaa/bbb"); rm.RegisterTemplate("/shared/bbb", "this is /shared/bbb"); rm.RegisterTemplate("/shared/aaa/bbb", "this is /shared/aaa/bbb"); var t = rm.Execute("/views/main/index"); Debug.WriteLine(rm.Execute("/views/main/index")); Assert.IsTrue(t.Result.EndsWith("/views/main/aaa/bbb")); }
public Generator(string basePath) { var di = new DirectoryInfo(basePath); BasePath = di.FullName; markdown = new Markdown(); razor = new RazorMachine(htmlEncode: false); specialFolders = new Dictionary <string, string>(); specialFolders.Add(FOLDER_PAGES, null); specialFolders.Add(FOLDER_POSTS, null); specialFolders.Add(FOLDER_TEMPLATES, null); propertyConverters = new Dictionary <string, Func <string, object> >(); }
public void TemplateAccessorsWork() { var content = "any content"; var rm = new RazorMachine(); rm.RegisterTemplate("/yep", content); var template = rm.Execute("/yep"); Assert.AreEqual(content, template.Result.Trim()); var templates = rm.GetRegisteredInMemoryTemplates(); Assert.AreEqual(1, templates.Count); rm.RemoveTemplate("/yep"); templates = rm.GetRegisteredInMemoryTemplates(); Assert.AreEqual(0, templates.Count); }
public void LayoutIsApplied() { var rm = new RazorMachine(includeGeneratedSourceCode: true); rm.RegisterTemplate("~/Shared/_layout", "Layout says: @RenderBody()"); rm.RegisterTemplate("~/simpleTemplate", "@{Layout=\"_layout\";}Hello @Model.FirstName @Model.LastName"); var executedTemplate = rm.ExecuteUrl("~/simpleTemplate", new { FirstName = "Dick", LastName = "Tracy" }); Debug.WriteLine("Template source code: \r\n" + executedTemplate.GeneratedSourceCode); Debug.WriteLine("Layout source code: \r\n" + executedTemplate.Childs[0].GeneratedSourceCode); // because layout is executed as a child of executedTemplate Assert.AreEqual("Layout says: Hello Dick Tracy", executedTemplate.Result.Trim()); rm.RegisterTemplate("~/simpleTemplate", "@model dynamic\r\n@{Layout=\"_layout\";}Hello again @Model.FirstName @Model.LastName"); // "old" template type is removed from cache internally. Check to see what "@model dynamic" does with the generated source code. executedTemplate = rm.ExecuteUrl("~/simpleTemplate", new { FirstName = "Dick", LastName = "Tracy" }); Debug.WriteLine("Template source code: \r\n" + executedTemplate.GeneratedSourceCode); Assert.AreEqual("Layout says: Hello again Dick Tracy", executedTemplate.Result.Trim()); }
public void AttributeValuesAreBeingWrittenRaw() { var rm = new RazorMachine(); rm.RegisterTemplate("/raw", @" @{ var href = ""/someurl?par=10&par2=11""; } <html> <a href=""/someurl?par=10&par2=11"">href</a> must be equal to: <a href=""@href"">href</a> </html> "); var t = rm.Execute("/raw"); Assert.IsFalse(t.Result.Contains("&")); Debug.WriteLine(t); }
public void SectionWorks() { var engine = new RazorMachine() .RegisterTemplate("~/Main", @" @section s1{ This is section 1. } This is main content") .RegisterTemplate("~/Shared/_layout", "TOP\r\n@RenderBody()\r\n@if(IsSectionDefined(\"s1\")){ @RenderSection(\"s1\");}\r\nEND") .RegisterTemplate("~/_viewStart", "@{Layout=\"_layout\";}"); var t = engine.ExecuteUrl("/Main"); Assert.IsTrue(t.Result.Trim().StartsWith("TOP")); Assert.IsTrue(t.Result.TrimEnd().EndsWith("\r\nEND")); Assert.IsTrue(t.Result.Contains("\r\nThis is main content\r\n")); Debug.WriteLine(t.Result); }
public void RecursionErrorWorks() { var caught = false; try { var rm = new RazorMachine(); rm.RegisterTemplate("~/somePage", "Oops"); rm.RegisterTemplate("~/shared/_someLayout1", "@{Layout=\"_someLayout2\";} >>@RenderBody()"); rm.RegisterTemplate("~/shared/_someLayout2", "@{Layout=\"_someLayout1\";} >>@RenderBody()"); rm.RegisterTemplate("~/_viewStart", "@{Layout=\"_someLayout1\";}"); var t = rm.ExecuteUrl("/somePage"); } catch (TemplateTreeException ex) { Console.WriteLine(ex.Message); caught = true; } Assert.IsTrue(caught); }
public void Html5IsHandled() { var rm = new RazorMachine(); rm.RegisterTemplate("~/Test.cshtml", @" @{string myref=""/oops""; ViewBag.Ref=""/oops2"";} @{<input name=""foo""><p>A different tag</p>} @{<input name=""foo""/><p>A different tag</p>} @{<input name=""foo""></input><p>A different tag</p>} @* The following does not work for the void element input *@ @{<input2 name=""foo""><p>A different tag</p></input2><p>A different tag</p>} <a href=""/favicon.ico"">oops</a> <a href=""~/""/> <a href=""@ViewBag.Ref"">oops</a> "); var template = rm.ExecuteUrl("/Test"); Debug.WriteLine("Result:\r\n" + template.Result); }
public void NestedAnonymousTypesAreSupported() { var m = new RazorMachine(); const string streetName = "Main Street"; var t = m.Execute("@Model.Address.Street", new Person { Address = new Person.AddressType { Street = streetName } }); Assert.AreEqual(streetName, t.Result); t = m.Execute("@Model.Address.Street", new { Address = new Person.AddressType { Street = streetName } }); Assert.AreEqual(streetName, t.Result); t = m.Execute("@Model.Address.Street", new { Address = new { Street = streetName } }); Assert.AreEqual(streetName, t.Result); }
public void HelperWorks() { var rm = new RazorMachine(); rm.RegisterTemplate("/1/helper", @" @functions { static int _counter = 1; int GetId(){return _counter++;} } @helper AttributeStuff(string setting, string null_value=null){ <tag value=""@setting"" value2=""@setting @setting"" hidden=""@null_value""/> } @helper _DoStuff(){ <div> Some literal content @GetId() @GetId() @GetId() </div> } @helper _DoStuffAgain(){ <div> Some literal content @GetId() @GetId() @GetId() </div> } @_DoStuff() @_DoStuffAgain() @_DoStuff() @_DoStuffAgain() @AttributeStuff(""yep"") "); var result = rm.Execute("/1/helper"); Debug.WriteLine(result.Result); }
private static RazorMachine CreateRazorMachineWithoutContentProviders(bool includeGeneratedSourceCode=false, string rootOperatorPath = null, bool htmlEncode = true) { var rm = new RazorMachine(includeGeneratedSourceCode: includeGeneratedSourceCode, htmlEncode: htmlEncode, rootOperatorPath: rootOperatorPath); rm.Context.TemplateFactory.ContentManager.ClearAllContentProviders(); return rm; }
public void ConfigCannotBeModifiedAfterRazorMachineInitialization() { var rm = new RazorMachine(); rm.Context.Config.Initializer.InitializeByValues(rootOperatorPath: "/foo"); }
public void LayoutIsApplied() { var rm = new RazorMachine(includeGeneratedSourceCode:true); rm.RegisterTemplate("~/Shared/_layout", "Layout says: @RenderBody()"); rm.RegisterTemplate("~/simpleTemplate", "@{Layout=\"_layout\";}Hello @Model.FirstName @Model.LastName"); var executedTemplate = rm.ExecuteUrl("~/simpleTemplate", new { FirstName = "Dick", LastName = "Tracy" }); Debug.WriteLine("Template source code: \r\n"+executedTemplate.GeneratedSourceCode); Debug.WriteLine("Layout source code: \r\n" + executedTemplate.Childs[0].GeneratedSourceCode); // because layout is executed as a child of executedTemplate Assert.AreEqual("Layout says: Hello Dick Tracy", executedTemplate.Result.Trim()); rm.RegisterTemplate("~/simpleTemplate", "@model dynamic\r\n@{Layout=\"_layout\";}Hello again @Model.FirstName @Model.LastName"); // "old" template type is removed from cache internally. Check to see what "@model dynamic" does with the generated source code. executedTemplate = rm.ExecuteUrl("~/simpleTemplate", new { FirstName = "Dick", LastName = "Tracy" }); Debug.WriteLine("Template source code: \r\n" + executedTemplate.GeneratedSourceCode); Assert.AreEqual("Layout says: Hello again Dick Tracy", executedTemplate.Result.Trim()); }
// ********************* Other examples ********************************************************************************* // public static void RunEmbeddedTemplate() { // this example only works if the embedded content provider has been configured. Here it is configured at app.config, includeGeneratedSourceCode is forced to true var rm = new RazorMachine(includeGeneratedSourceCode:true); // => default configuration from app.config is loaded var t = rm.ExecuteUrl("~/embeddedTemplate"); Console.WriteLine("Generated source code:"); Console.WriteLine(t.GeneratedSourceCode); Console.WriteLine("Generated output:"); Console.WriteLine(t); // => writes the embedded template's result //NOTE: since now all content providers (file content providers as well) are loaded the ~/ViewStart.cshtml from the ./Views folder is executed as well }
public void Performance_Compiled_Template_Tree() { var rm = new RazorMachine(); rm.RegisterTemplate("~/Parent.cshtml", "@RenderPage(\"Child\") @{var i = (int)ViewBag.Title;}"); rm.RegisterTemplate("~/Child.cshtml", "@RenderPage(\"Child2\") child"); rm.RegisterTemplate("~/Child2.cshtml", "@{ViewBag.Title=10;} child2"); Debug.WriteLine("Result: " + rm.ExecuteUrl("~/Parent").Result); // to warm up var sw = new Stopwatch(); sw.Start(); const int count = 10000; for (var i = 0; i < count; i++) { rm.ExecuteUrl("~/Parent"); } sw.Stop(); Debug.WriteLine("Elapsed on {0} iterations: {1} ms", count, sw.ElapsedMilliseconds); }
public void Performance_Uncompiled_vs_Compiled() { var rm = new RazorMachine(includeGeneratedSourceCode:false); rm.ExecuteContent(Guid.NewGuid().ToString("N")); // to warm up the engine var list = new List<string>(); const int count = 50; for (var i = 0; i < count; i++) { // generate templates that display a guid value list.Add(Guid.NewGuid().ToString("N")); } var sw = new Stopwatch(); sw.Start(); for(var i = 0; i < count; i++){ rm.ExecuteContent(list[i]); } sw.Stop(); Console.WriteLine("Elapsed compile and run {0} times: {1} ms", count, sw.ElapsedMilliseconds); sw = new Stopwatch(); sw.Start(); for (var i = 0; i < count; i++) { rm.ExecuteContent(list[i]); } sw.Stop(); Console.WriteLine("Elapsed run again {0} times: {1} ms", count, sw.ElapsedMilliseconds == 0 ? "< 1" : sw.ElapsedMilliseconds.ToString()); }
public void RecursionErrorWorks() { var caught = false; try { var rm = new RazorMachine(); rm.RegisterTemplate("~/somePage", "Oops"); rm.RegisterTemplate("~/shared/_someLayout1", "@{Layout=\"_someLayout2\";} >>@RenderBody()"); rm.RegisterTemplate("~/shared/_someLayout2", "@{Layout=\"_someLayout1\";} >>@RenderBody()"); rm.RegisterTemplate("~/_viewStart", "@{Layout=\"_someLayout1\";}"); var t = rm.ExecuteUrl("/somePage"); } catch(TemplateTreeException ex){ Console.WriteLine(ex.Message); caught = true; } Assert.IsTrue(caught); }
public void RenderPageWorks() { var rm = new RazorMachine(); rm.RegisterTemplate("~/someControl", "Hello @Model.Name"); rm.RegisterTemplate("~/somePage", "@RenderPage(\"someControl\",skipLayout:true)"); rm.RegisterTemplate("~/shared/someLayout", ">>@RenderBody()"); rm.RegisterTemplate("~/_viewStart", "@{Layout=\"someLayout\";}"); var t = rm.ExecuteUrl("/somePage",new {Name="John"}); Assert.AreEqual(t.Result,">>Hello John"); }
/// <summary> /// This example creates a product list using a simple product grid productGrid (at ./Views/Reports/). /// The grid implicitly "knows" the product model because the grid is a child of Products, which is executed together with the MyProductList(). /// The layout is _layout2 which is set in memory at "~/_ViewStart", thus override the file ./Views/_ViewStart.cshtml /// </summary> public static void RunProductListTemplateFromFile() { var rm = new RazorMachine(includeGeneratedSourceCode: true); // => default configuration from app.config is loaded, includeGeneratedSourceCode is forced to true rm.RegisterTemplate("~/_ViewStart", "@{Layout=\"_Layout2\";}"); // => change (override) layout in memory to _layout2 var t = rm.ExecuteUrl("~/Reports/Products", new MyProductList()); Console.WriteLine("Generated template source code:"); Console.WriteLine(t.GeneratedSourceCode); Console.WriteLine("Generated layout source code:"); Console.WriteLine(t.Childs[t.Childs.Count - 1].GeneratedSourceCode); // layout always is the last child bacause it is rendered at last Console.WriteLine("Generated grid source code:"); Console.WriteLine(t.Childs[0].GeneratedSourceCode); Console.WriteLine("Generated output:"); Console.WriteLine(t); // => writes the embedded template's result }
public void RelativePathNameIsResolved() { var rm = new RazorMachine(); rm.RegisterTemplate("/views/main/index",@"@RenderPage(""aaa/bbb"")"); rm.RegisterTemplate("/views/main/aaa/bbb", "this is: /views/main/aaa/bbb"); rm.RegisterTemplate("/views/shared/bbb", "this is /views/shared/bbb"); rm.RegisterTemplate("/views/shared/aaa/bbb", "this is /views/shared/aaa/bbb"); rm.RegisterTemplate("/shared/bbb", "this is /shared/bbb"); rm.RegisterTemplate("/shared/aaa/bbb", "this is /shared/aaa/bbb"); var t = rm.Execute("/views/main/index"); Debug.WriteLine(rm.Execute("/views/main/index")); Assert.IsTrue(t.Result.EndsWith("/views/main/aaa/bbb")); }
public void LayoutIsAppliedAndSectionIsAppliedImplicitlyByViewStart() { var rm = new RazorMachine(); rm.RegisterTemplate("~/_ViewStart", @" @{ Layout=""_layout""; } @section footer{ Contact me on any crime at 666-666-666 } "); rm.RegisterTemplate("~/Shared/_layout", "Layout says: @RenderBody() @RenderSection(\"footer\")"); rm.RegisterTemplate("~/simpleTemplate", "Hello @Model.FirstName @Model.LastName"); var executedTemplate = rm.ExecuteUrl("~/simpleTemplate", new { FirstName = "Dick", LastName = "Tracy" }); Debug.WriteLine("Template source code: \r\n" + executedTemplate.GeneratedSourceCode); Debug.WriteLine("Layout source code: \r\n" + executedTemplate.Childs[0].GeneratedSourceCode); // layout is executed as a child of executedTemplate Debug.WriteLine(executedTemplate.Result); Assert.IsTrue(executedTemplate.Result.Trim().StartsWith("Layout says:")); }
public void NestedAnonymousTypesAreSupported() { var m = new RazorMachine(); const string streetName = "Main Street"; var t = m.Execute("@Model.Address.Street",new Person {Address = new Person.AddressType {Street = streetName}}); Assert.AreEqual(streetName,t.Result); t = m.Execute("@Model.Address.Street",new { Address = new Person.AddressType { Street = streetName } }); Assert.AreEqual(streetName, t.Result); t = m.Execute("@Model.Address.Street",new { Address = new { Street = streetName } }); Assert.AreEqual(streetName, t.Result); }
public void TemplateAccessorsWork() { var content = "any content"; var rm = new RazorMachine(); rm.RegisterTemplate("/yep", content); var template = rm.Execute("/yep"); Assert.AreEqual(content,template.Result.Trim()); var templates = rm.GetRegisteredInMemoryTemplates(); Assert.AreEqual(1,templates.Count); rm.RemoveTemplate("/yep"); templates = rm.GetRegisteredInMemoryTemplates(); Assert.AreEqual(0, templates.Count); }