.NET-Community-Toolkit/tests/CommunityToolkit.HighPerfor.../Streams/Test_MemoryStream.ThrowExce...

176 lines
5.7 KiB
C#

// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.IO;
using System.Linq;
using CommunityToolkit.HighPerformance;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace CommunityToolkit.HighPerformance.UnitTests.Streams;
public partial class Test_MemoryStream
{
[TestMethod]
public void Test_MemoryStream_ParameterName_ThrowArgumentExceptionForPosition()
{
Stream? stream = new byte[10].AsMemory().AsStream();
try
{
stream.Position = -1;
}
catch (ArgumentOutOfRangeException e) when (e.GetType() == typeof(ArgumentOutOfRangeException))
{
Assert.AreEqual(e.ParamName, nameof(Stream.Position));
return;
}
Assert.Fail("Failed to raise correct exception");
}
[TestMethod]
public void Test_MemoryStream_ParameterName_ThrowArgumentExceptionForSeekOrigin()
{
Stream? stream = new byte[10].AsMemory().AsStream();
try
{
_ = stream.Seek(0, (SeekOrigin)int.MinValue);
}
catch (ArgumentException e) when (e.GetType() == typeof(ArgumentException))
{
System.Reflection.MethodInfo? method = stream.GetType().GetMethod(nameof(Stream.Seek));
string? name = method!.GetParameters()[1].Name;
Assert.AreEqual(e.ParamName, name);
return;
}
Assert.Fail("Failed to raise correct exception");
}
[TestMethod]
public void Test_MemoryStream_ParameterName_ThrowArgumentNullExceptionForNullBuffer()
{
Stream? stream = new byte[10].AsMemory().AsStream();
try
{
stream.Write(null!, 0, 10);
}
catch (ArgumentNullException e) when (e.GetType() == typeof(ArgumentNullException))
{
string? name = (
from method in typeof(Stream).GetMethods()
where method.Name == nameof(Stream.Write)
let normalParams = method.GetParameters()
where
normalParams.Length == 3 &&
normalParams[0].ParameterType == typeof(byte[]) &&
normalParams[1].ParameterType == typeof(int) &&
normalParams[2].ParameterType == typeof(int)
select normalParams[0].Name).Single();
Assert.AreEqual(e.ParamName, name);
return;
}
Assert.Fail("Failed to raise correct exception");
}
[TestMethod]
public void Test_MemoryStream_ParameterName_ThrowArgumentOutOfRangeExceptionForNegativeOffset()
{
Stream? stream = new byte[10].AsMemory().AsStream();
try
{
stream.Write(new byte[1], -1, 10);
}
catch (ArgumentOutOfRangeException e) when (e.GetType() == typeof(ArgumentOutOfRangeException))
{
string? name = (
from method in typeof(Stream).GetMethods()
where method.Name == nameof(Stream.Write)
let normalParams = method.GetParameters()
where
normalParams.Length == 3 &&
normalParams[0].ParameterType == typeof(byte[]) &&
normalParams[1].ParameterType == typeof(int) &&
normalParams[2].ParameterType == typeof(int)
select normalParams[1].Name).Single();
Assert.AreEqual(e.ParamName, name);
return;
}
Assert.Fail("Failed to raise correct exception");
}
[TestMethod]
public void Test_MemoryStream_ParameterName_ThrowArgumentOutOfRangeExceptionForNegativeCount()
{
Stream? stream = new byte[10].AsMemory().AsStream();
try
{
stream.Write(new byte[1], 0, -1);
}
catch (ArgumentOutOfRangeException e) when (e.GetType() == typeof(ArgumentOutOfRangeException))
{
string? name = (
from method in typeof(Stream).GetMethods()
where method.Name == nameof(Stream.Write)
let normalParams = method.GetParameters()
where
normalParams.Length == 3 &&
normalParams[0].ParameterType == typeof(byte[]) &&
normalParams[1].ParameterType == typeof(int) &&
normalParams[2].ParameterType == typeof(int)
select normalParams[2].Name).Single();
Assert.AreEqual(e.ParamName, name);
return;
}
Assert.Fail("Failed to raise correct exception");
}
[TestMethod]
public void Test_MemoryStream_ParameterName_ThrowArgumentExceptionForExceededBufferSize()
{
Stream? stream = new byte[10].AsMemory().AsStream();
try
{
stream.Write(new byte[1], 0, 10);
}
catch (ArgumentException e) when (e.GetType() == typeof(ArgumentException))
{
string? name = (
from method in typeof(Stream).GetMethods()
where method.Name == nameof(Stream.Write)
let normalParams = method.GetParameters()
where
normalParams.Length == 3 &&
normalParams[0].ParameterType == typeof(byte[]) &&
normalParams[1].ParameterType == typeof(int) &&
normalParams[2].ParameterType == typeof(int)
select normalParams[0].Name).Single();
Assert.AreEqual(e.ParamName, name);
return;
}
Assert.Fail("Failed to raise correct exception");
}
}