feat(centralui): BindingGroupBuilder.ApplyObject — per-module bulk rewrite to <object>.<member>, blank clears

This commit is contained in:
Joseph Doherty
2026-08-20 15:54:47 -04:00
parent 5da7003e88
commit 2fb1c8ee14
2 changed files with 49 additions and 0 deletions
@@ -111,4 +111,35 @@ public class BindingGroupBuilderTests
var rows = new[] { Row("M.A", "A", 1, "Obj.A"), Row("M.B", "B", 1, "Obj.Other") };
Assert.True(Assert.Single(BindingGroupBuilder.Build(rows)).IsObjectMixed);
}
[Fact]
public void ApplyObject_RewritesEveryMember_AndSetsConnection()
{
var g = Assert.Single(BindingGroupBuilder.Build(new[]
{
Row("RightMESReceiver.MoveInFlag", "MoveInFlag", 1, "MESReceiver_024.MoveInFlag"),
Row("RightMESReceiver.ScanStateCmd", "ScanStateCmd", null, null),
}));
var changes = BindingGroupBuilder.ApplyObject(g, connectionId: 1, objectPath: " MESReceiver_022. ");
Assert.Equal(2, changes.Count);
Assert.Equal(("RightMESReceiver.MoveInFlag", 1, "MESReceiver_022.MoveInFlag"), (changes[0].CanonicalName, changes[0].ConnectionId, changes[0].Override));
Assert.Equal(("RightMESReceiver.ScanStateCmd", 1, "MESReceiver_022.ScanStateCmd"), (changes[1].CanonicalName, changes[1].ConnectionId, changes[1].Override));
}
[Fact]
public void ApplyObject_NestedTail_KeepsNesting()
{
var g = Assert.Single(BindingGroupBuilder.Build(new[] { Row("LeftReactorSide.LeakTest.DeltaVac", "DeltaVac", 1, null) }));
var c = Assert.Single(BindingGroupBuilder.ApplyObject(g, 1, "Left_002"));
Assert.Equal("Left_002.LeakTest.DeltaVac", c.Override);
}
[Fact]
public void ApplyObject_EmptyObject_ClearsOverrides_KeepsConnection()
{
var g = Assert.Single(BindingGroupBuilder.Build(new[] { Row("M.A", "A", 1, "Obj.A") }));
var c = Assert.Single(BindingGroupBuilder.ApplyObject(g, 2, ""));
Assert.Null(c.Override);
Assert.Equal(2, c.ConnectionId);
}
}