public void ShouldNotGarbageCollectDelegateReferenceWhenUsingKeepAliveNonGeneric() { var pubSubEvent = new TestablePubSubEvent(); var externalAction = new ExternalAction(); pubSubEvent.Subscribe(externalAction.ExecuteAction, ThreadOption.PublisherThread, true); WeakReference actionEventReference = new WeakReference(externalAction); externalAction = null; GC.Collect(); GC.Collect(); Assert.True(actionEventReference.IsAlive); pubSubEvent.Publish(); Assert.True(((ExternalAction)actionEventReference.Target).Executed); }
public void ShouldNotGarbageCollectDelegateReferenceWhenUsingKeepAlive() { var PubSubEvent = new TestablePubSubEvent <string>(); var externalAction = new ExternalAction(); PubSubEvent.Subscribe(externalAction.ExecuteAction, ThreadOption.PublisherThread, true); WeakReference actionEventReference = new WeakReference(externalAction); externalAction = null; GC.Collect(); GC.Collect(); Assert.True(actionEventReference.IsAlive); PubSubEvent.Publish("testPayload"); Assert.Equal("testPayload", ((ExternalAction)actionEventReference.Target).PassedValue); }
public void ShouldNotExecuteOnGarbageCollectedDelegateReferenceWhenNotKeepAliveNonGeneric() { var pubSubEvent = new TestablePubSubEvent(); var externalAction = new ExternalAction(); pubSubEvent.Subscribe(externalAction.ExecuteAction); pubSubEvent.Publish(); Assert.True(externalAction.Executed); var actionEventReference = new WeakReference(externalAction); externalAction = null; GC.Collect(); Assert.False(actionEventReference.IsAlive); pubSubEvent.Publish(); }
public void ShouldNotExecuteOnGarbageCollectedDelegateReferenceWhenNotKeepAlive() { var PubSubEvent = new TestablePubSubEvent <string>(); ExternalAction externalAction = new ExternalAction(); PubSubEvent.Subscribe(externalAction.ExecuteAction); PubSubEvent.Publish("testPayload"); Assert.Equal("testPayload", externalAction.PassedValue); WeakReference actionEventReference = new WeakReference(externalAction); externalAction = null; GC.Collect(); Assert.False(actionEventReference.IsAlive); PubSubEvent.Publish("testPayload"); }
public void FilterEnablesActionTarget() { TestablePubSubEvent <string> pubSubEvent = new TestablePubSubEvent <string>(); var goodFilter = new MockFilter { FilterReturnValue = true }; var actionGoodFilter = new ActionHelper(); var badFilter = new MockFilter { FilterReturnValue = false }; var actionBadFilter = new ActionHelper(); pubSubEvent.Subscribe(actionGoodFilter.Action, ThreadOption.PublisherThread, true, goodFilter.FilterString); pubSubEvent.Subscribe(actionBadFilter.Action, ThreadOption.PublisherThread, true, badFilter.FilterString); pubSubEvent.Publish("test"); Assert.IsTrue(actionGoodFilter.ActionCalled); Assert.IsFalse(actionBadFilter.ActionCalled); }
public void CanAddSubscriptionWhileEventIsFiringNonGeneric() { var pubSubEvent = new TestablePubSubEvent(); var emptyAction = new ActionHelper(); var subscriptionAction = new ActionHelper { ActionToExecute = (() => pubSubEvent.Subscribe( emptyAction.Action)) }; pubSubEvent.Subscribe(subscriptionAction.Action); Assert.IsFalse(pubSubEvent.Contains(emptyAction.Action)); pubSubEvent.Publish(); Assert.IsTrue((pubSubEvent.Contains(emptyAction.Action))); }
public void CanAddSubscriptionWhileEventIsFiring() { var PubSubEvent = new TestablePubSubEvent <string>(); var emptyAction = new ActionHelper(); var subscriptionAction = new ActionHelper { ActionToExecute = (() => PubSubEvent.Subscribe( emptyAction.Action)) }; PubSubEvent.Subscribe(subscriptionAction.Action); Assert.IsFalse(PubSubEvent.Contains(emptyAction.Action)); PubSubEvent.Publish(null); Assert.IsTrue((PubSubEvent.Contains(emptyAction.Action))); }
public void ShouldUnsubscribeASingleDelegate() { var pubSubEvent = new TestablePubSubEvent <string>(); var callCount = 0; var actionEvent = new ActionHelper { ActionToExecute = () => callCount++ }; pubSubEvent.Subscribe(actionEvent.Action); pubSubEvent.Subscribe(actionEvent.Action); pubSubEvent.Publish(null); Assert.AreEqual(2, callCount); callCount = 0; pubSubEvent.Unsubscribe(actionEvent.Action); pubSubEvent.Publish(null); Assert.AreEqual(1, callCount); }
public void ShouldUnsubscribeASingleDelegateNonGeneric() { var pubSubEvent = new TestablePubSubEvent(); int callCount = 0; var actionEvent = new ActionHelper() { ActionToExecute = () => callCount++ }; pubSubEvent.Subscribe(actionEvent.Action); pubSubEvent.Subscribe(actionEvent.Action); pubSubEvent.Publish(); Assert.AreEqual <int>(2, callCount); callCount = 0; pubSubEvent.Unsubscribe(actionEvent.Action); pubSubEvent.Publish(); Assert.AreEqual <int>(1, callCount); }
private static void SubscribeExternalActionWithoutReference(TestablePubSubEvent <string> pubSubEvent) { pubSubEvent.Subscribe(new ExternalAction().ExecuteAction); }