docs: complete XML doc comments via fixdocs (2757 to 131 findings)

Add missing <returns>/<param>/<summary>/<typeparam> tags and clean up
misused inheritdoc across 481 files so the documented API surface is
complete. Documentation-only (zero code lines changed). The 131 remaining
findings are inheritdoc-style warnings deliberately left to preserve
hand-written implementation rationale (plan-decision notes, race-condition
explanations).
This commit is contained in:
Joseph Doherty
2026-06-03 12:34:34 -04:00
parent c6d9b20d9f
commit bd6c0b4d3d
481 changed files with 2550 additions and 1668 deletions
@@ -36,6 +36,7 @@ public sealed class AddressingGrammarTests
}
/// <summary>Verifies that 5-digit and 6-digit Modicon formats map to the same wire offset.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task Modicon_5_And_6_Digit_Both_Map_To_Same_Wire_Offset()
{
@@ -54,6 +55,7 @@ public sealed class AddressingGrammarTests
}
/// <summary>Verifies that Float32 values roundtrip correctly with CDAB byte order.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task Float32_With_CDAB_Roundtrips_Through_Wire()
{
@@ -76,6 +78,7 @@ public sealed class AddressingGrammarTests
}
/// <summary>Verifies that Int16 array reads surface as typed arrays.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task Int16_Array_Reads_Surface_As_Typed_Array()
{
@@ -93,6 +96,7 @@ public sealed class AddressingGrammarTests
}
/// <summary>Verifies that block read coalescing reduces PDU count end-to-end.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task Block_Read_Coalescing_Reduces_PDU_Count_End_To_End()
{
@@ -15,6 +15,7 @@ namespace ZB.MOM.WW.OtOpcUa.Driver.Modbus.IntegrationTests.DL205;
public sealed class DL205BcdQuirkTests(ModbusSimulatorFixture sim)
{
/// <summary>Verifies DL205 binary-coded-decimal register decodes as decimal value 1234.</summary>
/// <returns>A task that represents the asynchronous test.</returns>
[Fact]
public async Task DL205_BCD16_decodes_HR1072_as_decimal_1234()
{
@@ -15,6 +15,7 @@ namespace ZB.MOM.WW.OtOpcUa.Driver.Modbus.IntegrationTests.DL205;
public sealed class DL205CoilMappingTests(ModbusSimulatorFixture sim)
{
/// <summary>Verifies that DirectLOGIC Y0 output maps to Modbus coil 2048.</summary>
/// <returns>A task that represents the asynchronous test.</returns>
[Fact]
public async Task DL260_Y0_maps_to_coil_2048()
{
@@ -42,6 +43,7 @@ public sealed class DL205CoilMappingTests(ModbusSimulatorFixture sim)
}
/// <summary>Verifies that DirectLOGIC C0 relay maps to Modbus coil 3072.</summary>
/// <returns>A task that represents the asynchronous test.</returns>
[Fact]
public async Task DL260_C0_maps_to_coil_3072()
{
@@ -69,6 +71,7 @@ public sealed class DL205CoilMappingTests(ModbusSimulatorFixture sim)
}
/// <summary>Verifies that a scratch DirectLOGIC C relay supports write and read operations.</summary>
/// <returns>A task that represents the asynchronous test.</returns>
[Fact]
public async Task DL260_scratch_Crelay_supports_write_then_read()
{
@@ -17,6 +17,7 @@ namespace ZB.MOM.WW.OtOpcUa.Driver.Modbus.IntegrationTests.DL205;
public sealed class DL205ExceptionCodeTests(ModbusSimulatorFixture sim)
{
/// <summary>Verifies that DL205 FC03 reads at unmapped registers return BadOutOfRange status.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task DL205_FC03_at_unmapped_register_returns_BadOutOfRange()
{
@@ -17,6 +17,7 @@ namespace ZB.MOM.WW.OtOpcUa.Driver.Modbus.IntegrationTests.DL205;
public sealed class DL205FloatCdabQuirkTests(ModbusSimulatorFixture sim)
{
/// <summary>Verifies that DL205 float32 CDAB word order correctly decodes 1.5f from HR1056.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task DL205_Float32_CDAB_decodes_1_5f_from_HR1056()
{
@@ -26,6 +26,7 @@ namespace ZB.MOM.WW.OtOpcUa.Driver.Modbus.IntegrationTests.DL205;
public sealed class DL205SmokeTests(ModbusSimulatorFixture sim)
{
/// <summary>Verifies that DL205 roundtrip write then read of holding register succeeds.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task DL205_roundtrip_write_then_read_of_holding_register()
{
@@ -24,6 +24,7 @@ namespace ZB.MOM.WW.OtOpcUa.Driver.Modbus.IntegrationTests.DL205;
public sealed class DL205StringQuirkTests(ModbusSimulatorFixture sim)
{
/// <summary>Verifies that DL205 low-byte-first string packing correctly decodes "Hello" from HR1040.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task DL205_string_low_byte_first_decodes_Hello_from_HR1040()
{
@@ -17,6 +17,7 @@ namespace ZB.MOM.WW.OtOpcUa.Driver.Modbus.IntegrationTests.DL205;
public sealed class DL205VMemoryQuirkTests(ModbusSimulatorFixture sim)
{
/// <summary>Verifies that DL205 V2000 user memory octal address resolves to PDU address 0x0400.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task DL205_V2000_user_memory_resolves_to_PDU_0x0400_marker()
{
@@ -53,6 +54,7 @@ public sealed class DL205VMemoryQuirkTests(ModbusSimulatorFixture sim)
}
/// <summary>Verifies that DL205 V40400 system memory address resolves to PDU address 0x2100.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task DL205_V40400_system_memory_resolves_to_PDU_0x2100_marker()
{
@@ -22,6 +22,7 @@ namespace ZB.MOM.WW.OtOpcUa.Driver.Modbus.IntegrationTests.DL205;
public sealed class DL205XInputTests(ModbusSimulatorFixture sim)
{
/// <summary>Verifies that DL260 X20 octal maps to discrete input 16 and reads the ON state.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task DL260_X20_octal_maps_to_DiscreteInput_16_and_reads_ON()
{
@@ -64,6 +64,7 @@ public sealed class ExceptionInjectionTests(ModbusSimulatorFixture sim)
/// <param name="address">The Modbus register address to read.</param>
/// <param name="expectedStatus">The expected OPC UA status code.</param>
/// <param name="scenario">Scenario description for assertion messages.</param>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Theory]
[InlineData(1000, StatusBadNotSupported, "exc 0x01 (Illegal Function) -> BadNotSupported")]
[InlineData(1001, StatusBadOutOfRange, "exc 0x02 (Illegal Data Address) -> BadOutOfRange")]
@@ -82,6 +83,7 @@ public sealed class ExceptionInjectionTests(ModbusSimulatorFixture sim)
}
/// <summary>Verifies that reads at non-injected addresses return Good status.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task FC03_read_at_non_injected_address_returns_Good()
{
@@ -98,6 +100,7 @@ public sealed class ExceptionInjectionTests(ModbusSimulatorFixture sim)
/// <param name="address">The Modbus register address to write.</param>
/// <param name="expectedStatus">The expected OPC UA status code.</param>
/// <param name="scenario">Scenario description for assertion messages.</param>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Theory]
[InlineData(2000, StatusBadDeviceFailure, "exc 0x04 on FC06 -> BadDeviceFailure (CPU in PROGRAM mode)")]
[InlineData(2001, StatusBadDeviceFailure, "exc 0x06 on FC06 -> BadDeviceFailure (Server Busy)")]
@@ -26,6 +26,7 @@ public static class MitsubishiProfile
/// <summary>Builds Modbus driver options configured for the Mitsubishi profile.</summary>
/// <param name="host">The Modbus server hostname or IP address.</param>
/// <param name="port">The Modbus server port number.</param>
/// <returns>A <see cref="ModbusDriverOptions"/> instance configured for the Mitsubishi profile.</returns>
public static ModbusDriverOptions BuildOptions(string host, int port) => new()
{
Host = host,
@@ -20,6 +20,7 @@ namespace ZB.MOM.WW.OtOpcUa.Driver.Modbus.IntegrationTests.Mitsubishi;
public sealed class MitsubishiQuirkTests(ModbusSimulatorFixture sim)
{
/// <summary>Verifies that Mitsubishi D0 register fingerprint reads the expected value 0x1234.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Mitsubishi_D0_fingerprint_reads_0x1234()
{
@@ -36,6 +37,7 @@ public sealed class MitsubishiQuirkTests(ModbusSimulatorFixture sim)
}
/// <summary>Verifies that Mitsubishi Float32 with CDAB word order decodes correctly to 1.5 from D100.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Mitsubishi_Float32_CDAB_decodes_1_5f_from_D100()
{
@@ -62,6 +64,7 @@ public sealed class MitsubishiQuirkTests(ModbusSimulatorFixture sim)
}
/// <summary>Verifies that Mitsubishi D registers store binary values, not BCD.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Mitsubishi_D10_is_binary_not_BCD()
{
@@ -81,6 +84,7 @@ public sealed class MitsubishiQuirkTests(ModbusSimulatorFixture sim)
}
/// <summary>Verifies that reading a binary D register as BCD throws when the value contains non-decimal nibbles.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Mitsubishi_D10_as_BCD_throws_because_nibble_is_non_decimal()
{
@@ -102,6 +106,7 @@ public sealed class MitsubishiQuirkTests(ModbusSimulatorFixture sim)
}
/// <summary>Verifies that Mitsubishi Q/L/iQ-R X inputs use hex addressing and X210 maps correctly.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Mitsubishi_QLiQR_X210_hex_maps_to_DI_528_reads_ON()
{
@@ -134,6 +139,7 @@ public sealed class MitsubishiQuirkTests(ModbusSimulatorFixture sim)
}
/// <summary>Verifies that Mitsubishi M512 relay maps to coil address 512 and reads ON.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Mitsubishi_M512_maps_to_coil_512_reads_ON()
{
@@ -16,6 +16,7 @@ namespace ZB.MOM.WW.OtOpcUa.Driver.Modbus.IntegrationTests.Mitsubishi;
public sealed class MitsubishiSmokeTests(ModbusSimulatorFixture sim)
{
/// <summary>Verifies end-to-end write and read of a Mitsubishi holding register via the Modbus driver.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Mitsubishi_roundtrip_write_then_read_of_holding_register()
{
@@ -82,7 +82,8 @@ public sealed class ModbusSimulatorFixture : IAsyncDisposable
}
}
/// <inheritdoc />
/// <summary>Disposes the fixture asynchronously (no-op for this fixture).</summary>
/// <returns>A completed value task.</returns>
public ValueTask DisposeAsync() => ValueTask.CompletedTask;
}
@@ -25,6 +25,7 @@ namespace ZB.MOM.WW.OtOpcUa.Driver.Modbus.IntegrationTests.S7;
public sealed class S7_1500SmokeTests(ModbusSimulatorFixture sim)
{
/// <summary>Verifies that an S7-1500 roundtrip write then read of a holding register succeeds.</summary>
/// <returns>A task that represents the asynchronous test.</returns>
[Fact]
public async Task S7_1500_roundtrip_write_then_read_of_holding_register()
{
@@ -17,6 +17,7 @@ namespace ZB.MOM.WW.OtOpcUa.Driver.Modbus.IntegrationTests.S7;
public sealed class S7_ByteOrderTests(ModbusSimulatorFixture sim)
{
/// <summary>Verifies that S7 Float32 with ABCD byte order correctly decodes 1.5f from HR100.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task S7_Float32_ABCD_decodes_1_5f_from_HR100()
{
@@ -63,6 +64,7 @@ public sealed class S7_ByteOrderTests(ModbusSimulatorFixture sim)
}
/// <summary>Verifies that S7 Int32 with ABCD byte order correctly decodes 0x12345678 from HR300.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task S7_Int32_ABCD_decodes_0x12345678_from_HR300()
{
@@ -98,6 +100,7 @@ public sealed class S7_ByteOrderTests(ModbusSimulatorFixture sim)
}
/// <summary>Verifies that S7 DB1 fingerprint marker reads 0xABCD from HR0.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task S7_DB1_fingerprint_marker_at_HR0_reads_0xABCD()
{