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
@@ -8,6 +8,7 @@ namespace ZB.MOM.WW.OtOpcUa.Client.CLI.Tests;
public class AlarmsCommandTests
{
/// <summary>Verifies that Execute subscribes to alarms.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task Execute_SubscribesToAlarms()
{
@@ -33,6 +34,7 @@ public class AlarmsCommandTests
}
/// <summary>Verifies that Execute with node passes source node ID.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task Execute_WithNode_PassesSourceNodeId()
{
@@ -58,6 +60,7 @@ public class AlarmsCommandTests
}
/// <summary>Verifies that Execute with refresh requests condition refresh.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task Execute_WithRefresh_RequestsConditionRefresh()
{
@@ -83,6 +86,7 @@ public class AlarmsCommandTests
}
/// <summary>Verifies that refresh failure prints error.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task Execute_RefreshFailure_PrintsError()
{
@@ -110,6 +114,7 @@ public class AlarmsCommandTests
}
/// <summary>Verifies that Execute unsubscribes on cancellation.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task Execute_UnsubscribesOnCancellation()
{
@@ -132,6 +137,7 @@ public class AlarmsCommandTests
}
/// <summary>Verifies that Execute disconnects in finally block.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task Execute_DisconnectsInFinally()
{
@@ -9,6 +9,7 @@ namespace ZB.MOM.WW.OtOpcUa.Client.CLI.Tests;
public class BrowseCommandTests
{
/// <summary>Verifies that Execute prints browse results correctly.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Execute_PrintsBrowseResults()
{
@@ -37,6 +38,7 @@ public class BrowseCommandTests
}
/// <summary>Verifies that Execute browses from the specified node ID.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Execute_BrowsesFromSpecifiedNode()
{
@@ -60,6 +62,7 @@ public class BrowseCommandTests
}
/// <summary>Verifies that Execute browses from null node when not specified.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Execute_DefaultBrowsesFromNull()
{
@@ -81,6 +84,7 @@ public class BrowseCommandTests
}
/// <summary>Verifies that Execute browses only a single level when not recursive.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Execute_NonRecursive_BrowsesSingleLevel()
{
@@ -106,6 +110,7 @@ public class BrowseCommandTests
}
/// <summary>Verifies that Execute browses child nodes when recursive flag is set.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Execute_Recursive_BrowsesChildren()
{
@@ -129,6 +134,7 @@ public class BrowseCommandTests
}
/// <summary>Verifies that Execute disconnects and disposes in the finally block.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Execute_DisconnectsInFinally()
{
@@ -9,6 +9,7 @@ namespace ZB.MOM.WW.OtOpcUa.Client.CLI.Tests;
public class CommandBaseTests
{
/// <summary>Verifies that common options map to connection settings correctly.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task CommonOptions_MapToConnectionSettings_Correctly()
{
@@ -39,6 +40,7 @@ public class CommandBaseTests
}
/// <summary>Verifies that encrypt option maps to SignAndEncrypt.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task SecurityOption_Encrypt_MapsToSignAndEncrypt()
{
@@ -57,6 +59,7 @@ public class CommandBaseTests
}
/// <summary>Verifies that none option maps to None.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task SecurityOption_None_MapsToNone()
{
@@ -75,6 +78,7 @@ public class CommandBaseTests
}
/// <summary>Verifies that no failover URLs results in null FailoverUrls.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task NoFailoverUrls_FailoverUrlsIsNull()
{
@@ -13,6 +13,7 @@ namespace ZB.MOM.WW.OtOpcUa.Client.CLI.Tests;
public class CommandRangeValidationTests
{
/// <summary>Verifies that BrowseCommand rejects negative depth values with a command exception.</summary>
/// <returns>A task that represents the asynchronous test.</returns>
[Fact]
public async Task BrowseCommand_NegativeDepth_ThrowsCommandException()
{
@@ -30,6 +31,7 @@ public class CommandRangeValidationTests
}
/// <summary>Verifies that BrowseCommand rejects zero depth values with a command exception.</summary>
/// <returns>A task that represents the asynchronous test.</returns>
[Fact]
public async Task BrowseCommand_ZeroDepth_ThrowsCommandException()
{
@@ -47,6 +49,7 @@ public class CommandRangeValidationTests
}
/// <summary>Verifies that SubscribeCommand rejects zero interval values with a command exception.</summary>
/// <returns>A task that represents the asynchronous test.</returns>
[Fact]
public async Task SubscribeCommand_ZeroInterval_ThrowsCommandException()
{
@@ -65,6 +68,7 @@ public class CommandRangeValidationTests
}
/// <summary>Verifies that SubscribeCommand rejects negative interval values with a command exception.</summary>
/// <returns>A task that represents the asynchronous test.</returns>
[Fact]
public async Task SubscribeCommand_NegativeInterval_ThrowsCommandException()
{
@@ -82,6 +86,7 @@ public class CommandRangeValidationTests
}
/// <summary>Verifies that SubscribeCommand in recursive mode rejects zero max depth with a command exception.</summary>
/// <returns>A task that represents the asynchronous test.</returns>
[Fact]
public async Task SubscribeCommand_RecursiveZeroMaxDepth_ThrowsCommandException()
{
@@ -102,6 +107,7 @@ public class CommandRangeValidationTests
}
/// <summary>Verifies that SubscribeCommand rejects negative duration values with a command exception.</summary>
/// <returns>A task that represents the asynchronous test.</returns>
[Fact]
public async Task SubscribeCommand_NegativeDuration_ThrowsCommandException()
{
@@ -119,6 +125,7 @@ public class CommandRangeValidationTests
}
/// <summary>Verifies that AlarmsCommand rejects zero interval values with a command exception.</summary>
/// <returns>A task that represents the asynchronous test.</returns>
[Fact]
public async Task AlarmsCommand_ZeroInterval_ThrowsCommandException()
{
@@ -136,6 +143,7 @@ public class CommandRangeValidationTests
}
/// <summary>Verifies that HistoryReadCommand rejects negative max values with a command exception.</summary>
/// <returns>A task that represents the asynchronous test.</returns>
[Fact]
public async Task HistoryReadCommand_NegativeMax_ThrowsCommandException()
{
@@ -154,6 +162,7 @@ public class CommandRangeValidationTests
}
/// <summary>Verifies that HistoryReadCommand rejects zero interval values with a command exception.</summary>
/// <returns>A task that represents the asynchronous test.</returns>
[Fact]
public async Task HistoryReadCommand_ZeroInterval_ThrowsCommandException()
{
@@ -9,6 +9,7 @@ namespace ZB.MOM.WW.OtOpcUa.Client.CLI.Tests;
public class ConnectCommandTests
{
/// <summary>Verifies that execute prints connection info.</summary>
/// <returns>A task that represents the asynchronous test.</returns>
[Fact]
public async Task Execute_PrintsConnectionInfo()
{
@@ -40,6 +41,7 @@ public class ConnectCommandTests
}
/// <summary>Verifies that execute calls connect and disconnect.</summary>
/// <returns>A task that represents the asynchronous test.</returns>
[Fact]
public async Task Execute_CallsConnectAndDisconnect()
{
@@ -59,6 +61,7 @@ public class ConnectCommandTests
}
/// <summary>Verifies that execute disconnects on error.</summary>
/// <returns>A task that represents the asynchronous test.</returns>
[Fact]
public async Task Execute_DisconnectsOnError()
{
@@ -15,6 +15,7 @@ namespace ZB.MOM.WW.OtOpcUa.Client.CLI.Tests;
public class EventHandlerLifecycleTests
{
/// <summary>Verifies that SubscribeCommand detaches the DataChanged event handler after exit.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task SubscribeCommand_AfterExit_DataChangedEventHasNoSubscribers()
{
@@ -37,6 +38,7 @@ public class EventHandlerLifecycleTests
}
/// <summary>Verifies that AlarmsCommand detaches the AlarmEvent handler after exit.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task AlarmsCommand_AfterExit_AlarmEventHasNoSubscribers()
{
@@ -126,13 +126,13 @@ public sealed class FakeOpcUaClientService : IOpcUaClientService
/// <inheritdoc />
public ConnectionInfo? CurrentConnectionInfo => ConnectCalled ? ConnectionInfoResult : null;
/// <inheritdoc />
/// <summary>Raised when a subscribed node value changes.</summary>
public event EventHandler<DataChangedEventArgs>? DataChanged;
/// <inheritdoc />
/// <summary>Raised when an alarm event is received from the server.</summary>
public event EventHandler<AlarmEventArgs>? AlarmEvent;
/// <inheritdoc />
/// <summary>Raised when the connection state changes.</summary>
public event EventHandler<ConnectionStateChangedEventArgs>? ConnectionStateChanged;
/// <summary>True when at least one handler is attached to <see cref="DataChanged" />.</summary>
@@ -17,6 +17,7 @@ public sealed class FakeOpcUaClientServiceFactory : IOpcUaClientServiceFactory
}
/// <summary>Creates and returns the fake OPC UA client service.</summary>
/// <returns>The pre-configured <see cref="FakeOpcUaClientService"/> instance.</returns>
public IOpcUaClientService Create()
{
return _service;
@@ -10,6 +10,7 @@ namespace ZB.MOM.WW.OtOpcUa.Client.CLI.Tests;
public class HistoryReadCommandTests
{
/// <summary>Verifies RawRead execution prints values.</summary>
/// <returns>A task that represents the asynchronous test.</returns>
[Fact]
public async Task Execute_RawRead_PrintsValues()
{
@@ -44,6 +45,7 @@ public class HistoryReadCommandTests
}
/// <summary>Verifies RawRead execution calls HistoryReadRaw.</summary>
/// <returns>A task that represents the asynchronous test.</returns>
[Fact]
public async Task Execute_RawRead_CallsHistoryReadRaw()
{
@@ -65,6 +67,7 @@ public class HistoryReadCommandTests
}
/// <summary>Verifies AggregateRead execution calls HistoryReadAggregate.</summary>
/// <returns>A task that represents the asynchronous test.</returns>
[Fact]
public async Task Execute_AggregateRead_CallsHistoryReadAggregate()
{
@@ -87,6 +90,7 @@ public class HistoryReadCommandTests
}
/// <summary>Verifies AggregateRead execution prints aggregate info.</summary>
/// <returns>A task that represents the asynchronous test.</returns>
[Fact]
public async Task Execute_AggregateRead_PrintsAggregateInfo()
{
@@ -109,6 +113,7 @@ public class HistoryReadCommandTests
}
/// <summary>Verifies invalid aggregate throws CommandException.</summary>
/// <returns>A task that represents the asynchronous test.</returns>
[Fact]
public async Task Execute_InvalidAggregate_ThrowsCommandException()
{
@@ -129,6 +134,7 @@ public class HistoryReadCommandTests
}
/// <summary>Verifies disconnect is called in finally block.</summary>
/// <returns>A task that represents the asynchronous test.</returns>
[Fact]
public async Task Execute_DisconnectsInFinally()
{
@@ -14,6 +14,7 @@ namespace ZB.MOM.WW.OtOpcUa.Client.CLI.Tests;
public class InputValidationErrorsTests
{
/// <summary>Verifies that HistoryReadCommand with invalid start time throws CommandException.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task HistoryReadCommand_InvalidStartTime_ThrowsCommandException()
{
@@ -32,6 +33,7 @@ public class InputValidationErrorsTests
}
/// <summary>Verifies that HistoryReadCommand with invalid end time throws CommandException.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task HistoryReadCommand_InvalidEndTime_ThrowsCommandException()
{
@@ -50,6 +52,7 @@ public class InputValidationErrorsTests
}
/// <summary>Verifies that HistoryReadCommand with invalid aggregate throws CommandException.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task HistoryReadCommand_InvalidAggregate_ThrowsCommandException()
{
@@ -68,6 +71,7 @@ public class InputValidationErrorsTests
}
/// <summary>Verifies that ReadCommand with invalid node ID throws CommandException.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task ReadCommand_InvalidNodeId_ThrowsCommandException()
{
@@ -85,6 +89,7 @@ public class InputValidationErrorsTests
}
/// <summary>Verifies that SubscribeCommand with invalid node ID throws CommandException.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task SubscribeCommand_InvalidNodeId_ThrowsCommandException()
{
@@ -15,6 +15,7 @@ namespace ZB.MOM.WW.OtOpcUa.Client.CLI.Tests;
public class LoggerLifecycleTests
{
/// <summary>Verifies that ConfigureLogging disposes previous logger before reassigning.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task ConfigureLogging_DisposesPreviousLogger_BeforeReassigning()
{
@@ -9,6 +9,7 @@ namespace ZB.MOM.WW.OtOpcUa.Client.CLI.Tests;
public class ReadCommandTests
{
/// <summary>Verifies that execute prints the read value.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Execute_PrintsReadValue()
{
@@ -41,6 +42,7 @@ public class ReadCommandTests
}
/// <summary>Verifies that execute calls read value with correct node ID.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Execute_CallsReadValueWithCorrectNodeId()
{
@@ -60,6 +62,7 @@ public class ReadCommandTests
}
/// <summary>Verifies that execute disconnects in finally.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Execute_DisconnectsInFinally()
{
@@ -79,6 +82,7 @@ public class ReadCommandTests
}
/// <summary>Verifies that execute disconnects even on read error.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Execute_DisconnectsEvenOnReadError()
{
@@ -9,6 +9,7 @@ namespace ZB.MOM.WW.OtOpcUa.Client.CLI.Tests;
public class RedundancyCommandTests
{
/// <summary>Verifies that Execute prints redundancy information correctly.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Execute_PrintsRedundancyInfo()
{
@@ -36,6 +37,7 @@ public class RedundancyCommandTests
}
/// <summary>Verifies that Execute omits the Server URIs section when none are present.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Execute_NoServerUris_OmitsUriSection()
{
@@ -61,6 +63,7 @@ public class RedundancyCommandTests
}
/// <summary>Verifies that Execute calls GetRedundancyInfo on the service.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Execute_CallsGetRedundancyInfo()
{
@@ -78,6 +81,7 @@ public class RedundancyCommandTests
}
/// <summary>Verifies that Execute disconnects and disposes in the finally block.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Execute_DisconnectsInFinally()
{
@@ -14,6 +14,7 @@ namespace ZB.MOM.WW.OtOpcUa.Client.CLI.Tests;
public class SubscribeCommandSummaryTests
{
/// <summary>Verifies that nodes with no updates are counted separately from suspects.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task Summary_NodeWithNoUpdate_IsCountedAsNeverNotAsNeverWentBad()
{
@@ -41,6 +42,7 @@ public class SubscribeCommandSummaryTests
}
/// <summary>Verifies that nodes with only good values are counted as never went bad.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task Summary_NodeReceivedOnlyGoodValues_IsCountedAsNeverWentBad()
{
@@ -73,6 +75,7 @@ public class SubscribeCommandSummaryTests
}
/// <summary>Verifies that nodes with bad values are counted as ever went bad.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task Summary_NodeReceivedBadValue_IsCountedAsEverWentBad()
{
@@ -102,6 +105,7 @@ public class SubscribeCommandSummaryTests
}
/// <summary>Verifies that subscription auto-exits when duration expires.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task Duration_ZeroOrPositive_AutoExits()
{
@@ -129,6 +133,7 @@ public class SubscribeCommandSummaryTests
}
/// <summary>Verifies that --quiet suppresses updates but prints summary.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task Quiet_SuppressesPerUpdateOutputButPrintsSummary()
{
@@ -160,6 +165,7 @@ public class SubscribeCommandSummaryTests
}
/// <summary>Verifies that summary is written to disk when summary file is specified.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task SummaryFile_WritesSummaryToDisk()
{
@@ -191,6 +197,7 @@ public class SubscribeCommandSummaryTests
}
/// <summary>Verifies that recursive flag browses subtree and subscribes every variable.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task Recursive_BrowsesSubtreeAndSubscribesEveryVariable()
{
@@ -230,6 +237,7 @@ public class SubscribeCommandSummaryTests
}
/// <summary>Verifies that subscription failures are handled gracefully.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task SubscribeFailure_PrintsFailedMessage_DoesNotCrash()
{
@@ -8,6 +8,7 @@ namespace ZB.MOM.WW.OtOpcUa.Client.CLI.Tests;
public class SubscribeCommandTests
{
/// <summary>Verifies that ExecuteAsync subscribes with the correct parameters.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Execute_SubscribesWithCorrectParameters()
{
@@ -37,6 +38,7 @@ public class SubscribeCommandTests
}
/// <summary>Verifies that ExecuteAsync unsubscribes when cancellation is requested.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Execute_UnsubscribesOnCancellation()
{
@@ -60,6 +62,7 @@ public class SubscribeCommandTests
}
/// <summary>Verifies that ExecuteAsync disconnects and disposes in a finally block.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Execute_DisconnectsInFinally()
{
@@ -84,6 +87,7 @@ public class SubscribeCommandTests
}
/// <summary>Verifies that ExecuteAsync prints the correct subscription message.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Execute_PrintsSubscriptionMessage()
{
@@ -10,6 +10,7 @@ public static class TestConsoleHelper
/// <summary>
/// Creates a new <see cref="FakeInMemoryConsole" /> for testing.
/// </summary>
/// <returns>A new <see cref="FakeInMemoryConsole"/> instance.</returns>
public static FakeInMemoryConsole CreateConsole()
{
return new FakeInMemoryConsole();
@@ -9,6 +9,7 @@ namespace ZB.MOM.WW.OtOpcUa.Client.CLI.Tests;
public class WriteCommandTests
{
/// <summary>Verifies that write command executes successfully.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task Execute_WritesSuccessfully()
{
@@ -33,6 +34,7 @@ public class WriteCommandTests
}
/// <summary>Verifies that write command reports failure.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task Execute_ReportsFailure()
{
@@ -57,6 +59,7 @@ public class WriteCommandTests
}
/// <summary>Verifies that write command reads current value before writing.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task Execute_ReadsCurrentValueThenWrites()
{
@@ -83,6 +86,7 @@ public class WriteCommandTests
}
/// <summary>Verifies that write command disconnects in finally block.</summary>
/// <returns>A task that represents the asynchronous test operation.</returns>
[Fact]
public async Task Execute_DisconnectsInFinally()
{