public void Invokes_until_appropriate_subdispatcher_found() { var denyDispatcher = new SimpleDispatcher(new Rule((message, handler) => false)); var successDispatcher = new SimpleDispatcher(new Rule((message, handler) => true)); var dispatcher = new CompositeDispatcher(new IDispatcher[] {denyDispatcher, successDispatcher}); var testHandler = new TestHandler<TestMessage>(); dispatcher.Invoke(new TestMessage(), testHandler); Assert.That(testHandler.WasCalledOnce, Is.True); }
public void Invokation_should_not_be_perfomed_twice() { var successDispatcher1 = new SimpleDispatcher(new Rule((message, handler) => true)); var successDispatcher2 = new SimpleDispatcher(new Rule((message, handler) => true)); var dispatcher = new CompositeDispatcher(new IDispatcher[] { successDispatcher1, successDispatcher2 }); var testHandler = new TestHandler<TestMessage>(); dispatcher.Invoke(new TestMessage(), testHandler); Assert.That(testHandler.WasCalled, Is.EqualTo(1)); }
/// <summary> /// Combines exising dispatcher for <paramref name="pathTemplate"/> with <paramref name="dispatcher"/>. /// If there's no dispatcher for the specified path, adds a new one. /// </summary> /// <param name="routes">Route collection</param> /// <param name="pathTemplate">Path template</param> /// <param name="dispatcher">Dispatcher to add or append for specified path</param> public static void Append(this RouteCollection routes, string pathTemplate, IDashboardDispatcher dispatcher) { if (routes == null) { throw new ArgumentNullException(nameof(routes)); } if (pathTemplate == null) { throw new ArgumentNullException(nameof(pathTemplate)); } if (dispatcher == null) { throw new ArgumentNullException(nameof(dispatcher)); } var list = routes.GetDispatchers(); for (int i = 0; i < list.Count; i++) { var pair = list[i]; if (pair.Item1 == pathTemplate) { var composite = pair.Item2 as CompositeDispatcher; if (composite == null) { // replace original dispatcher with a composite one composite = new CompositeDispatcher(pair.Item2); list[i] = new Tuple <string, IDashboardDispatcher>(pathTemplate, composite); } composite.AddDispatcher(dispatcher); return; } } routes.Add(pathTemplate, dispatcher); }
public void Should_throw_if_cannot_dispatch_message() { var dispatcher = new CompositeDispatcher(new[] {new SimpleDispatcher(new Rule((message, handler) => false))}); Assert.Throws<InvalidOperationException>(delegate { dispatcher.Invoke(new TestMessage(), new TestHandler<TestMessage>()); }); }