Пример #1
0
        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"
            }));
        }
Пример #2
0
        public void TemplateCanBePreCompiled()
        {
            var rm = new RazorMachine();

            rm.RegisterTemplate("/yep", "any content");
            rm.EnsureViewCompiled("/yep");
        }
Пример #3
0
        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);
        }
Пример #4
0
 public static void Initialise()
 {
     if (m_razorMachine == null)
     {
         m_razorMachine = new RazorMachine(htmlEncode: false);
     }
 }
Пример #5
0
        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"));
        }
Пример #6
0
        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\";
            }
        }
Пример #7
0
        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());
        }
Пример #8
0
        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);
        }
Пример #9
0
        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);
        }
Пример #10
0
 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);
 }
Пример #11
0
 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);
 }
Пример #12
0
        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);
        }
Пример #13
0
        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);
        }
Пример #14
0
        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);
        }
Пример #15
0
        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);
        }
Пример #16
0
 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);
     }
 }
Пример #17
0
        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");
        }
Пример #18
0
        // ********************* 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
        }
Пример #19
0
        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);
        }
Пример #20
0
        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());
        }
Пример #21
0
        /// <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();
        }
Пример #22
0
        public string GetExecuted(string Template, Table md)
        {
            ITemplate template;

            try
            {
                RazorMachine rm = new RazorMachine();
                template = rm.ExecuteContent(Template, md);
            }
            catch
            {
                throw;
            }
            return(template.Result);
        }
Пример #23
0
        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"));
        }
Пример #24
0
        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> >();
        }
Пример #25
0
        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);
        }
Пример #26
0
        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());
        }
Пример #27
0
 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("&amp;"));
     Debug.WriteLine(t);
 }
Пример #28
0
        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);
        }
Пример #29
0
        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);
        }
Пример #30
0
        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);
        }
Пример #31
0
        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("&amp;"));
            Debug.WriteLine(t);
        }
Пример #32
0
        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);
        }
Пример #33
0
        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);
        }
Пример #34
0
 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;
 }
Пример #35
0
 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);
 }
Пример #36
0
 public void ConfigCannotBeModifiedAfterRazorMachineInitialization()
 {
     var rm = new RazorMachine();
     rm.Context.Config.Initializer.InitializeByValues(rootOperatorPath: "/foo");
 }
Пример #37
0
 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);
 }
Пример #38
0
        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());
        }
Пример #39
0
 // ********************* 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
 }
Пример #40
0
 public void TemplateCanBePreCompiled()
 {
     var rm = new RazorMachine();
     rm.RegisterTemplate("/yep", "any content");
     rm.EnsureViewCompiled("/yep");
 }
Пример #41
0
        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" }));
        }
Пример #42
0
        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);
        }
Пример #43
0
        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());
        }
Пример #44
0
 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);
 }
Пример #45
0
 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");
 }
Пример #46
0
 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);
 }
Пример #47
0
        /// <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
        }
Пример #48
0
 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"));
 }
Пример #49
0
 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);
 }
Пример #50
0
 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:"));
 }
Пример #51
0
 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);
 }
Пример #52
0
        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);
        }
Пример #53
0
 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());
 }
Пример #54
0
 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);
 }
Пример #55
0
 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);
 }