- EventBus dispatching parameters to eventhandlers.

- Tests (basic cases, edge cases to follow).

--HG--
branch : dev
This commit is contained in:
Suha Can
2010-05-11 12:43:41 -07:00
parent d2d11e5e78
commit 404e7c3f41
2 changed files with 38 additions and 13 deletions

View File

@@ -50,21 +50,37 @@ namespace Orchard.Tests.Events {
Assert.That(_eventHandler.Count, Is.EqualTo(1)); Assert.That(_eventHandler.Count, Is.EqualTo(1));
} }
public interface ITestEventHandler : IEventHandler { [Test]
void Increment(); public void EventParametersAreCorrectlyPassedToEventHandlers() {
} Assert.That(_eventHandler.Result, Is.EqualTo(0));
Dictionary<string, object> arguments = new Dictionary<string, object>();
public class StubEventHandler : ITestEventHandler { arguments["a"] = 5200;
public int Count { get; set; } arguments["b"] = 2600;
_eventBus.Notify("ITestEventHandler.Substract", arguments);
public void Increment() { Assert.That(_eventHandler.Result, Is.EqualTo(2600));
Count++;
}
} }
[Test] [Test]
public void EventBusThrowsIfMessageNameIsNotCorrectlyFormatted() { public void EventBusThrowsIfMessageNameIsNotCorrectlyFormatted() {
Assert.Throws<ArgumentException>(() => _eventBus.Notify("StubEventHandlerIncrement", new Dictionary<string, object>())); Assert.Throws<ArgumentException>(() => _eventBus.Notify("StubEventHandlerIncrement", new Dictionary<string, object>()));
} }
public interface ITestEventHandler : IEventHandler {
void Increment();
void Substract(int a, int b);
}
public class StubEventHandler : ITestEventHandler {
public int Count { get; set; }
public int Result { get; set; }
public void Increment() {
Count++;
}
public void Substract(int a, int b) {
Result = a - b;
}
}
} }
} }

View File

@@ -37,7 +37,7 @@ namespace Orchard.Events {
} }
} }
private static void TryInvoke(IEventHandler eventHandler, string interfaceName, string methodName, Dictionary<string, object> arguments) { private static void TryInvoke(IEventHandler eventHandler, string interfaceName, string methodName, IDictionary<string, object> arguments) {
Type type = eventHandler.GetType(); Type type = eventHandler.GetType();
foreach (var interfaceType in type.GetInterfaces()) { foreach (var interfaceType in type.GetInterfaces()) {
if (String.Equals(interfaceType.Name, interfaceName, StringComparison.OrdinalIgnoreCase)) { if (String.Equals(interfaceType.Name, interfaceName, StringComparison.OrdinalIgnoreCase)) {
@@ -47,10 +47,19 @@ namespace Orchard.Events {
} }
} }
private static void TryInvokeMethod(IEventHandler eventHandler, string methodName, Dictionary<string, object> arguments) { private static void TryInvokeMethod(IEventHandler eventHandler, string methodName, IDictionary<string, object> arguments) {
foreach (var method in eventHandler.GetType().GetMethods()) { foreach (var method in eventHandler.GetType().GetMethods()) {
if (String.Equals(method.Name, methodName)) { if (String.Equals(method.Name, methodName)) {
method.Invoke(eventHandler, new object[] { }); List<object> parameters = new List<object>();
foreach (var methodParameter in method.GetParameters()) {
if (arguments.ContainsKey(methodParameter.Name)) {
parameters.Add(arguments[methodParameter.Name]);
}
else {
parameters.Add(new object());
}
}
method.Invoke(eventHandler, parameters.ToArray());
break; break;
} }
} }