Forge
csharpdeeb25a2
1using CascadeIDE.Features.WebAiPortal.Application;
2using Xunit;
3
4namespace CascadeIDE.Tests;
5
6public sealed class WebAiPortalJsonCascadeFenceTests
7{
8 [Fact]
9 public void TryExtractFirst_finds_single_block_trimmed()
10 {
11 const string md = """
12 Explanation.
13
14 ```json-cascade
15 { "command_id": "codebase_index_search", "args": { "query": "x" } }
16 ```
17
18 Done.
19 """;
20 Assert.True(WebAiPortalJsonCascadeFence.TryExtractFirst(md, out var json));
21 Assert.Equal("""{ "command_id": "codebase_index_search", "args": { "query": "x" } }""", json);
22 }
23
24 [Fact]
25 public void TryExtractFirst_takes_first_of_two_blocks()
26 {
27 const string md = """
28 ```json-cascade
29 {"command_id":"a"}
30 ```
31 ```json-cascade
32 {"command_id":"b"}
33 ```
34 """;
35 Assert.True(WebAiPortalJsonCascadeFence.TryExtractFirst(md, out var json));
36 Assert.Contains("\"a\"", json, StringComparison.Ordinal);
37 Assert.DoesNotContain("\"b\"", json, StringComparison.Ordinal);
38 }
39
40 [Fact]
41 public void TryExtractFirst_false_when_no_fence()
42 {
43 Assert.False(WebAiPortalJsonCascadeFence.TryExtractFirst("only ```json\n{}", out _));
44 Assert.False(WebAiPortalJsonCascadeFence.TryExtractFirst(null, out _));
45 Assert.False(WebAiPortalJsonCascadeFence.TryExtractFirst("", out _));
46 }
47
48 [Fact]
49 public void TryExtractFirst_false_when_inner_empty()
50 {
51 Assert.False(WebAiPortalJsonCascadeFence.TryExtractFirst("```json-cascade\n```", out _));
52 }
53}
54
View only · write via MCP/CIDE