예제 #1
0
        public void Does_handle_foreach_when_enumerable_is_empty_first_time()
        {
            var content      = (string)dynamicListPageContent.Clone();
            var markdownPage = new MarkdownPage(new MarkdownFormat(), dynamicListPagePath, "", content);

            markdownPage.Compile();
            var model = new Person {
                Links = new List <Link>()
            };
            var scopeArgs = new Dictionary <string, object> {
                { "Model", model }
            };

            markdownPage.RenderToHtml(scopeArgs);             // First time the list is empty

            var expected = "A new list item";

            model.Links.Add(new Link {
                Name = expected
            });
            var html = markdownPage.RenderToHtml(scopeArgs);  // Second time the list has 1 item

            Console.WriteLine(html);
            Assert.That(html, Contains.Substring(expected));
        }
예제 #2
0
        public void Can_Render_MarkdownPage_with_external_helper_using_helper_directive()
        {
            var template = @"@helper Ext: ServiceStack.ServiceHost.Tests.Formats.TemplateTests+CustomMarkdownHelper
# View Page with Custom Helper

## External Helper 
<img src='path/to/img' class='inline-block' />
@Ext.InlineBlock(Model.FirstName, ""first-name"")
";

            var expectedHtml = @"
<h1>View Page with Custom Helper</h1>

<h2>External Helper</h2>

<p><img src='path/to/img' class='inline-block' />
 <div id=""first-name""><div class=""inner inline-block"">Demis</div></div>".Replace("\r\n", "\n");


            var dynamicPage = new MarkdownPage(markdownFormat, "/path/to/tpl", "DynamicModelTpl", template);

            dynamicPage.Prepare();

            var templateOutput = dynamicPage.RenderToHtml(templateArgs);

            templateOutput = templateOutput.Replace("\r\n", "\n");

            Assert.That(dynamicPage.ExecutionContext.BaseType, Is.EqualTo(typeof(MarkdownViewBase)));

            Console.WriteLine(templateOutput);
            Assert.That(templateOutput, Is.EqualTo(expectedHtml));
        }
예제 #3
0
        public void Can_Render_MarkdownPage_with_IF_statement()
        {
            var template = @"# Dynamic If Markdown Template

Hello @Model.FirstName,

@if (Model.FirstName == ""Bellot"") {
  * @Model.FirstName
}
@if (Model.LastName == ""Bellot"") {
  * @Model.LastName
}

### heading 3";

            var expected = @"# Dynamic If Markdown Template

Hello Demis,

  * Bellot

### heading 3";

            var expectedHtml = markdownFormat.Transform(expected);

            var dynamicPage = new MarkdownPage(markdownFormat, "/path/to/tpl", "DynamicIfTpl", template);

            dynamicPage.Prepare();

            var templateOutput = dynamicPage.RenderToHtml(templateArgs);

            Console.WriteLine(templateOutput);
            Assert.That(templateOutput, Is.EqualTo(expectedHtml));
        }
예제 #4
0
        public void Can_inherit_from_Generic_view_page_from_model_directive()
        {
            var template = @"@model ServiceStack.ServiceHost.Tests.Formats.TemplateTests+Person
# Generic View Page

## Form fields
@Html.LabelFor(m => m.FirstName) @Html.TextBoxFor(m => m.FirstName)
";

            var expectedHtml = @"
<h1>Generic View Page</h1>

<h2>Form fields</h2>

<label for=""FirstName"">FirstName</label> <input name=""FirstName"" type=""text"" value=""Demis"" />".Replace("\r\n", "\n");


            var dynamicPage = new MarkdownPage(markdownFormat, "/path/to/tpl", "DynamicModelTpl", template);

            dynamicPage.Prepare();

            var templateOutput = dynamicPage.RenderToHtml(templateArgs);

            templateOutput = templateOutput.Replace("\r\n", "\n");

            Assert.That(dynamicPage.ExecutionContext.BaseType, Is.EqualTo(typeof(MarkdownViewBase <>)));

            Console.WriteLine(templateOutput);
            Assert.That(templateOutput, Is.EqualTo(expectedHtml));
        }
