Skip to content

Commit cf451e8

Browse files
committed
Fix exception type from Stream.Read extension
1 parent 5f70ec2 commit cf451e8

File tree

2 files changed

+10
-8
lines changed

2 files changed

+10
-8
lines changed

src/CommunityToolkit.HighPerformance/Extensions/StreamExtensions.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ public static void Write(this Stream stream, ReadOnlySpan<byte> buffer)
198198
/// <typeparam name="T">The type of value to read.</typeparam>
199199
/// <param name="stream">The source <see cref="Stream"/> instance to read from.</param>
200200
/// <returns>The <typeparamref name="T"/> value read from <paramref name="stream"/>.</returns>
201-
/// <exception cref="InvalidOperationException">Thrown if <paramref name="stream"/> reaches the end.</exception>
201+
/// <exception cref="EndOfStreamException">Thrown if <paramref name="stream"/> reaches the end.</exception>
202202
#if NETSTANDARD2_1_OR_GREATER
203203
[MethodImpl(MethodImplOptions.AggressiveInlining)]
204204
#endif
@@ -226,7 +226,7 @@ public static unsafe T Read<T>(this Stream stream)
226226
// A return value of 0 indicates that the end of the stream has been reached
227227
if (bytesRead == 0)
228228
{
229-
ThrowInvalidOperationExceptionForEndOfStream();
229+
ThrowEndOfStreamException();
230230
}
231231

232232
bytesOffset += bytesRead;
@@ -246,7 +246,7 @@ public static unsafe T Read<T>(this Stream stream)
246246

247247
if (bytesRead == 0)
248248
{
249-
ThrowInvalidOperationExceptionForEndOfStream();
249+
ThrowEndOfStreamException();
250250
}
251251

252252
bytesOffset += bytesRead;
@@ -299,11 +299,13 @@ public static unsafe void Write<T>(this Stream stream, in T value)
299299
#endif
300300
}
301301

302+
#if !NET7_0_OR_GREATER
302303
/// <summary>
303-
/// Throws an <see cref="InvalidOperationException"/> when <see cref="Read{T}"/> fails.
304+
/// Throws an <see cref="EndOfStreamException"/> when <see cref="Read{T}"/> fails.
304305
/// </summary>
305-
private static void ThrowInvalidOperationExceptionForEndOfStream()
306+
private static void ThrowEndOfStreamException()
306307
{
307-
throw new InvalidOperationException("The stream didn't contain enough data to read the requested item.");
308+
throw new EndOfStreamException("The stream didn't contain enough data to read the requested item.");
308309
}
310+
#endif
309311
}

tests/CommunityToolkit.HighPerformance.UnitTests/Extensions/Test_StreamExtensions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public void Test_StreamExtensions_ReadWrite()
3434
Assert.AreEqual(3.14f, stream.Read<float>());
3535
Assert.AreEqual(unchecked(uint.MaxValue * 324823489204ul), stream.Read<ulong>());
3636

37-
_ = Assert.ThrowsException<InvalidOperationException>(() => stream.Read<long>());
37+
_ = Assert.ThrowsException<EndOfStreamException>(() => stream.Read<long>());
3838
}
3939

4040
// See https://github.com/CommunityToolkit/dotnet/issues/513
@@ -55,7 +55,7 @@ public void Test_StreamExtensions_ReadWrite_WithBufferedStream()
5555
Assert.AreEqual(3.14f, stream.Read<float>());
5656
Assert.AreEqual(unchecked(uint.MaxValue * 324823489204ul), stream.Read<ulong>());
5757

58-
_ = Assert.ThrowsException<InvalidOperationException>(() => stream.Read<long>());
58+
_ = Assert.ThrowsException<EndOfStreamException>(() => stream.Read<long>());
5959
}
6060

6161
private sealed class BufferedStream : MemoryStream

0 commit comments

Comments
 (0)