csharpdeeb25a2 | 1 | #nullable enable |
| 2 | using CascadeIDE.Views.Chat.Skia; |
| 3 | using Xunit; |
| 4 | |
| 5 | namespace CascadeIDE.Tests; |
| 6 | |
| 7 | public sealed class SkiaMarkdownLayoutTests |
| 8 | { |
| 9 | [Fact] |
| 10 | public void ParseInline_parses_bold_italic_and_code() |
| 11 | { |
| 12 | var runs = SkiaMarkdownLayout.ParseInline("a **b** `c` *d*"); |
| 13 | Assert.Contains(runs, r => r.Style == SkiaMarkdownStyle.Bold && r.Text == "b"); |
| 14 | Assert.Contains(runs, r => r.Style == SkiaMarkdownStyle.Code && r.Text == "c"); |
| 15 | Assert.Contains(runs, r => r.Style == SkiaMarkdownStyle.Italic && r.Text == "d"); |
| 16 | Assert.Contains(runs, r => r.Style == SkiaMarkdownStyle.Plain && r.Text.Contains('a')); |
| 17 | } |
| 18 | |
| 19 | [Fact] |
| 20 | public void WrapLines_preserves_styles_across_words() |
| 21 | { |
| 22 | var runs = SkiaMarkdownLayout.ParseInline("**hello world**"); |
| 23 | var lines = SkiaMarkdownLayout.WrapLines(runs, maxChars: 8); |
| 24 | Assert.NotEmpty(lines); |
| 25 | Assert.Contains(lines[0].Runs, r => r.Style == SkiaMarkdownStyle.Bold); |
| 26 | } |
| 27 | |
| 28 | [Fact] |
| 29 | public void ToPlainText_strips_markers() |
| 30 | { |
| 31 | var runs = SkiaMarkdownLayout.ParseInline("**x**"); |
| 32 | var lines = SkiaMarkdownLayout.WrapLines(runs, 40); |
| 33 | Assert.Equal("x", SkiaMarkdownLayout.ToPlainText(lines)); |
| 34 | } |
| 35 | } |
| 36 | |
View only · write via MCP/CIDE