#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

@@ -170,6 +170,22 @@ namespace Orchard.Tests.Events {
Assert.That(results, Has.Some.EqualTo("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 {
void Increment();
@@ -179,6 +195,8 @@ namespace Orchard.Tests.Events {
void Substract(int a, int b);
void Concat(string a, string b, string c);
IEnumerable<string> Gather(int a, string b);
string GetString();
int GetInt();
}
public class StubEventHandler : ITestEventHandler {
@@ -213,6 +231,14 @@ namespace Orchard.Tests.Events {
public IEnumerable<string> Gather(int a, string b) {
yield return String.Format("[{0},{1}]", a, b);
}
public string GetString() {
return "Foo";
}
public int GetInt() {
return 1;
}
}
public class StubEventHandler2 : ITestEventHandler {
public void Increment() {
@@ -236,6 +262,14 @@ namespace Orchard.Tests.Events {
public IEnumerable<string> Gather(int a, string 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);
returnValue = result as IEnumerable;
if (returnValue == null && result != null)
if (result != null && (returnValue == null || result is string))
returnValue = new[] { result };
return true;
}