From 7d21ee1a5a5f4caf64900e601b011be264964bbb Mon Sep 17 00:00:00 2001 From: Justin Kotalik Date: Wed, 30 Jan 2019 14:26:56 -0800 Subject: [PATCH] Call Slice in GetMemory (#7113) --- src/Http/Http/src/StreamPipeWriter.cs | 2 +- src/Http/Http/test/StreamPipeWriterTests.cs | 38 +++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/Http/Http/src/StreamPipeWriter.cs b/src/Http/Http/src/StreamPipeWriter.cs index 12fba0a939..9c441baa69 100644 --- a/src/Http/Http/src/StreamPipeWriter.cs +++ b/src/Http/Http/src/StreamPipeWriter.cs @@ -95,7 +95,7 @@ namespace System.IO.Pipelines EnsureCapacity(sizeHint); - return _currentSegment; + return _currentSegment.Slice(_position); } /// diff --git a/src/Http/Http/test/StreamPipeWriterTests.cs b/src/Http/Http/test/StreamPipeWriterTests.cs index abd7e22454..eb1737a94c 100644 --- a/src/Http/Http/test/StreamPipeWriterTests.cs +++ b/src/Http/Http/test/StreamPipeWriterTests.cs @@ -350,6 +350,44 @@ namespace System.IO.Pipelines.Tests Assert.Throws(() => Writer.GetSpan(-1)); } + [Fact] + public async Task GetMemorySlicesCorrectly() + { + var expectedString = "abcdef"; + var memory = Writer.GetMemory(); + + Encoding.ASCII.GetBytes("abc").CopyTo(memory); + Writer.Advance(3); + memory = Writer.GetMemory(); + Encoding.ASCII.GetBytes("def").CopyTo(memory); + Writer.Advance(3); + + await Writer.FlushAsync(); + Assert.Equal(expectedString, ReadAsString()); + } + + [Fact] + public async Task GetSpanSlicesCorrectly() + { + var expectedString = "abcdef"; + + void NonAsyncMethod() + { + var span = Writer.GetSpan(); + + Encoding.ASCII.GetBytes("abc").CopyTo(span); + Writer.Advance(3); + span = Writer.GetSpan(); + Encoding.ASCII.GetBytes("def").CopyTo(span); + Writer.Advance(3); + } + + NonAsyncMethod(); + + await Writer.FlushAsync(); + Assert.Equal(expectedString, ReadAsString()); + } + private void WriteStringToStream(string input) { var buffer = Encoding.ASCII.GetBytes(input);