Exemple #1
0
        public void Monitor_TryEnter_Invalid()
        {
            bool lockTaken = false;
            var  obj       = new object();

            AssertExtensions.Throws <ArgumentNullException>("obj", () => Monitor.TryEnter(null));
            AssertExtensions.Throws <ArgumentNullException>("obj", () => Monitor.TryEnter(null, ref lockTaken));
            AssertExtensions.Throws <ArgumentNullException>("obj", () => Monitor.TryEnter(null, 1));
            AssertExtensions.Throws <ArgumentNullException>("obj", () => Monitor.TryEnter(null, 1, ref lockTaken));
            AssertExtensions.Throws <ArgumentNullException>("obj", () => Monitor.TryEnter(null, TimeSpan.Zero));
            AssertExtensions.Throws <ArgumentNullException>("obj", () => Monitor.TryEnter(null, TimeSpan.Zero, ref lockTaken));

            //AssertExtensions.Throws<ArgumentOutOfRangeException>("millisecondsTimeout", () => Monitor.TryEnter(null, -1));
            //AssertExtensions.Throws<ArgumentOutOfRangeException>("millisecondsTimeout", () => Monitor.TryEnter(null, -1, ref lockTaken));
            //AssertExtensions.Throws<ArgumentOutOfRangeException>("timeout", () => Monitor.TryEnter(null, TimeSpan.FromMilliseconds(-1)));
            //AssertExtensions.Throws<ArgumentOutOfRangeException>("timeout", () => Monitor.TryEnter(null, TimeSpan.FromMilliseconds(-1), ref lockTaken));

            AssertExtensions.Throws <ArgumentNullException>("obj", () => Monitor.TryEnter(null, -1));
            AssertExtensions.Throws <ArgumentNullException>("obj", () => Monitor.TryEnter(null, -1, ref lockTaken));
            AssertExtensions.Throws <ArgumentNullException>("obj", () => Monitor.TryEnter(null, TimeSpan.FromMilliseconds(-1)));
            AssertExtensions.Throws <ArgumentNullException>("obj", () => Monitor.TryEnter(null, TimeSpan.FromMilliseconds(-1), ref lockTaken));

            lockTaken = true;
            AssertExtensions.Throws <ArgumentException>("lockTaken", () => Monitor.TryEnter(obj, ref lockTaken));
            lockTaken = true;
            AssertExtensions.Throws <ArgumentException>("lockTaken", () => Monitor.TryEnter(obj, 0, ref lockTaken));
            lockTaken = true;
            AssertExtensions.Throws <ArgumentException>("lockTaken", () => Monitor.TryEnter(obj, TimeSpan.Zero, ref lockTaken));
        }
Exemple #2
0
        public void Monitor_TryEnter_SetsLockTaken()
        {
            bool lockTaken = false;
            var  obj       = new object();

            Monitor.TryEnter(obj, ref lockTaken);
            Assert.IsTrue(lockTaken);
            Monitor.Exit(obj);
            // The documentation does not specifies that lockTaken variable is
            // set to false after Exit is called
            //Assert.IsFalse(lockTaken);
        }
Exemple #3
0
        public void Monitor_BasicRecursion()
        {
            var obj = new object();

            Assert.IsTrue(Monitor.TryEnter(obj));
            Assert.IsTrue(Monitor.TryEnter(obj));
            Monitor.Exit(obj);
            //Assert.IsTrue(Monitor.IsEntered(obj));
            Monitor.Enter(obj);
            //Assert.IsTrue(Monitor.IsEntered(obj));
            Monitor.Exit(obj);
            //Assert.IsTrue(Monitor.IsEntered(obj));
            Monitor.Exit(obj);
            //Assert.IsFalse(Monitor.IsEntered(obj));
        }
Exemple #4
0
        public void Monitor_DeepRecursion()
        {
            var obj = new object();
            var hc  = obj.GetHashCode();
            // reduced from "(long)int.MaxValue + 2;" to something that will return in a more meaningful time
            const int limit = 10000;

            for (var i = 0L; i < limit; i++)
            {
                Assert.IsTrue(Monitor.TryEnter(obj));
            }

            for (var j = 0L; j < (limit - 1); j++)
            {
                Monitor.Exit(obj);
                //Assert.IsTrue(Monitor.IsEntered(obj));
            }

            Monitor.Exit(obj);
            //Assert.IsTrue(Monitor.IsEntered(obj));
        }