feat(adminui): DriverTagPicker modal + 9 static address builders
- DriverTagPicker shell: modal chrome + per-driver picker body rendered as ChildContent. - 9 picker bodies (Modbus/AbCip/AbLegacy/S7/TwinCat/FOCAS/ OpcUaClient/Galaxy/Historian.Wonderware). 5 have computed builder logic + unit tests; 4 are free-text passthroughs (live browse for OPC UA + Galaxy is a documented follow-up). - Each typed driver page gets a "Pick address" button that opens the modal with the matching body. Picked address surfaces in the modal footer for manual copy — no JS interop in v1.
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
using Shouldly;
|
||||
using Xunit;
|
||||
using ZB.MOM.WW.OtOpcUa.AdminUI.Components.Shared.Drivers.Pickers;
|
||||
|
||||
namespace ZB.MOM.WW.OtOpcUa.AdminUI.Tests.Pickers;
|
||||
|
||||
public sealed class S7AddressBuilderTests
|
||||
{
|
||||
[Theory]
|
||||
[InlineData("DB", 10, 20, "REAL", "DB10.DBD20:REAL")]
|
||||
[InlineData("DB", 1, 0, "X", "DB1.DBX0.0:X")]
|
||||
[InlineData("DB", 5, 4, "W", "DB5.DBW4:W")]
|
||||
[InlineData("DB", 2, 6, "B", "DB2.DBB6:B")]
|
||||
[InlineData("M", 1, 0, "X", "M0.0:X")]
|
||||
[InlineData("M", 1, 4, "W", "M4:W")]
|
||||
[InlineData("I", 1, 0, "B", "I0:B")]
|
||||
[InlineData("Q", 1, 2, "W", "Q2:W")]
|
||||
public void Build_Canonical(string area, int dbNumber, int offset, string s7Type, string expected)
|
||||
=> S7AddressBuilder.Build(area, dbNumber, offset, s7Type).ShouldBe(expected);
|
||||
}
|
||||
Reference in New Issue
Block a user