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(); }
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(); }
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(); }