Forge
csharpdeeb25a2
1using CascadeIDE.Services.MarkdownPreview;
2using Markdig;
3using Xunit;
4
5namespace CascadeIDE.Tests;
6
7public sealed class MarkdownPreviewNavigationTests
8{
9 private static readonly MarkdownPipeline Pipeline = new MarkdownPipelineBuilder()
10 .UseAdvancedExtensions()
11 .Build();
12
13 [Theory]
14 [InlineData("doc.md#section", "doc.md", "section")]
15 [InlineData("#only", null, "only")]
16 [InlineData("https://example.com", "https://example.com", null)]
17 public void SplitUrl_ParsesPathAndFragment(string url, string? expectedPath, string? expectedFragment)
18 {
19 var (path, fragment) = MarkdownPreviewRenderContext.SplitUrl(url);
20 Assert.Equal(expectedPath, path);
21 Assert.Equal(expectedFragment, fragment);
22 }
23
24 [Fact]
25 public void HeadingSlug_NormalizesText()
26 {
27 MarkdownPreviewHeadingSlug.ResetSlugCounts();
28 var slug = MarkdownPreviewHeadingSlug.Create("## Связанные ADR (v2)");
29 Assert.Equal("связанные-adr-v2", slug);
30 }
31
32 [Fact]
33 public void ExtractHtmlAnchorIds_FindsId()
34 {
35 var ids = MarkdownPreviewHeadingSlug.ExtractHtmlAnchorIds("""<a id="foo-bar"></a>""").ToArray();
36 Assert.Single(ids);
37 Assert.Equal("foo-bar", ids[0]);
38 }
39
40 [Fact]
41 public void Render_StrikethroughAndTaskList_DoesNotThrow()
42 {
43 const string md = """
44 ~~removed~~
45
46 - [x] done
47 - [ ] todo
48 """;
49 var doc = Markdown.Parse(md, Pipeline);
50 var payload = new MarkdownPreviewPayload("t.md", md, md, null, doc, [], null);
51 var control = new MarkdigMarkdownPreviewRenderer().Render(payload);
52 Assert.NotNull(control);
53 }
54
55 [Fact]
56 public void Render_HtmlAnchorBlock_DoesNotThrow()
57 {
58 const string md = """<a id="anchor-id"></a>""";
59 var doc = Markdown.Parse(md, Pipeline);
60 var payload = new MarkdownPreviewPayload("t.md", md, md, null, doc, [], null);
61 var registry = new MarkdownPreviewAnchorRegistry();
62 var ctx = new MarkdownPreviewRenderContext(null, null, anchors: registry);
63 var control = new MarkdigMarkdownPreviewRenderer().Render(payload, ctx);
64 Assert.NotNull(control);
65 }
66}
67
View only · write via MCP/CIDE