docs: backfill XML documentation across 756 files
v2-ci / build (push) Failing after 1m43s
v2-ci / unit-tests (tests/Core/ZB.MOM.WW.OtOpcUa.Cluster.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Runtime.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (push) Has been skipped

Adds <summary>, <param>, <typeparam>, and <inheritdoc/> tags to public
members surfaced by commentchecker — resolves 5,847 of 5,869 issues
(99.6%) across three /fixdocs passes.
This commit is contained in:
Joseph Doherty
2026-05-28 08:10:17 -04:00
parent f9fc7dd2e1
commit 64e3fbe035
756 changed files with 9876 additions and 96 deletions
@@ -8,6 +8,7 @@ public sealed class MelsecAddressTests
{
// --- X / Y hex vs octal family trap ---
/// <summary>Verifies that Q-series and iQR family X inputs parse as hexadecimal.</summary>
[Theory]
[InlineData("X0", (ushort)0)]
[InlineData("X9", (ushort)9)]
@@ -20,6 +21,7 @@ public sealed class MelsecAddressTests
public void XInputToDiscrete_QLiQR_parses_hex(string x, ushort expected)
=> MelsecAddress.XInputToDiscrete(x, MelsecFamily.Q_L_iQR).ShouldBe(expected);
/// <summary>Verifies that F-series and iQF family X inputs parse as octal.</summary>
[Theory]
[InlineData("X0", (ushort)0)]
[InlineData("X7", (ushort)7)]
@@ -29,18 +31,23 @@ public sealed class MelsecAddressTests
public void XInputToDiscrete_FiQF_parses_octal(string x, ushort expected)
=> MelsecAddress.XInputToDiscrete(x, MelsecFamily.F_iQF).ShouldBe(expected);
/// <summary>Verifies that Q-series and iQR family Y outputs parse as hexadecimal.</summary>
[Theory]
[InlineData("Y0", (ushort)0)]
[InlineData("Y1F", (ushort)31)]
public void YOutputToCoil_QLiQR_parses_hex(string y, ushort expected)
=> MelsecAddress.YOutputToCoil(y, MelsecFamily.Q_L_iQR).ShouldBe(expected);
/// <summary>Verifies that F-series and iQF family Y outputs parse as octal.</summary>
[Theory]
[InlineData("Y0", (ushort)0)]
[InlineData("Y17", (ushort)15)]
public void YOutputToCoil_FiQF_parses_octal(string y, ushort expected)
=> MelsecAddress.YOutputToCoil(y, MelsecFamily.F_iQF).ShouldBe(expected);
/// <summary>
/// Verifies that the same address string decodes to different values depending on the family.
/// </summary>
[Fact]
public void Same_address_string_decodes_differently_between_families()
{
@@ -50,17 +57,22 @@ public sealed class MelsecAddressTests
MelsecAddress.XInputToDiscrete("X20", MelsecFamily.F_iQF).ShouldBe((ushort)16);
}
/// <summary>Verifies that non-octal X input addresses are rejected for F-series and iQF families.</summary>
[Theory]
[InlineData("X8")] // 8 is non-octal
[InlineData("X12G")] // G is non-hex
public void XInputToDiscrete_FiQF_rejects_non_octal(string bad)
=> Should.Throw<ArgumentException>(() => MelsecAddress.XInputToDiscrete(bad, MelsecFamily.F_iQF));
/// <summary>Verifies that non-hexadecimal X input addresses are rejected for Q-series and iQR families.</summary>
[Theory]
[InlineData("X12G")]
public void XInputToDiscrete_QLiQR_rejects_non_hex(string bad)
=> Should.Throw<ArgumentException>(() => MelsecAddress.XInputToDiscrete(bad, MelsecFamily.Q_L_iQR));
/// <summary>
/// Verifies that the bank base from assignment blocks is honored for X input addresses.
/// </summary>
[Fact]
public void XInputToDiscrete_honors_bank_base_from_assignment_block()
{
@@ -71,6 +83,7 @@ public sealed class MelsecAddressTests
// --- M-relay (decimal, both families) ---
/// <summary>Verifies that M relay addresses parse as decimal.</summary>
[Theory]
[InlineData("M0", (ushort)0)]
[InlineData("M10", (ushort)10)] // M addresses are DECIMAL, not hex or octal
@@ -79,16 +92,23 @@ public sealed class MelsecAddressTests
public void MRelayToCoil_parses_decimal(string m, ushort expected)
=> MelsecAddress.MRelayToCoil(m).ShouldBe(expected);
/// <summary>
/// Verifies that the bank base is honored for M relay addresses.
/// </summary>
[Fact]
public void MRelayToCoil_honors_bank_base()
=> MelsecAddress.MRelayToCoil("M0", mBankBase: 512).ShouldBe((ushort)512);
/// <summary>
/// Verifies that non-numeric M relay addresses are rejected.
/// </summary>
[Fact]
public void MRelayToCoil_rejects_non_numeric()
=> Should.Throw<ArgumentException>(() => MelsecAddress.MRelayToCoil("M1F"));
// --- D-register (decimal, both families) ---
/// <summary>Verifies that D register addresses parse as decimal.</summary>
[Theory]
[InlineData("D0", (ushort)0)]
[InlineData("D100", (ushort)100)]
@@ -96,16 +116,25 @@ public sealed class MelsecAddressTests
public void DRegisterToHolding_parses_decimal(string d, ushort expected)
=> MelsecAddress.DRegisterToHolding(d).ShouldBe(expected);
/// <summary>
/// Verifies that the bank base is honored for D register addresses.
/// </summary>
[Fact]
public void DRegisterToHolding_honors_bank_base()
=> MelsecAddress.DRegisterToHolding("D10", dBankBase: 4096).ShouldBe((ushort)4106);
/// <summary>
/// Verifies that empty D register addresses are rejected.
/// </summary>
[Fact]
public void DRegisterToHolding_rejects_empty()
=> Should.Throw<ArgumentException>(() => MelsecAddress.DRegisterToHolding("D"));
// --- overflow ---
/// <summary>
/// Verifies that X input addresses with overflow are rejected.
/// </summary>
[Fact]
public void XInputToDiscrete_overflow_throws()
{