File: System\IO\BinaryReaderExtensionsTests.cs
Web Access
Project: src\src\test\unit\Microsoft.Private.Windows.Polyfills\Microsoft.Private.Windows.Polyfills.Tests.csproj (Microsoft.Private.Windows.Polyfills.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
namespace System.IO.Tests;
 
public class BinaryReaderExtensionsTests
{
    [Fact]
    public void Read_Span_ReadsData()
    {
        byte[] data = [1, 2, 3, 4, 5];
        using MemoryStream stream = new(data);
        using BinaryReader reader = new(stream);
 
        Span<byte> buffer = stackalloc byte[5];
        int bytesRead = reader.Read(buffer);
 
        bytesRead.Should().Be(5);
        buffer.SequenceEqual(data).Should().BeTrue();
    }
 
    [Fact]
    public void Read_Span_PartialRead()
    {
        byte[] data = [10, 20, 30, 40, 50];
        using MemoryStream stream = new(data);
        using BinaryReader reader = new(stream);
 
        Span<byte> buffer = stackalloc byte[3];
        int bytesRead = reader.Read(buffer);
 
        bytesRead.Should().Be(3);
        buffer[0].Should().Be(10);
        buffer[1].Should().Be(20);
        buffer[2].Should().Be(30);
    }
 
    [Fact]
    public void Read_Span_EmptyBuffer_ReturnsZero()
    {
        byte[] data = [1, 2, 3];
        using MemoryStream stream = new(data);
        using BinaryReader reader = new(stream);
 
        Span<byte> buffer = [];
        int bytesRead = reader.Read(buffer);
 
        bytesRead.Should().Be(0);
    }
 
    [Fact]
    public void Read_Span_PastEndOfStream_ReturnsAvailableBytes()
    {
        byte[] data = [1, 2];
        using MemoryStream stream = new(data);
        using BinaryReader reader = new(stream);
 
        Span<byte> buffer = stackalloc byte[5];
        int bytesRead = reader.Read(buffer);
 
        bytesRead.Should().Be(2);
        buffer[0].Should().Be(1);
        buffer[1].Should().Be(2);
    }
 
    [Fact]
    public void Read_Span_MultipleReads()
    {
        byte[] data = [1, 2, 3, 4, 5, 6];
        using MemoryStream stream = new(data);
        using BinaryReader reader = new(stream);
 
        Span<byte> buffer1 = stackalloc byte[3];
        Span<byte> buffer2 = stackalloc byte[3];
 
        int read1 = reader.Read(buffer1);
        int read2 = reader.Read(buffer2);
 
        read1.Should().Be(3);
        read2.Should().Be(3);
        buffer1[0].Should().Be(1);
        buffer1[2].Should().Be(3);
        buffer2[0].Should().Be(4);
        buffer2[2].Should().Be(6);
    }
}