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
@@ -9,6 +9,11 @@ public sealed class ModbusAddressParserTests
{
// ----- Bare Modicon-only forms inherit #136 behaviour; one sanity row per region. -----
/// <summary>Verifies that bare Modicon address forms inherit their data type from region defaults.</summary>
/// <param name="addr">The Modicon address string to parse.</param>
/// <param name="region">The expected Modbus region.</param>
/// <param name="offset">The expected zero-based register offset.</param>
/// <param name="type">The expected data type inferred from the region.</param>
[Theory]
[InlineData("40001", ModbusRegion.HoldingRegisters, 0, ModbusDataType.Int16)]
[InlineData("400001", ModbusRegion.HoldingRegisters, 0, ModbusDataType.Int16)]
@@ -29,6 +34,10 @@ public sealed class ModbusAddressParserTests
// ----- Mnemonic forms — HR / IR / C / DI -----
/// <summary>Verifies that mnemonic region forms (HR, IR, C, DI) parse correctly.</summary>
/// <param name="addr">The mnemonic address string to parse.</param>
/// <param name="region">The expected Modbus region.</param>
/// <param name="offset">The expected zero-based register offset.</param>
[Theory]
[InlineData("HR1", ModbusRegion.HoldingRegisters, 0)]
[InlineData("HR65536", ModbusRegion.HoldingRegisters, 65535)]
@@ -46,6 +55,9 @@ public sealed class ModbusAddressParserTests
// ----- Bit suffix .N -----
/// <summary>Verifies that bit suffix notation sets the expected bit position and data type.</summary>
/// <param name="addr">The address string with bit suffix to parse.</param>
/// <param name="expectedBit">The expected bit index within the register.</param>
[Theory]
[InlineData("40001.0", 0)]
[InlineData("40001.5", 5)]
@@ -58,6 +70,7 @@ public sealed class ModbusAddressParserTests
p.DataType.ShouldBe(ModbusDataType.BitInRegister);
}
/// <summary>Verifies that bit suffix notation combined with explicit type specification is rejected.</summary>
[Fact]
public void Bit_Plus_Explicit_Type_Rejected()
{
@@ -65,6 +78,7 @@ public sealed class ModbusAddressParserTests
.Message.ShouldContain("Bit suffix");
}
/// <summary>Verifies that bit positions outside the valid 0-15 range are rejected.</summary>
[Fact]
public void Bit_Above_15_Rejected()
{
@@ -80,6 +94,9 @@ public sealed class ModbusAddressParserTests
// `:BCD_32` for 32-bit BCD (Ignition HRBCD_32). The pre-#146 `:DI`/`:L`/`:UDI`/`:UL`/
// `:LI`/`:ULI`/`:LBCD` aliases are removed — they conflict with the Wonderware mapping
// and have no clear vendor precedent.
/// <summary>Verifies that type code suffixes parse to the expected data type.</summary>
/// <param name="addr">The address string with type code suffix to parse.</param>
/// <param name="expected">The expected data type.</param>
[Theory]
[InlineData("40001:BOOL", ModbusDataType.Bool)]
[InlineData("40001:S", ModbusDataType.Int16)]
@@ -99,6 +116,8 @@ public sealed class ModbusAddressParserTests
ModbusAddressParser.Parse(addr).DataType.ShouldBe(expected);
}
/// <summary>Verifies that pre-#146 type code aliases are rejected with a clear diagnostic.</summary>
/// <param name="addr">The address string containing a removed alias type code.</param>
[Theory]
[InlineData("40001:DI")] // pre-#146 alias removed
[InlineData("40001:L")]
@@ -116,6 +135,9 @@ public sealed class ModbusAddressParserTests
.Message.ShouldContain("Unknown type code");
}
/// <summary>Verifies that string type notation carries the expected string length.</summary>
/// <param name="addr">The address string with STR type and length to parse.</param>
/// <param name="expectedLen">The expected string length.</param>
[Theory]
[InlineData("40001:STR1", 1)]
[InlineData("40001:STR20", 20)]
@@ -127,6 +149,7 @@ public sealed class ModbusAddressParserTests
p.StringLength.ShouldBe((ushort)expectedLen);
}
/// <summary>Verifies that string type notation without length is rejected.</summary>
[Fact]
public void STR_Without_Length_Rejected()
{
@@ -134,6 +157,7 @@ public sealed class ModbusAddressParserTests
.Message.ShouldContain("STR");
}
/// <summary>Verifies that string length of zero is rejected.</summary>
[Fact]
public void STR_Length_Zero_Rejected()
{
@@ -141,6 +165,7 @@ public sealed class ModbusAddressParserTests
.Message.ShouldContain("positive");
}
/// <summary>Verifies that unknown type codes are rejected with a catalog of valid codes.</summary>
[Fact]
public void Unknown_Type_Code_Rejected_With_Catalog()
{
@@ -150,6 +175,7 @@ public sealed class ModbusAddressParserTests
// ----- Region-type compatibility -----
/// <summary>Verifies that float types are rejected for coil region.</summary>
[Fact]
public void Coils_With_Float_Type_Rejected()
{
@@ -157,6 +183,7 @@ public sealed class ModbusAddressParserTests
.Message.ShouldContain("only supports Bool");
}
/// <summary>Verifies that integer types are rejected for discrete input region.</summary>
[Fact]
public void DiscreteInputs_With_Int_Type_Rejected()
{
@@ -166,6 +193,9 @@ public sealed class ModbusAddressParserTests
// ----- Byte order modifiers — all four -----
/// <summary>Verifies that byte order modifiers parse to the expected ordering.</summary>
/// <param name="addr">The address string with byte order modifier to parse.</param>
/// <param name="expected">The expected byte order.</param>
[Theory]
[InlineData("40001:F:ABCD", ModbusByteOrder.BigEndian)]
[InlineData("40001:F:CDAB", ModbusByteOrder.WordSwap)]
@@ -177,6 +207,7 @@ public sealed class ModbusAddressParserTests
ModbusAddressParser.Parse(addr).ByteOrder.ShouldBe(expected);
}
/// <summary>Verifies that unknown byte order codes are rejected with a catalog of valid codes.</summary>
[Fact]
public void Unknown_Byte_Order_Rejected_With_Catalog()
{
@@ -184,6 +215,7 @@ public sealed class ModbusAddressParserTests
.Message.ShouldContain("Valid: ABCD, CDAB, BADC, DCBA");
}
/// <summary>Verifies that empty byte order field defaults to big-endian.</summary>
[Fact]
public void Empty_Order_Field_Means_Default()
{
@@ -198,6 +230,9 @@ public sealed class ModbusAddressParserTests
// ----- Array count -----
/// <summary>Verifies that array count notation parses to the expected count.</summary>
/// <param name="addr">The address string with array count to parse.</param>
/// <param name="expectedCount">The expected array element count.</param>
[Theory]
[InlineData("40001:I:ABCD:1", 1)]
[InlineData("40001:F:5", 5)]
@@ -208,6 +243,7 @@ public sealed class ModbusAddressParserTests
ModbusAddressParser.Parse(addr).ArrayCount.ShouldBe(expectedCount);
}
/// <summary>Verifies that array count of zero is rejected.</summary>
[Fact]
public void Array_Count_Zero_Rejected()
{
@@ -215,6 +251,7 @@ public sealed class ModbusAddressParserTests
.Message.ShouldContain("positive");
}
/// <summary>Verifies that non-numeric array count is rejected.</summary>
[Fact]
public void Array_Count_NonNumeric_Rejected()
{
@@ -222,6 +259,7 @@ public sealed class ModbusAddressParserTests
.Message.ShouldContain("positive");
}
/// <summary>Verifies that bit suffix combined with array count is rejected.</summary>
[Fact]
public void Bit_Plus_Array_Rejected()
{
@@ -231,6 +269,7 @@ public sealed class ModbusAddressParserTests
// ----- Composition / examples -----
/// <summary>Verifies parsing of float with word-swap byte ordering.</summary>
[Fact]
public void Worked_Example_Float_With_Word_Swap()
{
@@ -242,6 +281,7 @@ public sealed class ModbusAddressParserTests
p.ArrayCount.ShouldBeNull();
}
/// <summary>Verifies parsing of Int16 array with explicit type code.</summary>
[Fact]
public void Worked_Example_Int16_Array()
{
@@ -253,6 +293,7 @@ public sealed class ModbusAddressParserTests
p.ByteOrder.ShouldBe(ModbusByteOrder.BigEndian);
}
/// <summary>Verifies parsing of Int32 array using the :I type code.</summary>
[Fact]
public void Worked_Example_Int32_Array_Via_I_Code()
{
@@ -264,6 +305,7 @@ public sealed class ModbusAddressParserTests
p.ArrayCount.ShouldBe(10);
}
/// <summary>Verifies parsing of float array with word-swap and 6-digit address.</summary>
[Fact]
public void Worked_Example_Float_Array_Word_Swap_6_Digit()
{
@@ -275,6 +317,7 @@ public sealed class ModbusAddressParserTests
p.ArrayCount.ShouldBe(5);
}
/// <summary>Verifies parsing of string type with specified length.</summary>
[Fact]
public void Worked_Example_String_With_Length()
{
@@ -284,6 +327,7 @@ public sealed class ModbusAddressParserTests
p.ArrayCount.ShouldBeNull(); // strings ARE multi-register but they are not "array of string"
}
/// <summary>Verifies that TryParse returns a diagnostic on parse failure.</summary>
[Fact]
public void TryParse_Returns_Diagnostic_On_Failure()
{
@@ -292,6 +336,7 @@ public sealed class ModbusAddressParserTests
err.ShouldNotBeNull();
}
/// <summary>Verifies that TryParse returns a result on successful parse.</summary>
[Fact]
public void TryParse_Returns_Result_On_Success()
{
@@ -304,6 +349,7 @@ public sealed class ModbusAddressParserTests
p.ArrayCount.ShouldBe(3);
}
/// <summary>Verifies that addresses with too many colon-separated fields are rejected.</summary>
[Fact]
public void Too_Many_Colons_Rejected()
{