public void TestCanReadWriteSeek() { var buffer = new byte[1024]; using (var bounded = new BoundStream(new CanReadWriteSeekStream(true, false, false, false), 0, -1, false)) { Assert.IsTrue(bounded.CanRead); Assert.IsFalse(bounded.CanWrite); Assert.IsFalse(bounded.CanSeek); Assert.IsFalse(bounded.CanTimeout); Assert.Throws <NotImplementedException> (() => bounded.Read(buffer, 0, buffer.Length)); Assert.Throws <NotSupportedException> (() => bounded.Write(buffer, 0, buffer.Length)); Assert.Throws <NotSupportedException> (() => bounded.Seek(0, SeekOrigin.End)); } using (var bounded = new BoundStream(new CanReadWriteSeekStream(false, true, false, false), 0, -1, false)) { Assert.IsFalse(bounded.CanRead); Assert.IsTrue(bounded.CanWrite); Assert.IsFalse(bounded.CanSeek); Assert.IsFalse(bounded.CanTimeout); Assert.Throws <NotSupportedException> (() => bounded.Read(buffer, 0, buffer.Length)); Assert.Throws <NotImplementedException> (() => bounded.Write(buffer, 0, buffer.Length)); Assert.Throws <NotSupportedException> (() => bounded.Seek(0, SeekOrigin.End)); } using (var bounded = new BoundStream(new CanReadWriteSeekStream(false, false, true, false), 0, -1, false)) { Assert.IsFalse(bounded.CanRead); Assert.IsFalse(bounded.CanWrite); Assert.IsTrue(bounded.CanSeek); Assert.IsFalse(bounded.CanTimeout); Assert.Throws <NotSupportedException> (() => bounded.Read(buffer, 0, buffer.Length)); Assert.Throws <NotSupportedException> (() => bounded.Write(buffer, 0, buffer.Length)); Assert.Throws <NotImplementedException> (() => bounded.Seek(0, SeekOrigin.End)); } }
public void TestSeek() { using (var memory = new MemoryStream()) { var buffer = Encoding.ASCII.GetBytes("This is some text..."); memory.Write(buffer, 0, buffer.Length); using (var bounded = new BoundStream(memory, 5, -1, true)) { long position; string text; int n; // make sure that BoundStream will properly reset the underlying stream Assert.AreEqual(0, bounded.Position); n = bounded.Read(buffer, 0, buffer.Length); text = Encoding.ASCII.GetString(buffer, 0, n); Assert.AreEqual("is some text...", text); // force eos state to be true bounded.Read(buffer, 0, buffer.Length); position = bounded.Seek(-1 * n, SeekOrigin.End); Assert.AreEqual(0, position, "SeekOrigin.End"); n = bounded.Read(buffer, 0, buffer.Length); text = Encoding.ASCII.GetString(buffer, 0, n); Assert.AreEqual("is some text...", text); position = bounded.Seek(0, SeekOrigin.Begin); Assert.AreEqual(0, position, "SeekOrigin.Begin"); n = bounded.Read(buffer, 0, buffer.Length); text = Encoding.ASCII.GetString(buffer, 0, n); Assert.AreEqual("is some text...", text); position = bounded.Seek(-1 * n, SeekOrigin.Current); Assert.AreEqual(0, position, "SeekOrigin.Current"); n = bounded.Read(buffer, 0, buffer.Length); text = Encoding.ASCII.GetString(buffer, 0, n); Assert.AreEqual("is some text...", text); // now try seeking out of bounds Assert.Throws <IOException> (() => bounded.Seek(-1, SeekOrigin.Begin)); Assert.Throws <IOException> (() => bounded.Seek(-1 * buffer.Length, SeekOrigin.End)); } } using (var memory = new MemoryStream()) { var buffer = Encoding.ASCII.GetBytes("This is some text..."); memory.Write(buffer, 0, buffer.Length); using (var bounded = new BoundStream(memory, 5, buffer.Length, true)) { long position; string text; int n; // make sure that BoundStream will properly reset the underlying stream Assert.AreEqual(0, bounded.Position); n = bounded.Read(buffer, 0, buffer.Length); text = Encoding.ASCII.GetString(buffer, 0, n); Assert.AreEqual("is some text...", text); position = bounded.Seek(0, SeekOrigin.Begin); Assert.AreEqual(0, position, "SeekOrigin.Begin"); n = bounded.Read(buffer, 0, buffer.Length); text = Encoding.ASCII.GetString(buffer, 0, n); Assert.AreEqual("is some text...", text); position = bounded.Seek(-1 * n, SeekOrigin.Current); Assert.AreEqual(0, position, "SeekOrigin.Current"); n = bounded.Read(buffer, 0, buffer.Length); text = Encoding.ASCII.GetString(buffer, 0, n); Assert.AreEqual("is some text...", text); position = bounded.Seek(-1 * n, SeekOrigin.End); Assert.AreEqual(0, position, "SeekOrigin.End"); n = bounded.Read(buffer, 0, buffer.Length); text = Encoding.ASCII.GetString(buffer, 0, n); Assert.AreEqual("is some text...", text); // now try seeking out of bounds Assert.Throws <IOException> (() => bounded.Seek(-1, SeekOrigin.Begin)); Assert.Throws <IOException> (() => bounded.Seek(-1 * buffer.Length, SeekOrigin.End)); Assert.Throws <IOException> (() => bounded.Seek(5, SeekOrigin.End)); } } }