public void ReadEnsuresEndOfStreamIsReachable() { // BizTalk Factory's EventingReadStream will eventually set ReadCompleted to true, AfterLastReadEvent will be fired as well var tempBuffer = new byte[1024]; using (var stream = new EventingReadStream(new MemoryStream(_content))) { var edgeEventsCount = 0; stream.AfterLastReadEvent += (sender, args) => ++ edgeEventsCount; while (stream.Read(tempBuffer, 0, tempBuffer.Length) == tempBuffer.Length) { } Assert.That(stream.ReadCompleted); Assert.That(edgeEventsCount, Is.EqualTo(1)); } // while MicrosoftEventingReadStream will not always set ReadCompleted to true, AfterLastReadEvent won't be fired either using (var stream = new MicrosoftEventingReadStream()) { var edgeEventsCount = 0; stream.AfterLastReadEvent += (sender, args) => ++ edgeEventsCount; while (stream.Read(tempBuffer, 0, tempBuffer.Length) == tempBuffer.Length) { } Assert.That(stream.ReadCompleted, Is.False); Assert.That(edgeEventsCount, Is.EqualTo(0)); } }
public void ReadEnsuresEndOfStreamIsReachable() { // BizTalk Factory's EventingReadStream will eventually set ReadCompleted to true, AfterLastReadEvent will be fired as well var tempBuffer = new byte[1024]; using (var stream = new EventingReadStream(new MemoryStream(_content))) { var edgeEventsCount = 0; stream.AfterLastReadEvent += (_, _) => ++ edgeEventsCount; while (stream.Read(tempBuffer, 0, tempBuffer.Length) == tempBuffer.Length) { } stream.ReadCompleted.Should().BeTrue(); edgeEventsCount.Should().Be(1); } // while MicrosoftEventingReadStream will not always set ReadCompleted to true, AfterLastReadEvent won't be fired either using (var stream = new MicrosoftEventingReadStream()) { var edgeEventsCount = 0; stream.AfterLastReadEvent += (_, _) => ++ edgeEventsCount; while (stream.Read(tempBuffer, 0, tempBuffer.Length) == tempBuffer.Length) { } stream.ReadCompleted.Should().BeFalse(); edgeEventsCount.Should().Be(0); } }