예제 #5
0
        public void Can_Render_MarkdownPage_with_foreach()
        {
            var dynamicPage = new MarkdownPage(markdownFormat,
                                               dynamicListPagePath, "DynamicListTpl", dynamicListPageContent);

            dynamicPage.Prepare();

            Assert.That(dynamicPage.HtmlBlocks.Length, Is.EqualTo(11));

            var expectedMarkdown = dynamicListPageContent
                                   .Replace("@Model.FirstName", person.FirstName)
                                   .Replace("@Model.LastName", person.LastName);

            var foreachLinks = "  - ServiceStack - http://www.servicestack.net\r\n"
                               + "  - AjaxStack - http://www.ajaxstack.com\r\n";

            expectedMarkdown = expectedMarkdown.ReplaceForeach(foreachLinks);

            var expectedHtml = markdownFormat.Transform(expectedMarkdown);

            Console.WriteLine("ExpectedHtml: " + expectedHtml);

            var templateOutput = dynamicPage.RenderToHtml(templateArgs);

            Console.WriteLine("Template Output: " + templateOutput);

            Assert.That(templateOutput, Is.EqualTo(expectedHtml));
        }
예제 #6
0
        public void Can_Render_MarkdownPage_with_comments()
        {
            var template = @"# Dynamic If Markdown Template
Hello @Model.FirstName,

@if (Model.FirstName == ""Bellot"") {
  * @Model.FirstName
}
@*
@if (Model.LastName == ""Bellot"") {
  * @Model.LastName
}
*@

@*
Plain text in a comment
*@

### heading 3";

            var expectedHtml = @"<h1>Dynamic If Markdown Template</h1>
<p>Hello Demis,</p>
<h3>heading 3</h3>
".NormalizeNewLines();

            var dynamicPage = new MarkdownPage(markdownFormat, "/path/to/tpl", "DynamicIfTpl", template);

            dynamicPage.Compile();

            var templateOutput = dynamicPage.RenderToHtml(templateArgs);

            Console.WriteLine(templateOutput);
            Assert.That(templateOutput, Is.EqualTo(expectedHtml));
        }
예제 #7
0
        public void Can_Render_MarkdownPage_with_external_helper()
        {
            var template = @"# View Page with Custom Helper

## External Helper 
![inline-img](path/to/img)
@Ext.InlineBlock(Model.FirstName, ""first-name"")
";

            var expectedHtml = @"<h1>View Page with Custom Helper</h1>
<h2>External Helper</h2>
<p><img src=""path/to/img"" alt=""inline-img"" />
 <div id=""first-name""><div class=""inner inline-block"">Demis</div></div>".NormalizeNewLines();


            markdownFormat.MarkdownGlobalHelpers.Add("Ext", typeof(CustomMarkdownHelper));
            var dynamicPage = new MarkdownPage(markdownFormat, "/path/to/tpl", "DynamicModelTpl", template);

            dynamicPage.Compile();

            var templateOutput = dynamicPage.RenderToHtml(templateArgs);

            templateOutput = templateOutput.Replace("\r\n", "\n");

            Assert.That(dynamicPage.ExecutionContext.BaseType, Is.EqualTo(typeof(MarkdownViewBase)));

            Console.WriteLine(templateOutput);
            Assert.That(templateOutput, Is.EqualTo(expectedHtml));
        }
예제 #8
0
        public void Can_inherit_from_CustomViewPage_using_inherits_directive()
        {
            var template = @"@inherits ServiceStack.ServiceHost.Tests.Formats.TemplateTests+CustomMarkdownViewBase<ServiceStack.ServiceHost.Tests.Formats.TemplateTests+Person>
# Generic View Page

## Form fields
@Html.LabelFor(m => m.FirstName) @Html.TextBoxFor(m => m.FirstName)

## Person Table
@Table(Model)
";

            var expectedHtml = @"<h1>Generic View Page</h1>
<h2>Form fields</h2>
<label for=""FirstName"">FirstName</label> <input id=""FirstName"" name=""FirstName"" type=""text"" value=""Demis"" /><h2>Person Table</h2>
<table><caption>Demis's Links</caption><thead><tr><th>Name</th><th>Link</th></tr></thead>
<tbody>
<tr><td>ServiceStack</td><td>http://www.servicestack.net</td></tr><tr><td>AjaxStack</td><td>http://www.ajaxstack.com</td></tr></tbody>
</table>
".NormalizeNewLines();


            var dynamicPage = new MarkdownPage(markdownFormat, "/path/to/tpl", "DynamicModelTpl", template);

            dynamicPage.Compile();

            var templateOutput = dynamicPage.RenderToHtml(templateArgs);

            templateOutput = templateOutput.Replace("\r\n", "\n");

            Assert.That(dynamicPage.ExecutionContext.BaseType, Is.EqualTo(typeof(CustomMarkdownViewBase <>)));

            Console.WriteLine(templateOutput);
            Assert.That(templateOutput, Is.EqualTo(expectedHtml));
        }
