public void Write_IfHasCaptureWriteEvents_ShouldRaiseCaptureWriteEvents()
        {
            byte[] expectedBuffer = new byte[] {0, 1, 2, 3};
            const int expectedOffset = 1;
            const int expectedCount = 2;
            Encoding expectedEncoding = Encoding.UTF8;

            bool captureWriteRaised = false;
            IEnumerable<byte> actualBuffer = null;
            int? actualOffset = null;
            int? actualCount = null;
            Encoding actualEncoding = null;
            object actualSender = null;

            CapturableStream capturableStream = new CapturableStream(Mock.Of<Stream>(), expectedEncoding);
            capturableStream.CaptureWrite += delegate(object sender, StreamWriteEventArgs e)
            {
                captureWriteRaised = true;
                actualSender = sender;
                actualBuffer = e.Buffer;
                actualOffset = e.Offset;
                actualCount = e.Count;
                actualEncoding = e.Encoding;
            };

            Assert.IsFalse(captureWriteRaised);

            capturableStream.Write(expectedBuffer, expectedOffset, expectedCount);

            Assert.IsTrue(captureWriteRaised);
            Assert.AreEqual(capturableStream, actualSender);
            // ReSharper disable PossibleMultipleEnumeration
            Assert.AreEqual(expectedBuffer.Length, actualBuffer.Count());
            Assert.AreEqual(expectedBuffer[0], actualBuffer.ElementAt(0));
            Assert.AreEqual(expectedBuffer[1], actualBuffer.ElementAt(1));
            Assert.AreEqual(expectedBuffer[2], actualBuffer.ElementAt(2));
            Assert.AreEqual(expectedBuffer[3], actualBuffer.ElementAt(3));
            // ReSharper restore PossibleMultipleEnumeration
            Assert.AreEqual(expectedOffset, actualOffset);
            Assert.AreEqual(expectedCount, actualCount);
            Assert.AreEqual(expectedEncoding, actualEncoding);
        }
 public void Write_IfNotCaptured_ShouldNotCallWriteOfTheCapturedStream()
 {
     byte[] buffer = new byte[4] {0, 1, 2, 3};
     CapturableStream capturableStream = new CapturableStream(Mock.Of<Stream>(), Mock.Of<Encoding>());
     Assert.IsFalse(capturableStream.CapturedStream.ToArray().Any());
     capturableStream.Write(buffer, 0, buffer.Length);
     Assert.IsFalse(capturableStream.CapturedStream.ToArray().Any());
 }
 public void Write_IfCaptured_ShouldCallWriteOfTheCapturedStream()
 {
     byte[] buffer = new byte[4] {0, 1, 2, 3};
     CapturableStream capturableStream = new CapturableStream(Mock.Of<Stream>(), Mock.Of<Encoding>());
     capturableStream.Capture += (sender, e) => { };
     Assert.IsFalse(capturableStream.CapturedStream.ToArray().Any());
     capturableStream.Write(buffer, 0, buffer.Length);
     Assert.AreEqual(4, capturableStream.CapturedStream.ToArray().Length);
     Assert.AreEqual(0, capturableStream.CapturedStream.ToArray()[0]);
     Assert.AreEqual(1, capturableStream.CapturedStream.ToArray()[1]);
     Assert.AreEqual(2, capturableStream.CapturedStream.ToArray()[2]);
     Assert.AreEqual(3, capturableStream.CapturedStream.ToArray()[3]);
 }