public void Does_replace_multiple_statements_with_expr_placeholders() { string template = @" ## Statement 1 @if (Model.IsValid) { ### This is valid } @foreach (var link in Model.Links) { - @link.Name - @link.Href } ## Statement 2 @foreach (var text in Model.Texts) { ### @text.Name @text.body } @if (!Model.IsValid) { ### This is not valid } # EOF".NormalizeNewLines(); string expected = @" ## Statement 1 @^1 @^2 ## Statement 2 @^3 @^4 # EOF".NormalizeNewLines(); var statements = new List <StatementExprBlock>(); var content = StatementExprBlock.Extract(template, statements); Console.WriteLine(content); Assert.That(content, Is.EqualTo(expected)); Assert.That(statements.Count, Is.EqualTo(4)); Assert.That(statements[0].Condition, Is.EqualTo("Model.IsValid")); Assert.That(statements[0].Statement, Is.EqualTo("### This is valid\n")); Assert.That(statements[1].Condition, Is.EqualTo("var link in Model.Links")); Assert.That(statements[1].Statement, Is.EqualTo(" - @link.Name - @link.Href\n")); Assert.That(statements[2].Condition, Is.EqualTo("var text in Model.Texts")); Assert.That(statements[2].Statement, Is.EqualTo("### @text.Name\[email protected]\n")); Assert.That(statements[3].Condition, Is.EqualTo("!Model.IsValid")); Assert.That(statements[3].Statement, Is.EqualTo("### This is not valid\n")); }
public void Does_replace_foreach_statements_with_expr_placeholders() { var content = (string)dynamicListPageContent.Clone(); var expected = content.ReplaceForeach("@^1");; var statements = new List <StatementExprBlock>(); var parsedContent = StatementExprBlock.Extract(content, statements); Console.WriteLine(parsedContent); Assert.That(parsedContent, Is.EqualTo(expected)); Assert.That(statements.Count, Is.EqualTo(1)); Assert.That(statements[0].Condition, Is.EqualTo("var link in Model.Links")); Assert.That(statements[0].Statement, Is.EqualTo(" - @link.Name - @link.Href\r\n")); }
/// <summary> /// Compiles the specified force. /// </summary> /// <param name="force">if set to <c>true</c> [force].</param> /// <exception cref="System.Configuration.ConfigurationErrorsException">Config.MarkdownBaseType must inherit from MarkdownViewBase</exception> public void Compile(bool force = false) { if (this.IsCompiled && !force) { return; } var sw = Stopwatch.StartNew(); try { if (!typeof(MarkdownViewBase).IsAssignableFrom(this.Markdown.MarkdownBaseType)) { throw new ConfigurationErrorsException( "Config.MarkdownBaseType must inherit from MarkdownViewBase"); } if (this.Contents.IsNullOrEmpty()) { return; } var markdownStatements = new List <StatementExprBlock>(); var markdownContents = StatementExprBlock.Extract(this.Contents, markdownStatements); this.MarkdownBlocks = markdownContents.CreateTemplateBlocks(markdownStatements).ToArray(); var htmlStatements = new List <StatementExprBlock>(); var htmlContents = StatementExprBlock.Extract(this.Contents, htmlStatements); this.HtmlContents = Markdown.Transform(htmlContents); this.HtmlBlocks = this.HtmlContents.CreateTemplateBlocks(htmlStatements).ToArray(); SetTemplateDirectivePath(); this.IsCompiled = true; Log.InfoFormat("Compiled {0} in {1}ms", this.FilePath, sw.ElapsedMilliseconds); } catch (Exception ex) { Log.Error("Error compiling {0}".Fmt(this.FilePath), ex); throw; } }
public void Does_parse_parens_free_statements() { string template = @" ## Statement 1 @if Model.IsValid { ### This is valid } @foreach var link in Model.Links { - @link.Name - @link.Href } ## Statement 2 @foreach text in Model.Texts { ### @text.Name @text.body } @if !Model.IsValid{ ### This is not valid } # EOF".NormalizeNewLines(); string expected = @" ## Statement 1 @^1 @^2 ## Statement 2 @^3 @^4 # EOF".NormalizeNewLines(); var statements = new List <StatementExprBlock>(); var content = StatementExprBlock.Extract(template, statements); Console.WriteLine(content); Assert.That(content, Is.EqualTo(expected)); Assert.That(statements.Count, Is.EqualTo(4)); var stat1 = (IfStatementExprBlock)statements[0]; Assert.That(stat1.Condition, Is.EqualTo("Model.IsValid")); Assert.That(stat1.Statement, Is.EqualTo("### This is valid\n")); var stat2 = (ForEachStatementExprBlock)statements[1]; Assert.That(stat2.Condition, Is.EqualTo("var link in Model.Links")); Assert.That(stat2.Statement, Is.EqualTo(" - @link.Name - @link.Href\n")); Assert.That(stat2.EnumeratorName, Is.EqualTo("link")); Assert.That(stat2.MemberExpr, Is.EqualTo("Model.Links")); var stat3 = (ForEachStatementExprBlock)statements[2]; Assert.That(stat3.Condition, Is.EqualTo("text in Model.Texts")); Assert.That(stat3.Statement, Is.EqualTo("### @text.Name\[email protected]\n")); Assert.That(stat3.EnumeratorName, Is.EqualTo("text")); Assert.That(stat3.MemberExpr, Is.EqualTo("Model.Texts")); var stat4 = (IfStatementExprBlock)statements[3]; Assert.That(stat4.Condition, Is.EqualTo("!Model.IsValid")); Assert.That(stat4.Statement, Is.EqualTo("### This is not valid\n")); }