예제 #9
0
        public void Can_Render_Markdown_with_Nested_Statements()
        {
            var template = @"# @Model.FirstName Dynamic Nested Markdown Template

# heading 1

@foreach (var link in Model.Links) {
  @if (link.Name == ""AjaxStack"") {
  - @link.Name - @link.Href
  }
}

@if (Model.Links.Count == 2) {
## Haz 2 links

  @foreach (var link in Model.Links) {
  - @link.Name - @link.Href
    @foreach (var label in link.Labels) { 
    - @label
	}
  }
}

### heading 3";

            var expected = @"# Demis Dynamic Nested Markdown Template

# heading 1

  - AjaxStack - http://www.ajaxstack.com

## Haz 2 links

  - ServiceStack - http://www.servicestack.net
    - REST
    - JSON
    - XML
  - AjaxStack - http://www.ajaxstack.com
    - HTML5
    - AJAX
    - SPA

### heading 3";

            var expectedHtml = markdownFormat.Transform(expected);

            var dynamicPage = new MarkdownPage(markdownFormat, "/path/to/tpl", "DynamicNestedTpl", template);

            dynamicPage.Prepare();

            var templateOutput = dynamicPage.RenderToHtml(templateArgs);

            Console.WriteLine(templateOutput);
            Assert.That(templateOutput, Is.EqualTo(expectedHtml));
        }
예제 #10
0
        public void Can_Render_MarkdownPage()
        {
            var dynamicPage = new MarkdownPage(markdownFormat, dynamicPageContent, "DynamicTpl", dynamicPageContent);

            dynamicPage.Prepare();

            Assert.That(dynamicPage.HtmlBlocks.Length, Is.EqualTo(9));

            var expectedHtml = markdownFormat.Transform(dynamicPageContent)
                               .Replace("@Model.FirstName", person.FirstName)
                               .Replace("@Model.LastName", person.LastName);

            var templateOutput = dynamicPage.RenderToHtml(templateArgs);

            Console.WriteLine("Template Output: " + templateOutput);

            Assert.That(templateOutput, Is.EqualTo(expectedHtml));
        }
