#19812: Event bus should not treat strings as IEnumerable<char> when returning combined handler results.

Work Item: 19812

--HG--
branch : 1.x
This commit is contained in:
Piotr Szmyd
2013-06-21 16:27:47 +02:00
parent 13d9233c7e
commit 49e8b2f6b5
2 changed files with 35 additions and 1 deletions

View File

@@ -171,6 +171,22 @@ namespace Orchard.Tests.Events {
Assert.That(results, Has.Some.EqualTo("[42,alpha]")); Assert.That(results, Has.Some.EqualTo("[42,alpha]"));
} }
[Test]
public void StringResultsAreTreatedLikeSelect() {
var results = _eventBus.Notify("ITestEventHandler.GetString", new Dictionary<string, object>()).Cast<string>();
Assert.That(results.Count(), Is.EqualTo(2));
Assert.That(results, Has.Some.EqualTo("Foo"));
Assert.That(results, Has.Some.EqualTo("Bar"));
}
[Test]
public void NonStringNonEnumerableResultsAreTreatedLikeSelect() {
var results = _eventBus.Notify("ITestEventHandler.GetInt", new Dictionary<string, object>()).Cast<int>();
Assert.That(results.Count(), Is.EqualTo(2));
Assert.That(results, Has.Some.EqualTo(1));
Assert.That(results, Has.Some.EqualTo(2));
}
public interface ITestEventHandler : IEventHandler { public interface ITestEventHandler : IEventHandler {
void Increment(); void Increment();
void Sum(int a); void Sum(int a);
@@ -179,6 +195,8 @@ namespace Orchard.Tests.Events {
void Substract(int a, int b); void Substract(int a, int b);
void Concat(string a, string b, string c); void Concat(string a, string b, string c);
IEnumerable<string> Gather(int a, string b); IEnumerable<string> Gather(int a, string b);
string GetString();
int GetInt();
} }
public class StubEventHandler : ITestEventHandler { public class StubEventHandler : ITestEventHandler {
@@ -213,6 +231,14 @@ namespace Orchard.Tests.Events {
public IEnumerable<string> Gather(int a, string b) { public IEnumerable<string> Gather(int a, string b) {
yield return String.Format("[{0},{1}]", a, b); yield return String.Format("[{0},{1}]", a, b);
} }
public string GetString() {
return "Foo";
}
public int GetInt() {
return 1;
}
} }
public class StubEventHandler2 : ITestEventHandler { public class StubEventHandler2 : ITestEventHandler {
public void Increment() { public void Increment() {
@@ -236,6 +262,14 @@ namespace Orchard.Tests.Events {
public IEnumerable<string> Gather(int a, string b) { public IEnumerable<string> Gather(int a, string b) {
return new[] { a.ToString(), b }; return new[] { a.ToString(), b };
} }
public string GetString() {
return "Bar";
}
public int GetInt() {
return 2;
}
} }
} }

View File

@@ -81,7 +81,7 @@ namespace Orchard.Events {
var result = cachedDelegate.Item2(eventHandler, args); var result = cachedDelegate.Item2(eventHandler, args);
returnValue = result as IEnumerable; returnValue = result as IEnumerable;
if (returnValue == null && result != null) if (result != null && (returnValue == null || result is string))
returnValue = new[] { result }; returnValue = new[] { result };
return true; return true;
} }