Forge
csharpcf25d736
1using Avalonia.Media;
2using CascadeIDE.Cockpit.PrimitivesKit;
3using CascadeIDE.Features.WorkspaceNavigation.Application;
4using CascadeIDE.Services;
5using Xunit;
6
7namespace CascadeIDE.Tests;
8
9public sealed class ControlFlowEditorNodePainterTests
10{
11 [Fact]
12 public void ResolveFillBrush_matches_cfg_palette_for_call_and_handler()
13 {
14 var call = (SolidColorBrush)ControlFlowEditorNodePainter.ResolveFillBrush("call_step", ControlFlowNodeVisualKind.Circle);
15 var handler = (SolidColorBrush)ControlFlowEditorNodePainter.ResolveFillBrush("handler_step", ControlFlowNodeVisualKind.Circle);
16 var condition = (SolidColorBrush)ControlFlowEditorNodePainter.ResolveFillBrush(
17 "condition_step",
18 ControlFlowNodeVisualKind.Diamond);
19
20 Assert.Equal(CockpitPrimitivesPalette.CodeNavigationMap.CallFill, call.Color);
21 Assert.Equal(CockpitPrimitivesPalette.CodeNavigationMap.HandlerFill, handler.Color);
22 Assert.Equal(CockpitPrimitivesPalette.CodeNavigationMap.ConditionFill, condition.Color);
23 }
24
25 [Fact]
26 public void BuildGutterLineVisuals_includes_node_kind_for_painter()
27 {
28 var scene = new ViewModels.CodeNavigationMapGraphSceneVm
29 {
30 Presentation = ViewModels.CodeNavigationMapGraphPresentationKind.CodeControlFlow,
31 Nodes =
32 [
33 new ViewModels.CodeNavigationMapGraphNodeLayout
34 {
35 Id = "h",
36 Kind = "handler_step",
37 FullPath = @"D:\w\A.cs",
38 Label = "catch",
39 Center = default,
40 Radius = 8,
41 IsAnchor = false,
42 LineStart = 12
43 }
44 ],
45 Edges = []
46 };
47
48 var visuals = CodeNavigationControlFlowGlyphComposer.BuildGutterLineVisuals(scene);
49 Assert.Single(visuals);
50 Assert.Equal("handler_step", visuals[0].NodeKind);
51 Assert.Equal(ControlFlowNodeVisualKind.Circle, visuals[0].VisualKind);
52 }
53}
54
View only · write via MCP/CIDE