예제 #11
0
        public void Can_Render_MarkdownPage_with_unmatching_escaped_braces()
        {
            var template = @"# Dynamic If Markdown Template 
Hello @Model.FirstName, { -- unmatched, leave unescaped outside statement

{ -- inside matching braces, outside statement -- }

@if (Model.LastName == ""Bellot"") {
  * @Model.LastName

{{ -- inside matching braces, escape inside statement -- }}

{{ -- unmatched

}

### heading 3";

            var expectedHtml = @"<h1>Dynamic If Markdown Template</h1>

<p>Hello Demis, { -- unmatched, leave unescaped outside statement</p>

<p>{ -- inside matching braces, outside statement -- }</p>

<ul>
<li>Bellot</li>
</ul>

<p>{ -- inside matching braces, escape inside statement -- }</p>

<p>{ -- unmatched</p>

<h3>heading 3</h3>
".Replace("\r\n", "\n");

            var dynamicPage = new MarkdownPage(markdownFormat, "/path/to/tpl", "DynamicIfTpl", template);

            dynamicPage.Prepare();

            var templateOutput = dynamicPage.RenderToHtml(templateArgs);

            Console.WriteLine(templateOutput);
            Assert.That(templateOutput, Is.EqualTo(expectedHtml));
        }
예제 #12
0
        public void Can_capture_Section_statements_and_store_them_in_scopeargs()
        {
            var template     = @"## Welcome to Razor!

@var lastName = Model.LastName;
@section Salutations {
Hello @Upper(lastName), @Model.FirstName
}

@section Breadcrumbs {
### Breadcrumbs
@Combine("" / "", Model.FirstName, lastName)
}

@var links = Model.Links
@section Menus {
### Menus
@foreach (var link in links) {
  - @link.Name - @link.Href
  @var labels = link.Labels
  @foreach (var label in labels) { 
    - @label
  }
}
}

## Captured Sections

<div id='breadcrumbs'>@Breadcrumbs</div>

@Menus

## Salutations
@Salutations
";
            var expectedHtml = @"<h2>Welcome to Razor!</h2>




<h2>Captured Sections</h2>

<div id='breadcrumbs'><h3>Breadcrumbs</h3>

<p>Demis / Bellot</p>
</div>

<p><h3>Menus</h3>

<ul>
<li>ServiceStack - http://www.servicestack.net
<ul>
<li>REST</li>
<li>JSON</li>
<li>XML</li>
</ul></li>
<li>AjaxStack - http://www.ajaxstack.com
<ul>
<li>HTML5</li>
<li>AJAX</li>
<li>SPA</li>
</ul></li>
</ul>
</p>

<h2>Salutations</h2>

<p><p>Hello  BELLOT, Demis</p>
</p>
".Replace("\r\n", "\n");

            var dynamicPage = new MarkdownPage(markdownFormat, "/path/to/tpl", "DynamicModelTpl", template);

            dynamicPage.Prepare();

            var templateOutput = dynamicPage.RenderToHtml(templateArgs);

            templateOutput = templateOutput.Replace("\r\n", "\n");

            Assert.That(dynamicPage.ExecutionContext.BaseType, Is.EqualTo(typeof(MarkdownViewBase)));

            Console.WriteLine(templateOutput);

            Assert.That(templateArgs["Salutations"].ToString(), Is.EqualTo("<p>Hello  BELLOT, Demis</p>\n"));
            Assert.That(templateOutput, Is.EqualTo(expectedHtml));
        }
예제 #13
0
        public void Can_Render_Markdown_with_StaticMethods()
        {
            var headerTemplate = @"## Header Links!
  - [Google](http://google.com)
  - [Bing](http://bing.com)";

            var template = @"## Welcome to Razor!

@Html.Partial(""HeaderLinks"", Model)

Hello @Upper(Model.LastName), @Model.FirstName

### Breadcrumbs
@Combine("" / "", Model.FirstName, Model.LastName)

### Menus
@foreach (var link in Model.Links) {
  - @link.Name - @link.Href
  @foreach (var label in link.Labels) { 
    - @label
  }
}

### HTML Table 
@Table(Model)
";

            var expectedHtml = @"<h2>Welcome to Razor!</h2>

<h2>Header Links!</h2>

<ul>
<li><a href=""http://google.com"">Google</a></li>
<li><a href=""http://bing.com"">Bing</a></li>
</ul>

<p>Hello  BELLOT, Demis</p>

<h3>Breadcrumbs</h3>

Demis / Bellot
<h3>Menus</h3>

<ul>
<li>ServiceStack - http://www.servicestack.net
<ul>
<li>REST</li>
<li>JSON</li>
<li>XML</li>
</ul></li>
<li>AjaxStack - http://www.ajaxstack.com
<ul>
<li>HTML5</li>
<li>AJAX</li>
<li>SPA</li>
</ul></li>
</ul>

<h3>HTML Table</h3>

<table><caption>Demis's Links</caption><thead><tr><th>Name</th><th>Link</th></tr></thead>
<tbody>
<tr><td>ServiceStack</td><td>http://www.servicestack.net</td></tr><tr><td>AjaxStack</td><td>http://www.ajaxstack.com</td></tr></tbody>
</table>
".Replace("\r\n", "\n");


            markdownFormat.MarkdownBaseType      = typeof(CustomMarkdownViewBase);
            markdownFormat.MarkdownGlobalHelpers = new Dictionary <string, Type>
            {
                { "Ext", typeof(CustomMarkdownHelper) }
            };

            markdownFormat.RegisterMarkdownPage(new MarkdownPage(markdownFormat,
                                                                 "/path/to/page", "HeaderLinks", headerTemplate));

            var dynamicPage = new MarkdownPage(markdownFormat, "/path/to/tpl", "DynamicIfTpl", template);

            dynamicPage.Prepare();

            var templateOutput = dynamicPage.RenderToHtml(templateArgs);

            templateOutput = templateOutput.Replace("\r\n", "\n");

            Console.WriteLine(templateOutput);
            Assert.That(templateOutput, Is.EqualTo(expectedHtml));
        }