示例#1
0
 public void TestOperations()
 {
     // invalid operations
      using (var stack = new StreamStack())
      {
     AssertException(() => stack.Push(null));
     Assert.IsNull(stack.GetStream<Stream>());
     stack.Push(new MemoryStream());
     AssertException(() => stack.Seek(0, SeekOrigin.Current));
      }
      // stream access
      using (var stack = new StreamStack())
      {
     var buffer = new MemoryStream();
     var test = new TestStream(buffer);
     stack.Push(buffer);
     Assert.AreEqual(stack.Top, buffer);
     stack.Push(test);
     Assert.AreEqual(stack.Top, test);
     Assert.AreEqual(stack.GetStream<MemoryStream>(), buffer);
     Assert.AreEqual(stack.GetStream<TestStream>(), test);
      }
      // stream flush
      using (var stack = new StreamStack())
      {
     var stream1 = new TestStream(new MemoryStream());
     var stream2 = new TestStream(stream1);
     stack.Push(stream1);
     stack.Push(stream2);
     stack.Flush();
     Assert.IsTrue(stream1.Flushed);
     Assert.IsTrue(stream2.Flushed);
      }
      // stream read
      using (var stack = new StreamStack())
      {
     var buffer = new MemoryStream();
     StreamWrite(buffer, "test");
     buffer.Position = 0;
     stack.Push(buffer);
     stack.Push(new TestStream(stack.Top));
     Assert.AreEqual(StreamRead(stack), "test");
      }
      // stream write
      using (var stack = new StreamStack())
      {
     var buffer = new MemoryStream();
     stack.Push(buffer);
     stack.Push(new TestStream(stack.Top));
     StreamWrite(stack, "test");
     buffer.Position = 0;
     Assert.AreEqual(StreamRead(buffer), "test");
      }
      // stream disposal
      using (var stack = new StreamStack())
      {
     var stream1 = new TestStream(new MemoryStream());
     var stream2 = new TestStream(stream1);
     stack.Push(stream1);
     stack.Push(stream2);
     stack.Dispose();
     Assert.IsTrue(stream1.Disposed);
     Assert.IsTrue(stream2.Disposed);
      }
 }