Пример #1
0
        public void GoodDispose()
        {
            int            dummyHandle = 0xDEAD;
            FakeSafeHandle sf          = new FakeSafeHandle();

            sf.ChangeHandle(new IntPtr(dummyHandle));
            Assert.AreEqual((int)sf.DangerousGetHandle(), dummyHandle, "handle");

            sf.DangerousRelease();

            try {
                sf.Close();
                Assert.Fail("#1");
            } catch (ObjectDisposedException) {
            }

            try {
                sf.Dispose();
                Assert.Fail("#2");
            } catch (ObjectDisposedException) {
            }

            //In Ms.Net SafeHandle does not change the value of the handle after being SetInvalid or Disposed.
            Assert.AreEqual((int)sf.DangerousGetHandle(), dummyHandle, "handle");
            //Handle was closed properly.
            Assert.IsTrue(sf.released, "released");
            Assert.IsTrue(sf.IsClosed, "closed");
            //Handle value is not changed, so the value itself is still valid (not 0 or -1)
            Assert.IsFalse(sf.IsInvalid, "invalid");

            GC.SuppressFinalize(sf);
        }
Пример #2
0
        public void CloseWillDispose()
        {
            FakeSafeHandle sf = new FakeSafeHandle();

            sf.Close();
            Assert.IsTrue(sf.disposed, "disposed");
        }
Пример #3
0
        public void Dispose3()
        {
            FakeSafeHandle sf = new FakeSafeHandle();

            sf.Close();
            sf.DangerousRelease();
        }
Пример #4
0
		public void BadDispose2 ()
		{
			FakeSafeHandle sf = new FakeSafeHandle ();

			sf.Close ();
			sf.DangerousRelease ();
		}
Пример #5
0
        public void ReleaseAfterDispose1()
        {
            int            dummyHandle = 0xDEAD;
            FakeSafeHandle sf          = new FakeSafeHandle(true);

            sf.ChangeHandle(new IntPtr(dummyHandle));
            Assert.AreEqual((int)sf.DangerousGetHandle(), dummyHandle, "handle");

            bool success = false;

            sf.DangerousAddRef(ref success);
            Assert.IsTrue(success, "dar");

            sf.Dispose();
            //Still one ref left.
            Assert.IsFalse(sf.released, "released");
            Assert.IsFalse(sf.IsClosed, "closed");

            sf.DangerousRelease();
            //In Ms.Net SafeHandle does not change the value of the handle after being SetInvalid or Disposed.
            Assert.AreEqual((int)sf.DangerousGetHandle(), dummyHandle, "handle");
            //Handle was closed properly.
            Assert.IsTrue(sf.released, "released");
            Assert.IsTrue(sf.IsClosed, "closed");
            //Handle value is not changed, so the value itself is still valid (not 0 or -1)
            Assert.IsFalse(sf.IsInvalid, "invalid");
        }
Пример #6
0
		public void MultipleDisposes ()
		{
			FakeSafeHandle sf = new FakeSafeHandle ();

			sf.Dispose ();
			sf.Dispose ();
			sf.Dispose ();
		}
Пример #7
0
        public void MultipleDisposes()
        {
            FakeSafeHandle sf = new FakeSafeHandle();

            sf.Dispose();
            sf.Dispose();
            sf.Dispose();
        }
Пример #8
0
        public void DangerousAddRefOnNewInstance()
        {
            FakeSafeHandle sf = new FakeSafeHandle();

            sf.ChangeHandle(IntPtr.Zero);
            Assert.IsTrue(sf.IsInvalid, "invalid");

            bool success = false;

            sf.DangerousAddRef(ref success);
            Assert.IsTrue(success, "daroni");
        }
Пример #9
0
        public void BadDispose1()
        {
            FakeSafeHandle sf = new FakeSafeHandle();

            sf.DangerousRelease();

            try {
                sf.DangerousRelease();
                Assert.Fail("#1");
            } catch (ObjectDisposedException) {
            }

            GC.SuppressFinalize(sf);
        }
Пример #10
0
		public void BadDispose1 ()
		{
			FakeSafeHandle sf = new FakeSafeHandle ();

			sf.DangerousRelease ();

			try {
				sf.DangerousRelease ();
				Assert.Fail ("#1");
			} catch (ObjectDisposedException) {
			}

			GC.SuppressFinalize (sf);
		}
Пример #11
0
        public void NoReleaseUnowned()
        {
            FakeSafeHandle sf = new FakeSafeHandle(false);

            sf.Close();
            Assert.AreEqual(sf.released, false, "r1");

            sf = new FakeSafeHandle(false);
            sf.DangerousRelease();
            Assert.AreEqual(sf.released, false, "r2");

            sf = new FakeSafeHandle(false);
            ((IDisposable)sf).Dispose();
            Assert.AreEqual(sf.released, false, "r3");
        }
