");
+ html.Should().Contain("| ");
+ // Cell content - at least Cell 2 should be present
+ html.Should().Contain("Cell");
+ }
+
+ [Fact]
+ public void Render_TableWithHeaders_ReturnsThTags()
+ {
+ var doc = _parser.Parse("{|\n|-\n! Header 1 !! Header 2\n|-\n| Cell 1 || Cell 2\n|}");
+ var html = _renderer.Render(doc);
+
+ html.Should().Contain(" | ");
+ html.Should().Contain("Header 1");
+ html.Should().Contain("Header 2");
+ }
+
+ [Fact]
+ public void Render_Template_WithoutResolver_ReturnsPlaceholder()
+ {
+ var doc = _parser.Parse("{{Template Name}}");
+ var html = _renderer.Render(doc);
+
+ html.Should().Contain("Template Name");
+ // Uses class="template" for placeholder
+ html.Should().Contain("template");
+ }
+
+ [Fact]
+ public void Render_Template_WithResolver_ReturnsResolvedContent()
+ {
+ var templateResolver = new DictionaryTemplateResolver();
+ templateResolver.Add("Test", "Resolved!");
+
+ var renderer = new HtmlRenderer(templateResolver: templateResolver);
+ var doc = _parser.Parse("{{Test}}");
+ var html = renderer.Render(doc);
+
+ html.Should().Contain("Resolved!");
+ }
+
+ [Fact]
+ public void Render_Image_WithoutResolver_ReturnsPlaceholder()
+ {
+ var doc = _parser.Parse("[[File:Example.jpg]]");
+ var html = _renderer.Render(doc);
+
+ html.Should().Contain("Example.jpg");
+ }
+
+ [Fact]
+ public void Render_Image_WithResolver_ReturnsImgTag()
+ {
+ var imageResolver = new DictionaryImageResolver();
+ imageResolver.Add("Example.jpg", new ImageInfo { Url = "/images/example.jpg" });
+
+ var renderer = new HtmlRenderer(imageResolver: imageResolver);
+ var doc = _parser.Parse("[[File:Example.jpg]]");
+ var html = renderer.Render(doc);
+
+ html.Should().Contain(" alert('xss')");
+ var html = _renderer.Render(doc);
+
+ // Scripts should not execute - either escaped or stripped
+ html.Should().NotContain(" |