Assert.False(tempStream.CanRead);
}
}
+
+ [Fact]
+ public async Task StreamWriter_WriteAsync_EmitBOMAndFlushDataWhenBufferIsFull()
+ {
+ Encoding UTF8BOM = new UTF8Encoding(encoderShouldEmitUTF8Identifier: true, throwOnInvalidBytes: true);
+
+ using (var s = new MemoryStream())
+ using (var writer = new StreamWriter(s, UTF8BOM, 4))
+ {
+ await writer.WriteAsync("abcdefg");
+ await writer.FlushAsync();
+
+ Assert.Equal(10, s.Length); // BOM (3) + string value (7)
+ }
+ }
}
}
return Task.CompletedTask;
}
- Task flushTask = Core(flushStream, flushEncoder, cancellationToken);
-
- _charPos = 0;
- return flushTask;
+ return Core(flushStream, flushEncoder, cancellationToken);
async Task Core(bool flushStream, bool flushEncoder, CancellationToken cancellationToken)
{
byte[] byteBuffer = _byteBuffer ??= new byte[_encoding.GetMaxByteCount(_charBuffer.Length)];
int count = _encoder.GetBytes(new ReadOnlySpan<char>(_charBuffer, 0, _charPos), byteBuffer, flushEncoder);
+ _charPos = 0;
if (count > 0)
{
await _stream.WriteAsync(new ReadOnlyMemory<byte>(byteBuffer, 0, count), cancellationToken).ConfigureAwait(false);