public void TestPeekableStreamRead() { var inputStr = "← ↔ →"; var buffer = inputStr.ToUtf8(); for (int i = 1; i <= buffer.Length; i++) { using (var mem = new MemoryStream(buffer)) using (var slow = new SlowStream(mem, i)) using (var peekable = new PeekableStream(slow)) { using (var peek = peekable.GetPeekStream()) { var buf = peek.Read(11); Assert.AreEqual(inputStr, buf.FromUtf8()); Assert.AreEqual(0, peek.Read(buf, 0, 1)); } var buf2 = peekable.Read(11); Assert.AreEqual(inputStr, buf2.FromUtf8()); Assert.AreEqual(0, peekable.Read(buf2, 0, 1)); using (var peek = peekable.GetPeekStream()) Assert.AreEqual(0, peek.Read(buf2, 0, 1)); } } }
public void TestSingleBytePeekableStreamRead() { using (var mem = new MemoryStream(new byte[] { 47 })) using (var peekable = new PeekableStream(mem)) { var buf = new byte[1]; using (var peek = peekable.GetPeekStream()) { Assert.AreEqual(1, peek.Read(buf, 0, 1)); Assert.AreEqual(buf[0], 47); Assert.AreEqual(0, peek.Read(buf, 0, 1)); } Assert.AreEqual(1, peekable.Read(buf, 0, 1)); Assert.AreEqual(buf[0], 47); Assert.AreEqual(0, peekable.Read(buf, 0, 1)); using (var peek = peekable.GetPeekStream()) Assert.AreEqual(0, peek.Read(buf, 0, 1)); } }
public void TestEmptyPeekableStreamRead() { using (var mem = new MemoryStream(new byte[0])) using (var peekable = new PeekableStream(mem)) { using (var peek = peekable.GetPeekStream()) Assert.AreEqual(0, peek.Read(new byte[1], 0, 1)); Assert.AreEqual(0, peekable.Read(new byte[1], 0, 1)); } }
/// <summary> /// Reads a control code from the stream at the current position. If there is no control code at the current position, /// returns <c>-1</c>. Otherwise returns the code read. Throws <see cref="EndOfStreamException"/> if the stream ends in /// the middle of a control code. /// </summary> public virtual int ReadControlCode() { using (var peek = _stream.GetPeekStream()) { byte[] read = peek.Read(2); if (read.Length == 0) { return(-1); } else if (read.Length == 1) { throw new EndOfStreamException("The end of the stream was encountered in the middle of an escape sequence."); } if (read[0] != 255) { return(-1); } _stream.SkipExactly(2); return(read[1]); } }