Forge
csharpdeeb25a2
1using CascadeIDE.Features.Chat;
2using Xunit;
3
4namespace CascadeIDE.Tests;
5
6public sealed class ChatMessageBodyPresentationTests
7{
8 [Fact]
9 public void SplitSegments_multiple_fences_returns_all_blocks()
10 {
11 var body = "intro\n```cs\nvar a = 1;\n```\nmid\n```txt\nline\n```\ntail";
12 var segments = ChatMessageBodyPresentation.SplitSegments(body);
13
14 Assert.Equal(5, segments.Count);
15 Assert.Equal(ChatMessageBodySegmentKind.Prose, segments[0].Kind);
16 Assert.Contains("intro", segments[0].Text, StringComparison.Ordinal);
17 Assert.Equal(ChatMessageBodySegmentKind.Code, segments[1].Kind);
18 Assert.Contains("var a = 1", segments[1].Text, StringComparison.Ordinal);
19 Assert.Equal(ChatMessageBodySegmentKind.Prose, segments[2].Kind);
20 Assert.Contains("mid", segments[2].Text, StringComparison.Ordinal);
21 Assert.Equal(ChatMessageBodySegmentKind.Code, segments[3].Kind);
22 Assert.Contains("line", segments[3].Text, StringComparison.Ordinal);
23 Assert.Equal(ChatMessageBodySegmentKind.Prose, segments[4].Kind);
24 Assert.Contains("tail", segments[4].Text, StringComparison.Ordinal);
25 }
26
27 [Fact]
28 public void ShouldUseDocumentLayout_detects_lists_and_headings()
29 {
30 Assert.True(ChatMessageBodyPresentation.ShouldUseDocumentLayout("## Title\n\n- one"));
31 Assert.False(ChatMessageBodyPresentation.ShouldUseDocumentLayout("plain **bold** only"));
32 }
33}
34
View only · write via MCP/CIDE