public void WriteCharArray_NonZeroStart() { var bufferWriter = new TestMemoryBufferWriter(4096); var textWriter = new Utf8BufferTextWriter(); textWriter.SetWriter(bufferWriter); var chars = "Hello world".ToCharArray(); textWriter.Write(chars, 6, 1); textWriter.Flush(); Assert.Equal(1, bufferWriter.Position); Assert.Equal((byte)'w', bufferWriter.CurrentSegment.Span[0]); }
private void WriteMultiByteCharactersToSmallBuffers() { // Test string breakdown (char => UTF-8 hex values): // a => 61 // い => E3-81-84 // b => 62 // ろ => E3-82-8D // c => 63 // d => 64 // は => E3-81-AF // に => E3-81-AB // e => 65 // ほ => E3-81-BB // f => 66 // へ => E3-81-B8 // ど => E3-81-A9 // g => 67 // h => 68 // i => 69 // \uD800\uDC00 => F0-90-80-80 (this is a surrogate pair that is represented as a single 4-byte UTF-8 encoding) const string testString = "aいbろcdはにeほfへどghi\uD800\uDC00"; // By mixing single byte and multi-byte characters, we know that there will // be spaces in the active segment that cannot fit the current character. This // means we'll be testing the GetMemory(minimumSize) logic. var bufferWriter = new TestMemoryBufferWriter(segmentSize: 5); var writer = new Utf8BufferTextWriter(); writer.SetWriter(bufferWriter); writer.Write(testString); writer.Flush(); // Verify the output var allSegments = bufferWriter.GetSegments().Select(s => s.ToArray()).ToArray(); Assert.Collection(allSegments, seg => Assert.Equal(new byte[] { 0x61, 0xE3, 0x81, 0x84, 0x62 }, seg), // "aいb" seg => Assert.Equal(new byte[] { 0xE3, 0x82, 0x8D, 0x63, 0x64 }, seg), // "ろcd" seg => Assert.Equal(new byte[] { 0xE3, 0x81, 0xAF }, seg), // "は" seg => Assert.Equal(new byte[] { 0xE3, 0x81, 0xAB, 0x65 }, seg), // "にe" seg => Assert.Equal(new byte[] { 0xE3, 0x81, 0xBB, 0x66 }, seg), // "ほf" seg => Assert.Equal(new byte[] { 0xE3, 0x81, 0xB8 }, seg), // "へ" seg => Assert.Equal(new byte[] { 0xE3, 0x81, 0xA9, 0x67, 0x68 }, seg), // "どgh" seg => Assert.Equal(new byte[] { 0x69, 0xF0, 0x90, 0x80, 0x80 }, seg)); // "i\uD800\uDC00" Assert.Equal(testString, Encoding.UTF8.GetString(bufferWriter.ToArray())); }
public void WriteChar_Unicode() { var bufferWriter = new TestMemoryBufferWriter(4096); var textWriter = new Utf8BufferTextWriter(); textWriter.SetWriter(bufferWriter); textWriter.Write('['); textWriter.Flush(); Assert.Equal(1, bufferWriter.Position); Assert.Equal((byte)'[', bufferWriter.CurrentSegment.Span[0]); textWriter.Write('"'); textWriter.Flush(); Assert.Equal(2, bufferWriter.Position); Assert.Equal((byte)'"', bufferWriter.CurrentSegment.Span[1]); textWriter.Write('\u00A3'); textWriter.Flush(); Assert.Equal(4, bufferWriter.Position); textWriter.Write('\u00A3'); textWriter.Flush(); Assert.Equal(6, bufferWriter.Position); textWriter.Write('"'); textWriter.Flush(); Assert.Equal(7, bufferWriter.Position); Assert.Equal((byte)0xC2, bufferWriter.CurrentSegment.Span[2]); Assert.Equal((byte)0xA3, bufferWriter.CurrentSegment.Span[3]); Assert.Equal((byte)0xC2, bufferWriter.CurrentSegment.Span[4]); Assert.Equal((byte)0xA3, bufferWriter.CurrentSegment.Span[5]); Assert.Equal((byte)'"', bufferWriter.CurrentSegment.Span[6]); textWriter.Write(']'); textWriter.Flush(); Assert.Equal(8, bufferWriter.Position); Assert.Equal((byte)']', bufferWriter.CurrentSegment.Span[7]); }