public void ShouldNotExecuteOnGarbageCollectedFilterReferenceWhenNotKeepAlive() { var pubSubEvent = new TestablePubSubEvent <string>(); var wasCalled = false; var actionEvent = new ActionHelper { ActionToExecute = () => wasCalled = true }; var filter = new ExternalFilter(); pubSubEvent.Subscribe(actionEvent.Action, ThreadOption.PublisherThread, false, filter.AlwaysTrueFilter); pubSubEvent.Publish("testPayload"); Assert.IsTrue(wasCalled); wasCalled = false; var filterReference = new WeakReference(filter); filter = null; GC.Collect(); Assert.IsFalse(filterReference.IsAlive); pubSubEvent.Publish("testPayload"); Assert.IsFalse(wasCalled); }
public async Task ShouldNotExecuteOnGarbageCollectedFilterReferenceWhenNotKeepAlive() { var PubSubEvent = new TestablePubSubEvent <string>(); bool wasCalled = false; var actionEvent = new ActionHelper() { ActionToExecute = () => wasCalled = true }; ExternalFilter filter = new ExternalFilter(); PubSubEvent.Subscribe(actionEvent.Action, ThreadOption.PublisherThread, false, filter.AlwaysTrueFilter); PubSubEvent.Publish("testPayload"); Assert.True(wasCalled); wasCalled = false; WeakReference filterReference = new WeakReference(filter); filter = null; await Task.Delay(100); GC.Collect(); Assert.False(filterReference.IsAlive); PubSubEvent.Publish("testPayload"); Assert.False(wasCalled); }
public void EnsureSubscriptionListIsEmptyAfterPublishingAMessage() { var pubSubEvent = new TestablePubSubEvent <string>(); SubscribeExternalActionWithoutReference(pubSubEvent); GC.Collect(); pubSubEvent.Publish("testPayload"); Assert.True(pubSubEvent.BaseSubscriptions.Count == 0, "Subscriptionlist is not empty"); }
public void CanSubscribeAndRaiseEventNonGeneric() { var pubSubEvent = new TestablePubSubEvent(); bool published = false; pubSubEvent.Subscribe(delegate { published = true; }, ThreadOption.PublisherThread, true); pubSubEvent.Publish(); Assert.IsTrue(published); }
public void CanSubscribeAndRaiseEvent() { TestablePubSubEvent <string> pubSubEvent = new TestablePubSubEvent <string>(); bool published = false; pubSubEvent.Subscribe(delegate { published = true; }, ThreadOption.PublisherThread, true, delegate { return(true); }); pubSubEvent.Publish(null); Assert.IsTrue(published); }
public void ShouldNotExecuteOnGarbageCollectedDelegateReferenceWhenNotKeepAlive() { var pubSubEvent = new TestablePubSubEvent <string>(); var externalAction = new ExternalAction(); pubSubEvent.Subscribe(externalAction.ExecuteAction); pubSubEvent.Publish("testPayload"); Assert.AreEqual("testPayload", externalAction.PassedValue); var actionEventReference = new WeakReference(externalAction); externalAction = null; GC.Collect(); Assert.IsFalse(actionEventReference.IsAlive); pubSubEvent.Publish("testPayload"); }
public void ShouldNotExecuteOnGarbageCollectedDelegateReferenceWhenNotKeepAliveNonGeneric() { var pubSubEvent = new TestablePubSubEvent(); var externalAction = new ExternalAction(); pubSubEvent.Subscribe(externalAction.ExecuteAction); pubSubEvent.Publish(); Assert.IsTrue(externalAction.Executed); var actionEventReference = new WeakReference(externalAction); externalAction = null; GC.Collect(); Assert.IsFalse(actionEventReference.IsAlive); pubSubEvent.Publish(); }
public void SubscribeTakesExecuteDelegateThreadOptionAndFilter() { TestablePubSubEvent <string> pubSubEvent = new TestablePubSubEvent <string>(); var action = new ActionHelper(); pubSubEvent.Subscribe(action.Action); pubSubEvent.Publish("test"); Assert.AreEqual("test", action.ActionArg <string>()); }
public void InlineDelegateDeclarationsDoesNotGetCollectedIncorrectlyWithWeakReferencesNonGeneric() { var pubSubEvent = new TestablePubSubEvent(); bool published = false; pubSubEvent.Subscribe(delegate { published = true; }, ThreadOption.PublisherThread, false); GC.Collect(); pubSubEvent.Publish(); Assert.IsTrue(published); }
public void InlineDelegateDeclarationsDoesNotGetCollectedIncorrectlyWithWeakReferences() { var PubSubEvent = new TestablePubSubEvent <string>(); bool published = false; PubSubEvent.Subscribe(delegate { published = true; }, ThreadOption.PublisherThread, false, delegate { return(true); }); GC.Collect(); PubSubEvent.Publish(null); Assert.IsTrue(published); }
public void CanSubscribeAndRaiseCustomEvent() { var customEvent = new TestablePubSubEvent <Payload>(); Payload payload = new Payload(); var action = new ActionHelper(); customEvent.Subscribe(action.Action); customEvent.Publish(payload); Assert.AreSame(action.ActionArg <Payload>(), payload); }
public async Task 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; await Task.Delay(100); GC.Collect(); Assert.False(actionEventReference.IsAlive); PubSubEvent.Publish("testPayload"); }
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); }
public void CanHaveMultipleSubscribersAndRaiseEvent() { var customEvent = new TestablePubSubEvent(); var action1 = new ActionHelper(); var action2 = new ActionHelper(); customEvent.Subscribe(action1.Action); customEvent.Subscribe(action2.Action); customEvent.Publish(); Assert.IsTrue(action1.ActionCalled); Assert.IsTrue(action2.ActionCalled); }
public void CanHaveMultipleSubscribersAndRaiseCustomEvent() { var customEvent = new TestablePubSubEvent <Payload>(); Payload payload = new Payload(); var action1 = new ActionHelper(); var action2 = new ActionHelper(); customEvent.Subscribe(action1.Action); customEvent.Subscribe(action2.Action); customEvent.Publish(payload); Assert.Same(action1.ActionArg <Payload>(), payload); Assert.Same(action2.ActionArg <Payload>(), payload); }
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 SubscribeDefaultsThreadOptionAndNoFilter() { var pubSubEvent = new TestablePubSubEvent <string>(); SynchronizationContext.SetSynchronizationContext(new SynchronizationContext()); SynchronizationContext calledSyncContext = null; var myAction = new ActionHelper { ActionToExecute = () => calledSyncContext = SynchronizationContext.Current }; pubSubEvent.Subscribe(myAction.Action); pubSubEvent.Publish("test"); Assert.AreEqual(SynchronizationContext.Current, calledSyncContext); }
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.IsTrue(actionEventReference.IsAlive); pubSubEvent.Publish(); Assert.IsTrue(((ExternalAction)actionEventReference.Target).Executed); }
public void ShouldNotGarbageCollectDelegateReferenceWhenUsingKeepAlive() { var pubSubEvent = new TestablePubSubEvent <string>(); var externalAction = new ExternalAction(); pubSubEvent.Subscribe(externalAction.ExecuteAction, ThreadOption.PublisherThread, true); var actionEventReference = new WeakReference(externalAction); externalAction = null; GC.Collect(); GC.Collect(); Assert.IsTrue(actionEventReference.IsAlive); pubSubEvent.Publish("testPayload"); Assert.AreEqual("testPayload", ((ExternalAction)actionEventReference.Target).PassedValue); }
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.False(pubSubEvent.Contains(emptyAction.Action)); pubSubEvent.Publish(); Assert.True((pubSubEvent.Contains(emptyAction.Action))); }
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); }