public void CodeSnippetTagsShouldSucceedWhenDuplicateWithWarningWhenReferenced() { //arange var content = @"// <tag1> line1 // <tag1> line2 // </tag1> line3 // </TAG1> // <tag2> line4 // </tag2> "; File.WriteAllText("Program.cs", content.Replace("\r\n", "\n")); // act var listener = TestLoggerListener.CreateLoggerListenerWithPhaseStartFilter("Extract Dfm Code"); Logger.RegisterListener(listener); var marked = DocfxFlavoredMarked.Markup("[!code[tag1](Program.cs#Tag1)]", "Program.cs"); Logger.UnregisterListener(listener); // assert Assert.Equal(1, listener.Items.Count(i => i.LogLevel == LogLevel.Warning)); var expected = "<pre><code name=\"tag1\">line2\n</code></pre>"; Assert.Equal(expected.Replace("\r\n", "\n"), marked); }
public void TestDfmTagValidate() { var builder = new DfmEngineBuilder(new Options() { Mangle = false }); var mrb = new MarkdownValidatorBuilder( new ContainerConfiguration() .WithAssembly(typeof(DocfxFlavoredMarkdownTest).Assembly) .CreateContainer()); mrb.AddTagValidators(new[] { new MarkdownTagValidationRule { TagNames = new List <string> { "em", "div" }, MessageFormatter = "Invalid tag({0})!", Behavior = TagValidationBehavior.Error, OpeningTagOnly = true, }, new MarkdownTagValidationRule { TagNames = new List <string> { "h1" }, MessageFormatter = "Warning tag({0})!", Behavior = TagValidationBehavior.Warning, }, }); mrb.AddValidators(new[] { new MarkdownValidationRule { ContractName = HtmlMarkdownTokenValidatorProvider.ContractName, } }); builder.Rewriter = mrb.CreateRewriter(); var engine = builder.CreateDfmEngine(new DfmRenderer()); var listener = new TestLoggerListener("test!!!!" + "." + MarkdownValidatorBuilder.MarkdownValidatePhaseName); Logger.RegisterListener(listener); string result; using (new LoggerPhaseScope("test!!!!")) { result = engine.Markup(@"<div><i>x</i><EM>y</EM><h1>z</h1></div>", "test"); } Logger.UnregisterListener(listener); Assert.Equal("<div><i>x</i><EM>y</EM><h1>z</h1></div>", result); Assert.Equal(5, listener.Items.Count); Assert.Equal(new[] { HtmlMarkdownTokenValidatorProvider.WarningMessage, "Invalid tag(div)!", "Invalid tag(EM)!", "Warning tag(h1)!", "Warning tag(h1)!" }, from item in listener.Items select item.Message); }
public void TestTabGroup_DuplicateTabId() { var listener = TestLoggerListener.CreateLoggerListenerWithPhaseEqualFilter("test!!!!"); var options = DocfxFlavoredMarked.CreateDefaultOptions(); options.ShouldExportSourceInfo = true; var groupId = "aupEkulau5"; string actual; try { Logger.RegisterListener(listener); using (new LoggerPhaseScope("test!!!!")) { actual = DocfxFlavoredMarked.Markup(null, null, options, @"# [title-a](#tab/a) content-a # [title-a](#tab/a) content-a # <a id=""x""></a>[title-b](#tab/b/c) content-b - - -", "test.md"); } } finally { Logger.UnregisterListener(listener); } var expected = $@"<div class=""tabGroup"" id=""tabgroup_{groupId}"" sourceFile=""test.md"" sourceStartLineNumber=""1"" sourceEndLineNumber=""7""> <ul role=""tablist""> <li role=""presentation""> <a href=""#tabpanel_{groupId}_a"" role=""tab"" aria-controls=""tabpanel_{groupId}_a"" data-tab=""a"" tabindex=""0"" aria-selected=""true"" sourceFile=""test.md"" sourceStartLineNumber=""1"" sourceEndLineNumber=""1"">title-a</a> </li> <li role=""presentation""> <a href=""#tabpanel_{groupId}_a"" role=""tab"" aria-controls=""tabpanel_{groupId}_a"" data-tab=""a"" tabindex=""-1"" sourceFile=""test.md"" sourceStartLineNumber=""3"" sourceEndLineNumber=""3"">title-a</a> </li> <li role=""presentation"" aria-hidden=""true"" hidden=""hidden""> <a href=""#tabpanel_{groupId}_b_c"" role=""tab"" aria-controls=""tabpanel_{groupId}_b_c"" data-tab=""b"" data-condition=""c"" tabindex=""-1"" sourceFile=""test.md"" sourceStartLineNumber=""5"" sourceEndLineNumber=""5"">title-b</a> </li> </ul> <section id=""tabpanel_{groupId}_a"" role=""tabpanel"" data-tab=""a""> <p sourceFile=""test.md"" sourceStartLineNumber=""2"" sourceEndLineNumber=""2"">content-a</p> </section> <section id=""tabpanel_{groupId}_a"" role=""tabpanel"" data-tab=""a"" aria-hidden=""true"" hidden=""hidden""> <p sourceFile=""test.md"" sourceStartLineNumber=""4"" sourceEndLineNumber=""4"">content-a</p> </section> <section id=""tabpanel_{groupId}_b_c"" role=""tabpanel"" data-tab=""b"" data-condition=""c"" aria-hidden=""true"" hidden=""hidden""> <p sourceFile=""test.md"" sourceStartLineNumber=""6"" sourceEndLineNumber=""6"">content-b</p> </section> </div> "; Assert.Equal(expected.Replace("\r\n", "\n"), actual); Assert.Equal(new[] { WarningCodes.Markdown.DuplicateTabId }, from item in listener.Items select item.Code); }
public void TestDfm_InvalidYamlHeader_YamlUtilityThrowException() { var source = @"--- - Jon Schlinkert - Brian Woodward --- 1 === 1.1 --- blabla 1.2 --- blabla"; var expected = @"<hr/> <ul> <li>Jon Schlinkert</li> <li>Brian Woodward</li> </ul> <hr/> <h1 id=""1"">1</h1> <h2 id=""11"">1.1</h2> <p>blabla</p> <h2 id=""12"">1.2</h2> <p>blabla</p> "; var listener = TestLoggerListener.CreateLoggerListenerWithPhaseEqualFilter("YamlHeader"); Logger.RegisterListener(listener); string marked; using (new LoggerPhaseScope("YamlHeader")) { marked = DocfxFlavoredMarked.Markup(source); } Logger.UnregisterListener(listener); Assert.Equal(1, listener.Items.Count(i => i.LogLevel == LogLevel.Warning)); Assert.Equal(expected.Replace("\r\n", "\n"), marked); }
public void TestDfmTagValidate() { var builder = new DfmEngineBuilder(new Options() { Mangle = false }); var mrb = new MarkdownValidatorBuilder( new ContainerConfiguration() .WithAssembly(typeof(DocfxFlavoredMarkdownTest).Assembly) .CreateContainer()); mrb.AddTagValidators(new[] { new MarkdownTagValidationRule { TagNames = new List<string> { "em", "div" }, MessageFormatter = "Invalid tag({0})!", Behavior = TagValidationBehavior.Error, OpeningTagOnly = true, }, new MarkdownTagValidationRule { TagNames = new List<string> { "h1" }, MessageFormatter = "Warning tag({0})!", Behavior = TagValidationBehavior.Warning, }, new MarkdownTagValidationRule { TagNames = new List<string> { "script" }, MessageFormatter = "Warning tag({0})!", Behavior = TagValidationBehavior.Warning, }, new MarkdownTagValidationRule { TagNames = new List<string> { "pre" }, MessageFormatter = "Warning tag({0})!", Behavior = TagValidationBehavior.Warning, }, }); mrb.AddValidators(new[] { new MarkdownValidationRule { ContractName = HtmlMarkdownTokenValidatorProvider.ContractName, } }); builder.Rewriter = mrb.CreateRewriter(); var engine = builder.CreateDfmEngine(new DfmRenderer()); var listener = new TestLoggerListener("test!!!!" + "." + MarkdownValidatorBuilder.MarkdownValidatePhaseName); Logger.RegisterListener(listener); string result; using (new LoggerPhaseScope("test!!!!")) { result = engine.Markup(@"<div><i>x</i><EM>y</EM><h1>z<pre><code>a*b*c</code></pre></h1></div> <script>alert(1);</script>", "test"); } Logger.UnregisterListener(listener); Assert.Equal(@"<div><i>x</i><EM>y</EM><h1>z<pre><code>a*b*c</code></pre></h1></div> <script>alert(1);</script>".Replace("\r\n", "\n"), result); Assert.Equal(8, listener.Items.Count); Assert.Equal(new[] { HtmlMarkdownTokenValidatorProvider.WarningMessage, "Invalid tag(div)!", "Invalid tag(EM)!", "Warning tag(h1)!", "Warning tag(pre)!", "Warning tag(h1)!", "Html Tag!", "Warning tag(script)!", }, from item in listener.Items select item.Message); }