예제 #1
0
        public void WritesInChunks()
        {
            int bufferSize = 500;
            int size       = 3000;

            var buffers = new List <ArraySegment <byte> >();
            var writer  = new BufferTextWriter((buffer, state) =>
            {
                buffers.Add(buffer);
            },
                                               null, reuseBuffers: true, bufferSize: bufferSize);

            writer.Write(new string('C', size));
            writer.Flush();

            var expected = GetChunks(size, bufferSize).ToArray();

            Assert.NotEmpty(buffers);
            Assert.Equal(expected.Length, buffers.Count);

            for (int i = 0; i < buffers.Count; i++)
            {
                Assert.Equal(expected[i], buffers[i].Count);
            }
        }
 public void Ctor()
 {
     this.bufferTextWriter = new BufferTextWriter(this.sequence, DefaultEncoding);
     Assert.Same(DefaultEncoding, this.bufferTextWriter.Encoding);
     this.bufferTextWriter.Write('a');
     this.AssertWritten("a");
 }
예제 #3
0
        public void CanInterleaveStringsAndRawBinary()
        {
            var buffers = new List <ArraySegment <byte> >();
            var writer  = new BufferTextWriter((buffer, state) =>
            {
                buffers.Add(buffer);
            },
                                               null, reuseBuffers: true, bufferSize: 128);

            var encoding = new UTF8Encoding();

            writer.Write('H');
            writer.Write('e');
            writer.Write("llo ");
            writer.Write(new ArraySegment <byte>(encoding.GetBytes("World")));
            writer.Flush();

            Assert.Equal(2, buffers.Count);
            var s = "";

            foreach (var buffer in buffers)
            {
                s += encoding.GetString(buffer.Array, buffer.Offset, buffer.Count);
            }
            Assert.Equal("Hello World", s);
        }
예제 #4
0
        public void CanEncodingSurrogatePairsCorrectly()
        {
            var bytes  = new List <byte>();
            var writer = new BufferTextWriter((buffer, state) =>
            {
                for (int i = buffer.Offset; i < buffer.Count; i++)
                {
                    bytes.Add(buffer.Array[i]);
                }
            }, null, reuseBuffers: true, bufferSize: 128);

            writer.Write("\U00024B62"[0]);
            writer.Write("\U00024B62"[1]);
            writer.Flush();

            var expected = new byte[] { 0xF0, 0xA4, 0xAD, 0xA2 };

            Assert.Equal(expected, bytes);
        }
    public void Anything_Uninitialized(bool afterReset)
    {
        BufferTextWriter writer;

        if (afterReset)
        {
            writer = this.bufferTextWriter;
            writer.Reset();
        }
        else
        {
            writer = new BufferTextWriter();
        }

        Assert.Throws <InvalidOperationException>(() => writer.Flush());
        Assert.IsType <InvalidOperationException>(writer.FlushAsync().Exception?.InnerException);
        Assert.Throws <InvalidOperationException>(() => writer.Write(true));
        Assert.Throws <InvalidOperationException>(() => writer.Write('a'));
        Assert.Throws <InvalidOperationException>(() => writer.Write("a"));
    }
예제 #6
0
        public void WriteSameBufferIsUsedForWritingChunksIfReuseBuffersTrue()
        {
            var buffers = new List <ArraySegment <byte> >();
            var writer  = new BufferTextWriter((buffer, state) =>
            {
                buffers.Add(buffer);
            },
                                               null, reuseBuffers: true, bufferSize: 128);

            writer.Write(new string('C', 10000));
            writer.Flush();

            Assert.True(buffers.Count > 1);
            var underlyingBuffer = buffers[0].Array;

            for (int i = 1; i < buffers.Count; i++)
            {
                Assert.Same(underlyingBuffer, buffers[i].Array);
            }
        }
예제 #7
0
        public void TestBufferTextWriter()
        {
            var sw = new BufferTextWriter();

            Assert.IsNotNull(sw.FormatProvider);
            Assert.IsNotNull(sw.NewLine);
            Assert.IsNotNull(sw.Encoding);
            Assert.IsTrue(sw.ToString().Length == 0);
            sw.Write("ABC");
            Assert.IsTrue(sw.ToString().Length == 3);
            sw.Write('a');
            Assert.IsTrue(sw.ToString().Length == 4);

            sw.Write(new char[3] {
                '1', '1', '2'
            }, 0, 3);
            Assert.IsTrue(sw.ToString().Length == 7);

            sw.Write(new char[3] {
                '1', '1', '2'
            });
            Assert.IsTrue(sw.ToString().Length == 10);
        }
 public void Dispose_BeforeInitialize()
 {
     this.bufferTextWriter = new BufferTextWriter();
     this.bufferTextWriter.Dispose();
     this.bufferTextWriter.Dispose();
 }