- 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));
}
public interface ITestEventHandler : IEventHandler {
void Increment();
}
public class StubEventHandler : ITestEventHandler {
public int Count { get; set; }
public void Increment() {
Count++;
}
[Test]
public void EventParametersAreCorrectlyPassedToEventHandlers() {
Assert.That(_eventHandler.Result, Is.EqualTo(0));
Dictionary<string, object> arguments = new Dictionary<string, object>();
arguments["a"] = 5200;
arguments["b"] = 2600;
_eventBus.Notify("ITestEventHandler.Substract", arguments);
Assert.That(_eventHandler.Result, Is.EqualTo(2600));
}
[Test]
public void EventBusThrowsIfMessageNameIsNotCorrectlyFormatted() {
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();
foreach (var interfaceType in type.GetInterfaces()) {
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()) {
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;
}
}