public void TargetEqualsActionShouldReturnTrue() { var classHandler = new SomeClassHandler(); Action <string> myAction = new Action <string>(classHandler.MyAction); var weakAction = new DelegateReference(myAction, false); Assert.True(weakAction.TargetEquals(new Action <string>(classHandler.MyAction))); }
public void NotKeepAliveAllowsDelegateToBeCollected() { var delegates = new SomeClassHandler(); var delegateReference = new DelegateReference((Action <string>)delegates.DoEvent, false); delegates = null; GC.Collect(); Assert.Null(delegateReference.Target); }
public void KeepAlivePreventsDelegateFromBeingCollected() { var delegates = new SomeClassHandler(); var delegateReference = new DelegateReference((Action <string>)delegates.DoEvent, true); delegates = null; GC.Collect(); Assert.NotNull(delegateReference.Target); }
public void KeepAlivePreventsDelegateFromBeingCollected() { var delegates = new SomeClassHandler(); var delegateReference = new DelegateReference((Action<string>)delegates.DoEvent, true); delegates = null; GC.Collect(); Assert.IsNotNull(delegateReference.Target); }
public void TargetShouldReturnAction() { var classHandler = new SomeClassHandler(); Action <string> myAction = new Action <string>(classHandler.MyAction); var weakAction = new DelegateReference(myAction, false); ((Action <string>)weakAction.Target)("payload"); Assert.Equal("payload", classHandler.MyActionArg); }
public void TargetShouldReturnAction() { var classHandler = new SomeClassHandler(); Action<string> myAction = new Action<string>(classHandler.MyAction); var weakAction = new DelegateReference(myAction, false); ((Action<string>)weakAction.Target)("payload"); Assert.AreEqual("payload", classHandler.MyActionArg); }
public void NotKeepAliveAllowsDelegateToBeCollected() { var delegates = new SomeClassHandler(); var delegateReference = new DelegateReference((Action<string>)delegates.DoEvent, false); delegates = null; GC.Collect(); Assert.IsNull(delegateReference.Target); }
public void TargetEqualsNullShouldReturnFalseIfTargetAlive() { SomeClassHandler handler = new SomeClassHandler(); var weakHandlerRef = new WeakReference(handler); var action = new DelegateReference((Action <string>)handler.DoEvent, false); Assert.False(action.TargetEquals(null)); Assert.True(weakHandlerRef.IsAlive); GC.KeepAlive(handler); }
public void Not_Keep_Alive_Should_Allow_Delegate_To_Be_Collected() { var delegates = new SomeClassHandler(); var delegateReference = new DelegateReference((Action<string>) delegates.DoEvent, false); // ReSharper disable RedundantAssignment delegates = null; // ReSharper restore RedundantAssignment GC.Collect(); Assert.Null(delegateReference.Target); }
public void Keep_Alive_Should_Prevent_Delegate_From_Being_Collected() { var delegates = new SomeClassHandler(); var delegateReference = new DelegateReference((Action <string>)delegates.DoEvent, true); // ReSharper disable RedundantAssignment delegates = null; // ReSharper restore RedundantAssignment GC.Collect(); Assert.NotNull(delegateReference.Target); }
public void Not_Keep_Alive_Should_Allow_Delegate_To_Be_Collected() { var delegates = new SomeClassHandler(); var delegateReference = new DelegateReference((Action <string>)delegates.DoEvent, false); // ReSharper disable RedundantAssignment delegates = null; // ReSharper restore RedundantAssignment GC.Collect(); Assert.Null(delegateReference.Target); }
public void Keep_Alive_Should_Prevent_Delegate_From_Being_Collected() { var delegates = new SomeClassHandler(); var delegateReference = new DelegateReference((Action<string>)delegates.DoEvent, true); // ReSharper disable RedundantAssignment delegates = null; // ReSharper restore RedundantAssignment GC.Collect(); Assert.NotNull(delegateReference.Target); }
public void ShouldReturnNullIfTargetNotAlive() { SomeClassHandler handler = new SomeClassHandler(); var weakHandlerRef = new WeakReference(handler); var action = new DelegateReference((Action <string>)handler.DoEvent, false); handler = null; GC.Collect(); Assert.False(weakHandlerRef.IsAlive); Assert.Null(action.Target); }
public void ShouldReturnNullIfTargetNotAlive() { SomeClassHandler handler = new SomeClassHandler(); var weakHandlerRef = new WeakReference(handler); var action = new DelegateReference((Action<string>)handler.DoEvent, false); handler = null; GC.Collect(); Assert.IsFalse(weakHandlerRef.IsAlive); Assert.IsNull(action.Target); }
public void TargetShouldReturnAction() { //string something = null; //Action<string> myAction = (arg => something = arg); SomeClassHandler classHandler = new SomeClassHandler(); Action<string> myAction = new Action<string>(classHandler.MyAction); var weakAction = new DelegateReference(myAction, false); ((Action<string>)weakAction.Target)("payload"); //Assert.AreEqual("payload", something); Assert.AreEqual("payload", classHandler.Value); }
public void Should_Return_Null_If_Target_NotAlive() { SomeClassHandler handler = new SomeClassHandler(); var weakHandlerRef = new WeakReference(handler); var action = new DelegateReference((Action <string>)handler.DoEvent, false); // ReSharper disable RedundantAssignment handler = null; // ReSharper restore RedundantAssignment GC.Collect(); Assert.False(weakHandlerRef.IsAlive); Assert.Null(action.Target); }
public void TargetShouldReturnAction() { //string something = null; //Action<string> myAction = (arg => something = arg); SomeClassHandler classHandler = new SomeClassHandler(); Action <string> myAction = new Action <string>(classHandler.MyAction); var weakAction = new DelegateReference(myAction, false); ((Action <string>)weakAction.Target)("payload"); //Assert.AreEqual("payload", something); Assert.AreEqual("payload", classHandler.Value); }
public void NotKeepAliveKeepsDelegateIfStillAlive() { var delegates = new SomeClassHandler(); var delegateReference = new DelegateReference((Action <string>)delegates.DoEvent, false); GC.Collect(); Assert.IsNotNull(delegateReference.Target); delegates = null; GC.Collect(); Assert.IsNull(delegateReference.Target); }
public void NotKeepAliveKeepsDelegateIfStillAlive() { var delegates = new SomeClassHandler(); var delegateReference = new DelegateReference((Action <string>)delegates.DoEvent, false); GC.Collect(); Assert.NotNull(delegateReference.Target); GC.KeepAlive(delegates); //Makes delegates ineligible for garbage collection until this point (to prevent oompiler optimizations that may release the referenced object prematurely). delegates = null; GC.Collect(); Assert.Null(delegateReference.Target); }
public void ShouldAllowCollectionOfOriginalDelegate() { var classHandler = new SomeClassHandler(); Action<string> myAction = new Action<string>(classHandler.MyAction); var weakAction = new DelegateReference(myAction, false); var originalAction = new WeakReference(myAction); myAction = null; GC.Collect(); Assert.IsFalse(originalAction.IsAlive); ((Action<string>)weakAction.Target)("payload"); Assert.AreEqual("payload", classHandler.MyActionArg); }
public void NotKeepAliveKeepsDelegateIfStillAlive() { var delegates = new SomeClassHandler(); var delegateReference = new DelegateReference((Action<string>)delegates.DoEvent, false); GC.Collect(); Assert.IsNotNull(delegateReference.Target); GC.KeepAlive(delegates); //Makes delegates ineligible for garbage collection until this point (to prevent oompiler optimizations that may release the referenced object prematurely). delegates = null; GC.Collect(); Assert.IsNull(delegateReference.Target); }
public async Task TargetEqualsNullShouldReturnTrueIfTargetNotAlive() { SomeClassHandler handler = new SomeClassHandler(); var weakHandlerRef = new WeakReference(handler); var action = new DelegateReference((Action <string>)handler.DoEvent, false); handler = null; // Intentional delay to encourage Garbage Collection to actually occur await Task.Delay(100); GC.Collect(); Assert.False(weakHandlerRef.IsAlive); Assert.True(action.TargetEquals(null)); }
public void Should_Allow_Collection_Of_Original_Delegate() { var classHandler = new SomeClassHandler(); Action<string> myAction = classHandler.MyAction; var weakAction = new DelegateReference(myAction, false); var originalAction = new WeakReference(myAction); // ReSharper disable RedundantAssignment myAction = null; // ReSharper restore RedundantAssignment GC.Collect(); Assert.False(originalAction.IsAlive); ((Action<string>)weakAction.Target)("payload"); Assert.Equal("payload", classHandler.MyActionArg); }
public void Should_Allow_Collection_Of_Original_Delegate() { var classHandler = new SomeClassHandler(); Action <string> myAction = classHandler.MyAction; var weakAction = new DelegateReference(myAction, false); var originalAction = new WeakReference(myAction); // ReSharper disable RedundantAssignment myAction = null; // ReSharper restore RedundantAssignment GC.Collect(); Assert.False(originalAction.IsAlive); ((Action <string>)weakAction.Target)("payload"); Assert.Equal("payload", classHandler.MyActionArg); }
public async Task ShouldAllowCollectionOfOriginalDelegate() { var classHandler = new SomeClassHandler(); Action <string> myAction = new(classHandler.MyAction); var weakAction = new DelegateReference(myAction, false); var originalAction = new WeakReference(myAction); myAction = null; await Task.Delay(100); GC.Collect(); Assert.False(originalAction.IsAlive); ((Action <string>)weakAction.Target)("payload"); Assert.Equal("payload", classHandler.MyActionArg); }
public void Should_Return_Null_If_Target_NotAlive() { SomeClassHandler handler = new SomeClassHandler(); var weakHandlerRef = new WeakReference(handler); var action = new DelegateReference((Action<string>)handler.DoEvent, false); // ReSharper disable RedundantAssignment handler = null; // ReSharper restore RedundantAssignment GC.Collect(); Assert.False(weakHandlerRef.IsAlive); Assert.Null(action.Target); }