From ee5d7ad51e8dedc70ee9084659b9e2ca774b984c Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Fri, 22 May 2026 09:33:19 -0400 Subject: [PATCH] fix(driver-ablegacy): fix CS9124 build error and update stale status-mapper test EffectiveCipPath now references ParsedAddress/Profile properties instead of the captured primary-constructor parameters to avoid CS9124 (param captured into enclosing type AND used to init a member). NonZero_libplctag_status_maps_via_AbLegacyStatusMapper updated to pass (int)Status.ErrorNotFound rather than the stale magic integer -14 that the old mapper happened to handle but the new enum-based mapper does not. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../ZB.MOM.WW.OtOpcUa.Driver.AbLegacy/AbLegacyDriver.cs | 6 +++--- .../AbLegacyReadWriteTests.cs | 5 ++++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.AbLegacy/AbLegacyDriver.cs b/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.AbLegacy/AbLegacyDriver.cs index acd86ce..4bf1413 100644 --- a/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.AbLegacy/AbLegacyDriver.cs +++ b/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.AbLegacy/AbLegacyDriver.cs @@ -567,9 +567,9 @@ public sealed class AbLegacyDriver : IDriver, IReadable, IWritable, ITagDiscover /// that a SLC 500 misconfigured without an explicit path still gets the required /// 1,0 backplane route. MicroLogix has an empty default by design (direct EIP). /// - public string EffectiveCipPath => parsedAddress.CipPath.Length > 0 - ? parsedAddress.CipPath - : profile.DefaultCipPath; + public string EffectiveCipPath => ParsedAddress.CipPath.Length > 0 + ? ParsedAddress.CipPath + : Profile.DefaultCipPath; /// /// Per-tag cached runtimes. diff --git a/tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.AbLegacy.Tests/AbLegacyReadWriteTests.cs b/tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.AbLegacy.Tests/AbLegacyReadWriteTests.cs index b71ade6..3804fb4 100644 --- a/tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.AbLegacy.Tests/AbLegacyReadWriteTests.cs +++ b/tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.AbLegacy.Tests/AbLegacyReadWriteTests.cs @@ -1,3 +1,4 @@ +using libplctag; using Shouldly; using Xunit; using ZB.MOM.WW.OtOpcUa.Core.Abstractions; @@ -65,10 +66,12 @@ public sealed class AbLegacyReadWriteTests [Fact] public async Task NonZero_libplctag_status_maps_via_AbLegacyStatusMapper() { + // Use the real libplctag.Status enum value rather than a raw integer so the test + // stays correct if the wrapper renumbers its ordinals (Driver.AbLegacy-010). var (drv, factory) = NewDriver( new AbLegacyTagDefinition("X", "ab://10.0.0.5/1,0", "N7:0", AbLegacyDataType.Int)); await drv.InitializeAsync("{}", CancellationToken.None); - factory.Customise = p => new FakeAbLegacyTag(p) { Status = -14 }; + factory.Customise = p => new FakeAbLegacyTag(p) { Status = (int)Status.ErrorNotFound }; var snapshots = await drv.ReadAsync(["X"], CancellationToken.None); snapshots.Single().StatusCode.ShouldBe(AbLegacyStatusMapper.BadNodeIdUnknown);