public void NotKeepAliveShouldAllowDelegateToBeCollected() { var delegates = new TestClassHandler(); var delegateReference = new DelegateReference((Action<string>) delegates.DoEvent, false); delegates = null; GC.Collect(); Assert.That(delegateReference.Target, Is.Null); }
public void KeepAliveShouldPreventDelegateFromBeingCollected() { var delegates = new TestClassHandler(); var delegateReference = new DelegateReference((Action<string>)delegates.DoEvent, true); delegates = null; GC.Collect(); Assert.That(delegateReference.Target, Is.Not.Null); }
public void ShouldAllowCollectionOfOriginalDelegate() { var classHandler = new TestClassHandler(); Action<string> myAction = classHandler.MyAction; var weakAction = new DelegateReference(myAction, false); var originalAction = new WeakReference(myAction); myAction = null; GC.Collect(); Assert.That(originalAction.IsAlive, Is.False); ((Action<string>)weakAction.Target)("payload"); Assert.That(classHandler.MyActionArg, Is.EqualTo("payload")); }
public void WeakDelegateShouldWorkWithStaticMethodDelegates() { var action = new DelegateReference((Action)TestClassHandler.StaticMethod, false); Assert.That(action.Target, Is.Not.Null); }
public void TargetShouldReturnAction() { var classHandler = new TestClassHandler(); Action<string> myAction = classHandler.MyAction; var weakAction = new DelegateReference(myAction, false); ((Action<string>) weakAction.Target)("payload"); Assert.That(classHandler.MyActionArg, Is.EqualTo("payload")); }
public void ShouldReturnNullIfTargetNotAlive() { var handler = new TestClassHandler(); var weakHandlerRef = new WeakReference(handler); var action = new DelegateReference((Action<string>)handler.DoEvent, false); handler = null; GC.Collect(); Assert.That(weakHandlerRef.IsAlive, Is.False); Assert.That(action.Target, Is.Null); }