< Summary

Line coverage
78%
Covered lines: 15
Uncovered lines: 4
Coverable lines: 19
Total lines: 51
Line coverage: 78.9%
Branch coverage
75%
Covered branches: 3
Total branches: 4
Branch coverage: 75%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
IsValidSendState(...)100%110%
ThrowIfInvalidState(...)75%4476.92%
ToFlag(...)100%11100%

File(s)

https://raw.githubusercontent.com/dotnet/runtime/811a7eabb75c42db53440e8ba3f60c07511cfd1f/src/libraries/System.Net.WebSockets/src/System/Net/WebSockets/WebSocketStateHelper.cs

#LineLine coverage
 1// Licensed to the .NET Foundation under one or more agreements.
 2// The .NET Foundation licenses this file to you under the MIT license.
 3
 4using System.Diagnostics;
 5
 6namespace System.Net.WebSockets
 7{
 8    internal static class WebSocketStateHelper
 9    {
 10        /// <summary>Valid states to be in when calling SendAsync.</summary>
 11        internal const ManagedWebSocketStates ValidSendStates = ManagedWebSocketStates.Open | ManagedWebSocketStates.Clo
 12        /// <summary>Valid states to be in when calling ReceiveAsync.</summary>
 13        internal const ManagedWebSocketStates ValidReceiveStates = ManagedWebSocketStates.Open | ManagedWebSocketStates.
 14        /// <summary>Valid states to be in when calling CloseOutputAsync.</summary>
 15        internal const ManagedWebSocketStates ValidCloseOutputStates = ManagedWebSocketStates.Open | ManagedWebSocketSta
 16        /// <summary>Valid states to be in when calling CloseAsync.</summary>
 17        internal const ManagedWebSocketStates ValidCloseStates = ManagedWebSocketStates.Open | ManagedWebSocketStates.Cl
 18
 019        internal static bool IsValidSendState(WebSocketState state) => (ValidSendStates & ToFlag(state)) != 0;
 20
 21        internal static void ThrowIfInvalidState(WebSocketState currentState, bool isDisposed, Exception? innerException
 41539022        {
 41539023            ManagedWebSocketStates state = ToFlag(currentState);
 24
 41539025            if ((state & validStates) == 0)
 9926            {
 9927                string invalidStateMessage = SR.Format(
 9928                    SR.net_WebSockets_InvalidState, currentState, validStates);
 29
 9930                throw new WebSocketException(WebSocketError.InvalidState, invalidStateMessage, innerException);
 31            }
 32
 41529133            if (innerException is not null)
 034            {
 035                Debug.Assert(state == ManagedWebSocketStates.Aborted);
 036                throw new OperationCanceledException(nameof(WebSocketState.Aborted), innerException);
 37            }
 38
 39            // Ordering is important to maintain .NET 4.5 WebSocket implementation exception behavior.
 41529140            ObjectDisposedException.ThrowIf(isDisposed, typeof(WebSocket));
 41529141        }
 42
 43        private static ManagedWebSocketStates ToFlag(WebSocketState value)
 41539044        {
 41539045            ManagedWebSocketStates flag = (ManagedWebSocketStates)(1 << (int)value);
 41539046            Debug.Assert(Enum.IsDefined(flag));
 41539047            return flag;
 41539048        }
 49    }
 50}
 51