From 49e8b2f6b5132a84c0fd5fb23093206a3c778326 Mon Sep 17 00:00:00 2001 From: Piotr Szmyd Date: Fri, 21 Jun 2013 16:27:47 +0200 Subject: [PATCH] #19812: Event bus should not treat strings as IEnumerable when returning combined handler results. Work Item: 19812 --HG-- branch : 1.x --- src/Orchard.Tests/Events/EventTests.cs | 34 ++++++++++++++++++++ src/Orchard/Events/DefaultOrchardEventBus.cs | 2 +- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/Orchard.Tests/Events/EventTests.cs b/src/Orchard.Tests/Events/EventTests.cs index 765c17fe4..c0b191c95 100644 --- a/src/Orchard.Tests/Events/EventTests.cs +++ b/src/Orchard.Tests/Events/EventTests.cs @@ -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()).Cast(); + 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()).Cast(); + 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 Gather(int a, string b); + string GetString(); + int GetInt(); } public class StubEventHandler : ITestEventHandler { @@ -213,6 +231,14 @@ namespace Orchard.Tests.Events { public IEnumerable 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 Gather(int a, string b) { return new[] { a.ToString(), b }; } + + public string GetString() { + return "Bar"; + } + + public int GetInt() { + return 2; + } } } diff --git a/src/Orchard/Events/DefaultOrchardEventBus.cs b/src/Orchard/Events/DefaultOrchardEventBus.cs index 01866e437..d69d84023 100644 --- a/src/Orchard/Events/DefaultOrchardEventBus.cs +++ b/src/Orchard/Events/DefaultOrchardEventBus.cs @@ -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; }