Esempio n. 1
0
        public void TestChangingCallbackAddLocks()
        {
            var obj  = new DummyLockable(1);
            var obj2 = new DummyLockable(2);
            var obj3 = new DummyLockable(3);

            int callCount = 0;

            CallbackLock.CallbackLockHandler lockFunc = delegate
            {
                if (callCount == 0)
                {
                    callCount++;
                    return(new ILockable[] { obj2 });
                }

                callCount++;
                return(new ILockable[] { obj3, obj2 });
            };
            var lck = new CallbackLock(multiObjectLockFactory).Lock(lockFunc, null, obj);

            DefaultMultiObjectLock.IsLocked(obj).Should().BeTrue();
            DefaultMultiObjectLock.IsLocked(obj2).Should().BeTrue();
            DefaultMultiObjectLock.IsLocked(obj3).Should().BeTrue();

            lck.UnlockAll();

            DefaultMultiObjectLock.IsLocked(obj).Should().BeFalse();
            DefaultMultiObjectLock.IsLocked(obj2).Should().BeFalse();
            DefaultMultiObjectLock.IsLocked(obj3).Should().BeFalse();
        }
Esempio n. 2
0
        public void TestEmptyListFromCallback()
        {
            var obj = new DummyLockable(1);

            CallbackLock.CallbackLockHandler lockFunc = custom => new ILockable[] {};
            var lck = new CallbackLock(multiObjectLockFactory).Lock(lockFunc, null, obj);

            DefaultMultiObjectLock.IsLocked(obj).Should().BeTrue();
            lck.UnlockAll();
            DefaultMultiObjectLock.IsLocked(obj).Should().BeFalse();
        }
Esempio n. 3
0
        public void IsLocked_ShouldTellIfObjectsAreLocked(ILockable lock1, ILockable lock2, ILockable lock3)
        {
            lock1.Lock.Returns(new object());
            lock2.Lock.Returns(new object());
            lock3.Lock.Returns(new object());

            lock1.Hash.Returns(100);
            lock2.Hash.Returns(200);
            lock3.Hash.Returns(300);

            locker.Lock(new[] { lock1, lock2 });

            DefaultMultiObjectLock.IsLocked(lock1).Should().BeTrue();
            DefaultMultiObjectLock.IsLocked(lock2).Should().BeTrue();
            DefaultMultiObjectLock.IsLocked(lock3).Should().BeFalse();
        }