public void ViewIO()
        {
            SparseMemoryStream memStream = new SparseMemoryStream();

            memStream.SetLength(1024);

            ThreadSafeStream tss = new ThreadSafeStream(memStream);

            SparseStream altView = tss.OpenView();

            // Check positions are independant
            tss.Position = 100;
            Assert.AreEqual(0, altView.Position);
            Assert.AreEqual(100, tss.Position);

            // Check I/O is synchronous
            byte[] buffer = new byte[200];
            tss.WriteByte(99);
            altView.Read(buffer, 0, 200);
            Assert.AreEqual(99, buffer[100]);

            // Check positions are updated correctly
            Assert.AreEqual(200, altView.Position);
            Assert.AreEqual(101, tss.Position);
        }
 private ThreadSafeStream(ThreadSafeStream toClone)
 {
     _common = toClone._common;
     if (_common == null)
     {
         throw new ObjectDisposedException("toClone");
     }
 }
        public void CanWrite()
        {
            SparseMemoryStream memStream = new SparseMemoryStream(new SparseMemoryBuffer(1), FileAccess.ReadWrite);
            ThreadSafeStream tss = new ThreadSafeStream(memStream);
            Assert.AreEqual(true, tss.CanWrite);

            memStream = new SparseMemoryStream(new SparseMemoryBuffer(1), FileAccess.Read);
            tss = new ThreadSafeStream(memStream);
            Assert.AreEqual(false, tss.CanWrite);
        }
        public void CanRead()
        {
            SparseMemoryStream memStream = new SparseMemoryStream(new SparseMemoryBuffer(1), FileAccess.ReadWrite);
            ThreadSafeStream   tss       = new ThreadSafeStream(memStream);

            Assert.AreEqual(true, tss.CanRead);

            memStream = new SparseMemoryStream(new SparseMemoryBuffer(1), FileAccess.Write);
            tss       = new ThreadSafeStream(memStream);
            Assert.AreEqual(false, tss.CanRead);
        }
        public void ChangeLengthFails()
        {
            SparseMemoryStream memStream = new SparseMemoryStream();
            memStream.SetLength(2);

            ThreadSafeStream tss = new ThreadSafeStream(memStream);
            Assert.AreEqual(2, tss.Length);

            try
            {
                tss.SetLength(10);
                Assert.Fail("SetLength should fail");
            }
            catch (NotSupportedException)
            {
            }
        }
        public void Seek()
        {
            SparseMemoryStream memStream = new SparseMemoryStream(new SparseMemoryBuffer(1), FileAccess.ReadWrite);

            memStream.SetLength(1024);

            ThreadSafeStream tss = new ThreadSafeStream(memStream);

            tss.Seek(10, SeekOrigin.Begin);
            Assert.AreEqual(10, tss.Position);

            tss.Seek(10, SeekOrigin.Current);
            Assert.AreEqual(20, tss.Position);

            tss.Seek(-10, SeekOrigin.End);
            Assert.AreEqual(1014, tss.Position);
        }
        public void DisposeView()
        {
            SparseMemoryStream memStream = new SparseMemoryStream(new SparseMemoryBuffer(1), FileAccess.ReadWrite);

            memStream.SetLength(1024);

            ThreadSafeStream tss = new ThreadSafeStream(memStream);

            SparseStream altView = tss.OpenView();

            altView.Dispose();

            tss.ReadByte();

            SparseStream altView2 = tss.OpenView();

            altView2.ReadByte();
        }
        public void ChangeLengthFails()
        {
            SparseMemoryStream memStream = new SparseMemoryStream();

            memStream.SetLength(2);

            ThreadSafeStream tss = new ThreadSafeStream(memStream);

            Assert.AreEqual(2, tss.Length);

            try
            {
                tss.SetLength(10);
                Assert.Fail("SetLength should fail");
            }
            catch (NotSupportedException)
            {
            }
        }
        public void Dispose_StopsView()
        {
            SparseMemoryStream memStream = new SparseMemoryStream(new SparseMemoryBuffer(1), FileAccess.ReadWrite);

            memStream.SetLength(1024);

            ThreadSafeStream tss = new ThreadSafeStream(memStream);

            SparseStream altView = tss.OpenView();

            tss.Dispose();

            try
            {
                altView.ReadByte();
                Assert.Fail("Disposed stream didn't stop view");
            }
            catch (ObjectDisposedException)
            {
            }
        }
        public void Extents()
        {
            SparseMemoryStream memStream = new SparseMemoryStream(new SparseMemoryBuffer(1), FileAccess.ReadWrite);

            memStream.SetLength(1024);

            ThreadSafeStream tss = new ThreadSafeStream(memStream);

            SparseStream altView = tss.OpenView();

            tss.Position = 100;
            tss.WriteByte(99);

            List <StreamExtent> extents = new List <StreamExtent>(altView.Extents);

            Assert.AreEqual(1, extents.Count);
            Assert.AreEqual(100, extents[0].Start);
            Assert.AreEqual(1, extents[0].Length);

            extents = new List <StreamExtent>(altView.GetExtentsInRange(10, 300));
            Assert.AreEqual(1, extents.Count);
            Assert.AreEqual(100, extents[0].Start);
            Assert.AreEqual(1, extents[0].Length);
        }
        public void Dispose_StopsView()
        {
            SparseMemoryStream memStream = new SparseMemoryStream(new SparseMemoryBuffer(1), FileAccess.ReadWrite);
            memStream.SetLength(1024);

            ThreadSafeStream tss = new ThreadSafeStream(memStream);

            SparseStream altView = tss.OpenView();
            tss.Dispose();

            try
            {
                altView.ReadByte();
                Assert.Fail("Disposed stream didn't stop view");
            }
            catch (ObjectDisposedException)
            {
            }
        }
        public void DisposeView()
        {
            SparseMemoryStream memStream = new SparseMemoryStream(new SparseMemoryBuffer(1), FileAccess.ReadWrite);
            memStream.SetLength(1024);

            ThreadSafeStream tss = new ThreadSafeStream(memStream);

            SparseStream altView = tss.OpenView();
            altView.Dispose();

            tss.ReadByte();

            SparseStream altView2 = tss.OpenView();
            altView2.ReadByte();
        }
 public void OpenView()
 {
     ThreadSafeStream tss  = new ThreadSafeStream(SparseStream.FromStream(Stream.Null, Ownership.None));
     SparseStream     view = tss.OpenView();
 }
        public void ViewIO()
        {
            SparseMemoryStream memStream = new SparseMemoryStream();
            memStream.SetLength(1024);

            ThreadSafeStream tss = new ThreadSafeStream(memStream);

            SparseStream altView = tss.OpenView();

            // Check positions are independant
            tss.Position = 100;
            Assert.AreEqual(0, altView.Position);
            Assert.AreEqual(100, tss.Position);

            // Check I/O is synchronous
            byte[] buffer = new byte[200];
            tss.WriteByte(99);
            altView.Read(buffer, 0, 200);
            Assert.AreEqual(99, buffer[100]);

            // Check positions are updated correctly
            Assert.AreEqual(200, altView.Position);
            Assert.AreEqual(101, tss.Position);
        }
        public void Seek()
        {
            SparseMemoryStream memStream = new SparseMemoryStream(new SparseMemoryBuffer(1), FileAccess.ReadWrite);
            memStream.SetLength(1024);

            ThreadSafeStream tss = new ThreadSafeStream(memStream);

            tss.Seek(10, SeekOrigin.Begin);
            Assert.AreEqual(10, tss.Position);

            tss.Seek(10, SeekOrigin.Current);
            Assert.AreEqual(20, tss.Position);

            tss.Seek(-10, SeekOrigin.End);
            Assert.AreEqual(1014, tss.Position);
        }
 public void OpenView()
 {
     ThreadSafeStream tss = new ThreadSafeStream(SparseStream.FromStream(Stream.Null, Ownership.None));
     SparseStream view = tss.OpenView();
 }
        public void Extents()
        {
            SparseMemoryStream memStream = new SparseMemoryStream(new SparseMemoryBuffer(1), FileAccess.ReadWrite);
            memStream.SetLength(1024);

            ThreadSafeStream tss = new ThreadSafeStream(memStream);

            SparseStream altView = tss.OpenView();

            tss.Position = 100;
            tss.WriteByte(99);

            List<StreamExtent> extents = new List<StreamExtent>(altView.Extents);
            Assert.AreEqual(1, extents.Count);
            Assert.AreEqual(100, extents[0].Start);
            Assert.AreEqual(1, extents[0].Length);

            extents = new List<StreamExtent>(altView.GetExtentsInRange(10, 300));
            Assert.AreEqual(1, extents.Count);
            Assert.AreEqual(100, extents[0].Start);
            Assert.AreEqual(1, extents[0].Length);
        }
 private ThreadSafeStream(ThreadSafeStream toClone)
 {
     _common = toClone._common;
     if (_common == null)
     {
         throw new ObjectDisposedException("toClone");
     }
 }