csharpdeeb25a2 | 1 | #nullable enable |
| 2 | using Avalonia; |
| 3 | using CascadeIDE.Cockpit.Graph.Layout; |
| 4 | using CascadeIDE.ViewModels; |
| 5 | using Xunit; |
| 6 | |
| 7 | namespace CascadeIDE.Tests; |
| 8 | |
| 9 | public sealed class CodeNavigationMapGraphSceneProjectionTests |
| 10 | { |
| 11 | [Fact] |
| 12 | public void RoundTrip_PreservesLoopGroupIdAndControlFlowMainAxis() |
| 13 | { |
| 14 | var layout = new GraphLayoutScene |
| 15 | { |
| 16 | Nodes = |
| 17 | [ |
| 18 | new GraphLayoutNode |
| 19 | { |
| 20 | Id = "a", |
| 21 | Kind = "anchor", |
| 22 | FullPath = "p", |
| 23 | Label = "A", |
| 24 | Center = new Point(1, 2), |
| 25 | Radius = 10, |
| 26 | IsAnchor = true, |
| 27 | LoopGroupId = null, |
| 28 | }, |
| 29 | new GraphLayoutNode |
| 30 | { |
| 31 | Id = "b", |
| 32 | Kind = "loop_step", |
| 33 | FullPath = "p", |
| 34 | Label = "for", |
| 35 | Center = new Point(3, 4), |
| 36 | Radius = 9, |
| 37 | IsAnchor = false, |
| 38 | LoopGroupId = 7, |
| 39 | }, |
| 40 | ], |
| 41 | Edges = [], |
| 42 | ControlFlowMainAxis = GraphControlFlowMainAxis.Horizontal, |
| 43 | }; |
| 44 | |
| 45 | var vm = CodeNavigationMapGraphSceneProjection.ToViewModel(layout, 200, 120); |
| 46 | Assert.Equal(7, vm.Nodes[1].LoopGroupId); |
| 47 | Assert.Equal(GraphControlFlowMainAxis.Horizontal, vm.ControlFlowMainAxis); |
| 48 | |
| 49 | var back = CodeNavigationMapGraphSceneProjection.FromViewModel(vm); |
| 50 | Assert.Equal(7, back.Nodes[1].LoopGroupId); |
| 51 | Assert.Equal(GraphControlFlowMainAxis.Horizontal, back.ControlFlowMainAxis); |
| 52 | } |
| 53 | } |
| 54 | |
View only · write via MCP/CIDE