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 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)); } }
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)); } }
public void TestControlCodedStream() { byte[] buffer; using (var memoryStream = new MemoryStream()) using (var peekable = new PeekableStream(memoryStream)) using (var ccs = new ControlCodedStream(peekable)) using (var binary = new BinaryStream(ccs)) { binary.WriteString("← ↔ →"); ccs.WriteControlCode(47); binary.WriteChar((char)255); ccs.WriteControlCode(48); binary.WriteVarInt(0x1FF); ccs.WriteControlCode(49); binary.WriteFloat(float.NaN); binary.WriteFloat(float.PositiveInfinity); binary.WriteFloat(float.NegativeInfinity); ccs.WriteControlCode(50); Assert.Throws <ArgumentOutOfRangeException>(() => ccs.WriteControlCode(255)); binary.Close(); ccs.Close(); peekable.Close(); memoryStream.Close(); buffer = memoryStream.ToArray(); } for (int i = 1; i < buffer.Length; i++) { using (var memoryStream = new MemoryStream(buffer)) using (var slowStream = new SlowStream(memoryStream, i)) using (var peekable = new PeekableStream(slowStream)) using (var ccs = new ControlCodedStream(peekable)) using (var binary = new BinaryStream(ccs)) { Assert.AreEqual("← ↔ →", binary.ReadString()); Assert.Throws <InvalidOperationException>(() => ccs.Read(new byte[1], 0, 1)); Assert.AreEqual(47, ccs.ReadControlCode()); Assert.AreEqual((char)255, binary.ReadChar()); Assert.AreEqual(48, ccs.ReadControlCode()); Assert.AreEqual(0x1FF, binary.ReadVarInt()); Assert.AreEqual(49, ccs.ReadControlCode()); Assert.IsNaN(binary.ReadFloat()); Assert.AreEqual(-1, ccs.ReadControlCode()); Assert.AreEqual(float.PositiveInfinity, binary.ReadFloat()); Assert.AreEqual(float.NegativeInfinity, binary.ReadFloat()); Assert.AreEqual(50, ccs.ReadControlCode()); Assert.AreEqual(-1, ccs.ReadControlCode()); Assert.AreEqual(0, ccs.Read(new byte[1], 0, 1)); } } }
public void TestControlCodedStream() { byte[] buffer; using (var memoryStream = new MemoryStream()) using (var peekable = new PeekableStream(memoryStream)) using (var ccs = new ControlCodedStream(peekable)) using (var binary = new BinaryStream(ccs)) { binary.WriteString("← ↔ →"); ccs.WriteControlCode(47); binary.WriteChar((char) 255); ccs.WriteControlCode(48); binary.WriteVarInt(0x1FF); ccs.WriteControlCode(49); binary.WriteFloat(float.NaN); binary.WriteFloat(float.PositiveInfinity); binary.WriteFloat(float.NegativeInfinity); ccs.WriteControlCode(50); Assert.Throws<ArgumentOutOfRangeException>(() => ccs.WriteControlCode(255)); binary.Close(); ccs.Close(); peekable.Close(); memoryStream.Close(); buffer = memoryStream.ToArray(); } for (int i = 1; i < buffer.Length; i++) { using (var memoryStream = new MemoryStream(buffer)) using (var slowStream = new SlowStream(memoryStream, i)) using (var peekable = new PeekableStream(slowStream)) using (var ccs = new ControlCodedStream(peekable)) using (var binary = new BinaryStream(ccs)) { Assert.AreEqual("← ↔ →", binary.ReadString()); Assert.Throws<InvalidOperationException>(() => ccs.Read(new byte[1], 0, 1)); Assert.AreEqual(47, ccs.ReadControlCode()); Assert.AreEqual((char) 255, binary.ReadChar()); Assert.AreEqual(48, ccs.ReadControlCode()); Assert.AreEqual(0x1FF, binary.ReadVarInt()); Assert.AreEqual(49, ccs.ReadControlCode()); Assert.IsNaN(binary.ReadFloat()); Assert.AreEqual(-1, ccs.ReadControlCode()); Assert.AreEqual(float.PositiveInfinity, binary.ReadFloat()); Assert.AreEqual(float.NegativeInfinity, binary.ReadFloat()); Assert.AreEqual(50, ccs.ReadControlCode()); Assert.AreEqual(-1, ccs.ReadControlCode()); Assert.AreEqual(0, ccs.Read(new byte[1], 0, 1)); } } }
/// <summary>Disposes of this stream and unregisters it from its parent.</summary> protected override void Dispose(bool disposing) { if (disposing && _parent != null) { if (_parent._peeks != null) { _parent._peeks.Remove(this); } _parent = null; _buffer = null; } base.Dispose(disposing); }
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 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 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)); } } }
/// <summary>Constructor.</summary> /// <param name="underlyingStream">The underlying stream on which all operations are to be performed.</param> public ControlCodedStream(PeekableStream underlyingStream) { _stream = underlyingStream; }
/// <summary>Constructor.</summary> /// <param name="underlyingStream">The underlying stream on which all operations are to be performed.</param> public ControlCodedStream(PeekableStream underlyingStream) { _stream = underlyingStream; }
/// <summary>Disposes of this stream and unregisters it from its parent.</summary> protected override void Dispose(bool disposing) { if (disposing && _parent != null) { if (_parent._peeks != null) _parent._peeks.Remove(this); _parent = null; _buffer = null; } base.Dispose(disposing); }
internal PeekStream(PeekableStream parent) { _parent = parent; IsValid = true; }
internal PeekStream(PeekableStream parent) { _parent = parent; IsValid = true; }