Forge
csharpdeeb25a2
1using CascadeIDE.Cockpit.Graph;
2using Xunit;
3
4namespace CascadeIDE.Tests;
5
6public sealed class GraphDocumentJsonTests
7{
8 [Fact]
9 public void TryParse_UnknownGraphKind_BecomesUnspecified()
10 {
11 const string json = """{"mode":"subgraph","graph_kind":"reserved_future_kind","anchor_path":"D:/a.cs","nodes":[],"edges":[]}""";
12 Assert.True(GraphDocumentJson.TryParse(json, out var doc, out var err), err);
13 Assert.NotNull(doc);
14 Assert.Equal(GraphKind.Unspecified, doc!.Kind);
15 }
16
17 [Fact]
18 public void TryParse_GraphKindAsNonString_BecomesUnspecified()
19 {
20 const string json = """{"mode":"subgraph","graph_kind":42,"anchor_path":"D:/a.cs","nodes":[],"edges":[]}""";
21 Assert.True(GraphDocumentJson.TryParse(json, out var doc, out var err), err);
22 Assert.NotNull(doc);
23 Assert.Equal(GraphKind.Unspecified, doc!.Kind);
24 }
25
26 [Fact]
27 public void TryParse_EmptyGraphKindString_BecomesUnspecified()
28 {
29 const string json = """{"mode":"subgraph","graph_kind":"","anchor_path":"D:/a.cs","nodes":[],"edges":[]}""";
30 Assert.True(GraphDocumentJson.TryParse(json, out var doc, out var err), err);
31 Assert.NotNull(doc);
32 Assert.Equal(GraphKind.Unspecified, doc!.Kind);
33 }
34
35 [Fact]
36 public void TryParse_RelatedFilesGraphKind_Parsed()
37 {
38 const string json = """{"mode":"subgraph","graph_kind":"related_files","anchor_path":"D:/a.cs","nodes":[],"edges":[]}""";
39 Assert.True(GraphDocumentJson.TryParse(json, out var doc, out var err), err);
40 Assert.NotNull(doc);
41 Assert.Equal(GraphKind.RelatedFiles, doc!.Kind);
42 }
43
44 [Fact]
45 public void TryParse_RepositoryModuleTreeGraphKind_Parsed()
46 {
47 const string json = """{"mode":"subgraph","graph_kind":"repository_module_tree","anchor_path":"D:/a.cs","nodes":[],"edges":[]}""";
48 Assert.True(GraphDocumentJson.TryParse(json, out var doc, out var err), err);
49 Assert.NotNull(doc);
50 Assert.Equal(GraphKind.RepositoryModuleTree, doc!.Kind);
51 }
52
53 [Fact]
54 public void TryParse_CodeIntentGraphKind_Canonical_Parsed()
55 {
56 const string json = """{"mode":"subgraph","graph_kind":"code_intent_code_navigation_map","anchor_path":"D:/a.cs","nodes":[],"edges":[]}""";
57 Assert.True(GraphDocumentJson.TryParse(json, out var doc, out var err), err);
58 Assert.NotNull(doc);
59 Assert.Equal(GraphKind.CodeIntent, doc!.Kind);
60 }
61
62 [Fact]
63 public void TryParse_CodeIntentGraphKind_Legacy_Still_Parsed()
64 {
65 const string json = """{"mode":"subgraph","graph_kind":"code_intent_semantic_map","anchor_path":"D:/a.cs","nodes":[],"edges":[]}""";
66 Assert.True(GraphDocumentJson.TryParse(json, out var doc, out var err), err);
67 Assert.NotNull(doc);
68 Assert.Equal(GraphKind.CodeIntent, doc!.Kind);
69 }
70
71 [Fact]
72 public void TryParseRoot_RelatedMode_BuildsStarGraphDocument()
73 {
74 const string json = """
75 {
76 "mode":"related",
77 "anchor_path":"D:/w/A.cs",
78 "items":[
79 {"path":"D:/w/B.cs","kind":"project_peer","rationale":"peer"}
80 ]
81 }
82 """;
83 Assert.True(GraphDocumentJson.TryParse(json, out var doc, out var err), err);
84 Assert.NotNull(doc);
85 Assert.Equal(GraphKind.RelatedFiles, doc!.Kind);
86 Assert.Equal(2, doc.Nodes.Count);
87 Assert.Single(doc.Edges);
88 }
89}
90
View only · write via MCP/CIDE