Esempio n. 1
0
        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"));
        }
Esempio n. 2
0
        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"));
        }
Esempio n. 3
0
        /// <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;
            }
        }
Esempio n. 4
0
        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"));
        }