Forge
csharpdeeb25a2
1#nullable enable
2using CascadeIDE.Views.Chat.Skia;
3using Xunit;
4
5namespace CascadeIDE.Tests;
6
7public sealed class SkiaMarkdownDocumentTests
8{
9 [Fact]
10 public void Layout_maps_headings_lists_and_hr()
11 {
12 const string md = """
13 # Title
14 ## Section
15 - one **bold**
16 ---
17 plain
18 """;
19
20 var rows = SkiaMarkdownDocument.Layout(md, maxChars: 80);
21 Assert.Contains(rows, r => r.Kind == SkiaMarkdownBlockKind.Heading1);
22 Assert.Contains(rows, r => r.Kind == SkiaMarkdownBlockKind.Heading2);
23 Assert.Contains(rows, r => r.Kind == SkiaMarkdownBlockKind.Bullet);
24 Assert.Contains(rows, r => r.Kind == SkiaMarkdownBlockKind.HorizontalRule);
25 Assert.Contains(rows, r => r.Kind == SkiaMarkdownBlockKind.Paragraph);
26
27 var bullet = rows.First(r => r.Kind == SkiaMarkdownBlockKind.Bullet);
28 Assert.Equal(SkiaMarkdownStyle.Plain, bullet.Runs[0].Style);
29 Assert.Contains(bullet.Runs, r => r.Style == SkiaMarkdownStyle.Bold && r.Text.Trim() == "bold");
30 }
31
32 [Fact]
33 public void Layout_wraps_long_bullet_continuation()
34 {
35 var md = "- " + new string('x', 40);
36 var rows = SkiaMarkdownDocument.Layout(md, maxChars: 12);
37 Assert.True(rows.Count(r => r.Kind == SkiaMarkdownBlockKind.Bullet) >= 2);
38 Assert.StartsWith(" ", rows[^1].Runs[0].Text, StringComparison.Ordinal);
39 }
40}
41
View only · write via MCP/CIDE