Пример #12
0
		public void NoReleaseUnowned ()
		{
			FakeSafeHandle sf = new FakeSafeHandle (false);

			sf.Close ();
			Assert.AreEqual (sf.released, false, "r1");

			sf = new FakeSafeHandle (false);
			sf.DangerousRelease ();
			Assert.AreEqual (sf.released, false, "r2");

			sf = new FakeSafeHandle (false);
			((IDisposable) sf).Dispose ();
			Assert.AreEqual (sf.released, false, "r3");
		}
Пример #13
0
        public void ReleaseAfterDispose2()
        {
            FakeSafeHandle sf = new FakeSafeHandle(true);

            bool success = false;

            sf.DangerousAddRef(ref success);
            Assert.IsTrue(success, "dar");

            sf.Dispose();

            sf.DangerousRelease();

            //Second release need to throw ObjectDisposedException.
            //No more ref to release.
            sf.DangerousRelease();
        }
Пример #14
0
        public void NoReleaseUnowned()
        {
            FakeSafeHandle sf = new FakeSafeHandle(false);

            sf.Close();
            Assert.IsFalse(sf.released, "r1");
            Assert.IsTrue(sf.IsClosed, "c1");

            sf = new FakeSafeHandle(false);
            sf.DangerousRelease();
            Assert.IsFalse(sf.released, "r2");
            Assert.IsTrue(sf.IsClosed, "c2");

            sf = new FakeSafeHandle(false);
            ((IDisposable)sf).Dispose();
            Assert.IsFalse(sf.released, "r3");
            Assert.IsTrue(sf.IsClosed, "c3");
        }
Пример #15
0
        public void SetHandleAsInvalid()
        {
            int            dummyHandle = 0xDEAD;
            FakeSafeHandle sf          = new FakeSafeHandle();

            sf.ChangeHandle(new IntPtr(dummyHandle));
            Assert.AreEqual((int)sf.DangerousGetHandle(), dummyHandle, "handle");

            sf.SetHandleAsInvalid();

            //In Ms.Net SafeHandle does not change the value of the handle after being SetInvalid or Disposed.
            Assert.AreEqual((int)sf.DangerousGetHandle(), dummyHandle, "handle");
            //Released == false since handle was not released, Set Invalid was called before it could be released.
            Assert.IsFalse(sf.released, "released");
            //IsClosed == true since handle is pointing to a disposed or invalid object.
            Assert.IsTrue(sf.IsClosed, "closed");
            //Handle value is not changed, so the value itself is still valid (not 0 or -1)
            Assert.IsFalse(sf.IsInvalid, "invalid");
        }
Пример #16
0
        public void SetInvalidRelease1()
        {
            FakeSafeHandle sf = new FakeSafeHandle(true);

            bool success = false;

            sf.DangerousAddRef(ref success);
            Assert.IsTrue(success, "dar");

            sf.SetHandleAsInvalid();

            Assert.IsFalse(sf.released, "released");
            Assert.IsTrue(sf.IsClosed, "closed");

            //Allow remaining refs to be released after SetHandleAsInvalid
            sf.DangerousRelease();
            sf.DangerousRelease();

            Assert.IsFalse(sf.released, "released");
            Assert.IsTrue(sf.IsClosed, "closed");
        }
Пример #17
0
		public void CloseWillDispose ()
		{
			FakeSafeHandle sf = new FakeSafeHandle ();

			sf.Close ();
			Assert.IsTrue (sf.disposed, "disposed");
		}
Пример #18
0
        public void SimpleDispose()
        {
            FakeSafeHandle sf = new FakeSafeHandle();

            sf.Dispose();
        }
Пример #19
0
		public void SimpleDispose ()
		{
			FakeSafeHandle sf = new FakeSafeHandle ();
			sf.Dispose ();
		}
Пример #20
0
		public void DangerousAddRefOnNewInstance ()
		{
			FakeSafeHandle sf = new FakeSafeHandle ();
			sf.ChangeHandle (IntPtr.Zero);
			Assert.IsTrue (sf.IsInvalid, "invalid");

			bool success = false;
			sf.DangerousAddRef (ref success);
			Assert.IsTrue (success, "daroni");
		}
Пример #21
0
		public void NoReleaseUnowned ()
		{
			FakeSafeHandle sf = new FakeSafeHandle (false);

			sf.Close ();
			Assert.IsFalse (sf.released, "r1");
			Assert.IsTrue (sf.IsClosed, "c1");

			sf = new FakeSafeHandle (false);
			sf.DangerousRelease ();
			Assert.IsFalse (sf.released, "r2");
			Assert.IsTrue (sf.IsClosed, "c2");

			sf = new FakeSafeHandle (false);
			((IDisposable) sf).Dispose ();
			Assert.IsFalse (sf.released, "r3");
			Assert.IsTrue (sf.IsClosed, "c3");
		}
