public void ShouldReceiveDelegateOnDifferentThread() { int calledThreadId = -1; ManualResetEvent completeEvent = new ManualResetEvent(false); Action<object> action = delegate { calledThreadId = Thread.CurrentThread.ManagedThreadId; completeEvent.Set(); }; IDelegateReference actionDelegateReference = new MockDelegateReference() { Target = action }; IDelegateReference filterDelegateReference = new MockDelegateReference() { Target = (Predicate<object>)delegate { return true; } }; var eventSubscription = new BackgroundEventSubscription<object>(actionDelegateReference, filterDelegateReference); var publishAction = eventSubscription.GetExecutionStrategy(); Assert.IsNotNull(publishAction); publishAction.Invoke(null); completeEvent.WaitOne(5000, false); Assert.AreNotEqual(Thread.CurrentThread.ManagedThreadId, calledThreadId); }
public void NullActionThrows() { var filterDelegateReference = new MockDelegateReference() { Target = (Predicate<object>)(arg => { return true; }) }; var eventSubscription = new EventSubscription<object>(null, filterDelegateReference); }
public void DifferentTargetTypeInActionThrows() { var actionDelegateReference = new MockDelegateReference() { Target = (Action<object>)delegate { } }; var filterDelegateReference = new MockDelegateReference() { Target = (Predicate<string>)(arg => { return true; }) }; var eventSubscription = new EventSubscription<string>(actionDelegateReference, filterDelegateReference); }
public void NullTargetInFilterThrows() { var actionDelegateReference = new MockDelegateReference() { Target = (Action<object>)delegate { } }; var filterDelegateReference = new MockDelegateReference() { Target = null }; var eventSubscription = new EventSubscription<object>(actionDelegateReference, filterDelegateReference); }
public void StrategyPassesArgumentToDelegates() { string passedArgumentToAction = null; string passedArgumentToFilter = null; var actionDelegateReference = new MockDelegateReference((Action<string>)(obj => passedArgumentToAction = obj)); var filterDelegateReference = new MockDelegateReference((Predicate<string>)(obj => { passedArgumentToFilter = obj; return true; })); var eventSubscription = new EventSubscription<string>(actionDelegateReference, filterDelegateReference); var publishAction = eventSubscription.GetExecutionStrategy(); publishAction.Invoke(new[] { "TestString" }); Assert.AreEqual("TestString", passedArgumentToAction); Assert.AreEqual("TestString", passedArgumentToFilter); }
public void GetPublishActionDoesNotExecuteActionIfFilterReturnsFalse() { bool actionExecuted = false; var actionDelegateReference = new MockDelegateReference() { Target = (Action<int>)delegate { actionExecuted = true; } }; var filterDelegateReference = new MockDelegateReference((Predicate<int>)delegate { return false; }); var eventSubscription = new EventSubscription<int>(actionDelegateReference, filterDelegateReference); var publishAction = eventSubscription.GetExecutionStrategy(); publishAction.Invoke(new object[] { null }); Assert.IsFalse(actionExecuted); }
public void GetPublishActionReturnsNullIfFilterIsNull() { var actionDelegateReference = new MockDelegateReference((Action<object>)delegate { }); var filterDelegateReference = new MockDelegateReference((Predicate<object>)delegate { return true; }); var eventSubscription = new EventSubscription<object>(actionDelegateReference, filterDelegateReference); var publishAction = eventSubscription.GetExecutionStrategy(); Assert.IsNotNull(publishAction); filterDelegateReference.Target = null; publishAction = eventSubscription.GetExecutionStrategy(); Assert.IsNull(publishAction); }
public void GetPublishActionReturnsDelegateThatExecutesTheFilterAndThenTheAction() { var executedDelegates = new List<string>(); var actionDelegateReference = new MockDelegateReference((Action<object>)delegate { executedDelegates.Add("Action"); }); var filterDelegateReference = new MockDelegateReference((Predicate<object>)delegate { executedDelegates.Add( "Filter"); return true; }); var eventSubscription = new EventSubscription<object>(actionDelegateReference, filterDelegateReference); var publishAction = eventSubscription.GetExecutionStrategy(); Assert.IsNotNull(publishAction); publishAction.Invoke(null); Assert.AreEqual(2, executedDelegates.Count); Assert.AreEqual("Filter", executedDelegates[0]); Assert.AreEqual("Action", executedDelegates[1]); }
public void CanInitEventSubscription() { var actionDelegateReference = new MockDelegateReference((Action<object>)delegate { }); var filterDelegateReference = new MockDelegateReference((Predicate<object>)delegate { return true; }); var eventSubscription = new EventSubscription<object>(actionDelegateReference, filterDelegateReference); var subscriptionToken = new SubscriptionToken(); eventSubscription.SubscriptionToken = subscriptionToken; Assert.AreSame(actionDelegateReference.Target, eventSubscription.Action); Assert.AreSame(filterDelegateReference.Target, eventSubscription.Filter); Assert.AreSame(subscriptionToken, eventSubscription.SubscriptionToken); }