Пример #22
0
		public void ReleaseAfterDispose2 ()
		{
			FakeSafeHandle sf = new FakeSafeHandle (true);

			bool success = false;
			sf.DangerousAddRef(ref success);
			Assert.IsTrue (success, "dar");

			sf.Dispose ();

			sf.DangerousRelease ();

			//Second release need to throw ObjectDisposedException.
			//No more ref to release.
			sf.DangerousRelease ();
		}
Пример #23
0
		public void ReleaseAfterDispose1 ()
		{
			int dummyHandle = 0xDEAD;
			FakeSafeHandle sf = new FakeSafeHandle (true);
			sf.ChangeHandle (new IntPtr (dummyHandle));
			Assert.AreEqual ((int)sf.DangerousGetHandle(), dummyHandle, "handle");

			bool success = false;
			sf.DangerousAddRef(ref success);
			Assert.IsTrue (success, "dar");

			sf.Dispose ();
			//Still one ref left.
			Assert.IsFalse (sf.released, "released");
			Assert.IsFalse (sf.IsClosed, "closed");

			sf.DangerousRelease ();
			//In Ms.Net SafeHandle does not change the value of the handle after being SetInvalid or Disposed.
			Assert.AreEqual ((int)sf.DangerousGetHandle(), dummyHandle, "handle");
			//Handle was closed properly.
			Assert.IsTrue (sf.released, "released");
			Assert.IsTrue (sf.IsClosed, "closed");
			//Handle value is not changed, so the value itself is still valid (not 0 or -1)
			Assert.IsFalse (sf.IsInvalid, "invalid");
		}
Пример #24
0
		public void SetInvalidRelease1 ()
		{
			FakeSafeHandle sf = new FakeSafeHandle (true);

			bool success = false;
			sf.DangerousAddRef(ref success);
			Assert.IsTrue (success, "dar");

			sf.SetHandleAsInvalid();

			Assert.IsFalse (sf.released, "released");
			Assert.IsTrue (sf.IsClosed, "closed");

			//Allow remaining refs to be released after SetHandleAsInvalid
			sf.DangerousRelease ();
			sf.DangerousRelease ();

			Assert.IsFalse (sf.released, "released");
			Assert.IsTrue (sf.IsClosed, "closed");
		}
Пример #25
0
		public void SetInvalidDispose ()
		{
			int dummyHandle = 0xDEAD;
			FakeSafeHandle sf = new FakeSafeHandle (true);

			sf.ChangeHandle (new IntPtr (dummyHandle));
			Assert.AreEqual ((int)sf.DangerousGetHandle(), dummyHandle, "handle");

			sf.SetHandleAsInvalid();
			sf.Dispose ();

			//In Ms.Net SafeHandle does not change the value of the handle after being SetInvalid or Disposed.
			Assert.AreEqual ((int)sf.DangerousGetHandle(), dummyHandle, "handle");
			//Released == false since handle was not released, Set Invalid was called before it could be released.
			Assert.IsFalse (sf.released, "released");
			//IsClosed == true since handle is pointing to a disposed or invalid object.
			Assert.IsTrue (sf.IsClosed, "closed");
			//Handle value is not changed, so the value itself is still valid (not 0 or -1)
			Assert.IsFalse (sf.IsInvalid, "invalid");
		}
Пример #26
0
		public void GoodDispose ()
		{
			int dummyHandle = 0xDEAD;
			FakeSafeHandle sf = new FakeSafeHandle ();
			sf.ChangeHandle (new IntPtr (dummyHandle));
			Assert.AreEqual ((int)sf.DangerousGetHandle(), dummyHandle, "handle");

			sf.DangerousRelease ();

			try {
				sf.Close ();
				Assert.Fail ("#1");
			} catch (ObjectDisposedException) {
			}

			try {
				sf.Dispose ();
				Assert.Fail ("#2");
			} catch (ObjectDisposedException) {
			}

			//In Ms.Net SafeHandle does not change the value of the handle after being SetInvalid or Disposed.
			Assert.AreEqual ((int)sf.DangerousGetHandle(), dummyHandle, "handle");
			//Handle was closed properly.
			Assert.IsTrue (sf.released, "released");
			Assert.IsTrue (sf.IsClosed, "closed");
			//Handle value is not changed, so the value itself is still valid (not 0 or -1)
			Assert.IsFalse (sf.IsInvalid, "invalid");

			GC.SuppressFinalize (sf);
		}