using System; using NUnit.Framework; namespace Xamarin.Forms.Core.UnitTests { [TestFixture] public class MessagingCenterTests : BaseTestFixture { [Test] public void SingleSubscriber () { string sentMessage = null; MessagingCenter.Subscribe (this, "SimpleTest", (sender, args) => sentMessage = args); MessagingCenter.Send (this, "SimpleTest", "My Message"); Assert.That (sentMessage, Is.EqualTo ("My Message")); MessagingCenter.Unsubscribe (this, "SimpleTest"); } [Test] public void Filter () { string sentMessage = null; MessagingCenter.Subscribe (this, "SimpleTest", (sender, args) => sentMessage = args, this); MessagingCenter.Send (new MessagingCenterTests (), "SimpleTest", "My Message"); Assert.That (sentMessage, Is.Null); MessagingCenter.Send (this, "SimpleTest", "My Message"); Assert.That (sentMessage, Is.EqualTo ("My Message")); MessagingCenter.Unsubscribe (this, "SimpleTest"); } [Test] public void MultiSubscriber () { var sub1 = new object (); var sub2 = new object (); string sentMessage1 = null; string sentMessage2 = null; MessagingCenter.Subscribe (sub1, "SimpleTest", (sender, args) => sentMessage1 = args); MessagingCenter.Subscribe (sub2, "SimpleTest", (sender, args) => sentMessage2 = args); MessagingCenter.Send (this, "SimpleTest", "My Message"); Assert.That (sentMessage1, Is.EqualTo ("My Message")); Assert.That (sentMessage2, Is.EqualTo ("My Message")); MessagingCenter.Unsubscribe (sub1, "SimpleTest"); MessagingCenter.Unsubscribe (sub2, "SimpleTest"); } [Test] public void Unsubscribe () { string sentMessage = null; MessagingCenter.Subscribe (this, "SimpleTest", (sender, args) => sentMessage = args); MessagingCenter.Unsubscribe (this, "SimpleTest"); MessagingCenter.Send (this, "SimpleTest", "My Message"); Assert.That (sentMessage, Is.EqualTo (null)); } [Test] public void SendWithoutSubscribers () { Assert.DoesNotThrow (() => MessagingCenter.Send (this, "SimpleTest", "My Message")); } [Test] public void NoArgSingleSubscriber () { bool sentMessage = false; MessagingCenter.Subscribe (this, "SimpleTest", sender => sentMessage = true); MessagingCenter.Send (this, "SimpleTest"); Assert.That (sentMessage, Is.True); MessagingCenter.Unsubscribe (this, "SimpleTest"); } [Test] public void NoArgFilter () { bool sentMessage = false; MessagingCenter.Subscribe (this, "SimpleTest", (sender) => sentMessage = true, this); MessagingCenter.Send (new MessagingCenterTests (), "SimpleTest"); Assert.That (sentMessage, Is.False); MessagingCenter.Send (this, "SimpleTest"); Assert.That (sentMessage, Is.True); MessagingCenter.Unsubscribe (this, "SimpleTest"); } [Test] public void NoArgMultiSubscriber () { var sub1 = new object (); var sub2 = new object (); bool sentMessage1 = false; bool sentMessage2 = false; MessagingCenter.Subscribe (sub1, "SimpleTest", (sender) => sentMessage1 = true); MessagingCenter.Subscribe (sub2, "SimpleTest", (sender) => sentMessage2 = true); MessagingCenter.Send (this, "SimpleTest"); Assert.That (sentMessage1, Is.True); Assert.That (sentMessage2, Is.True); MessagingCenter.Unsubscribe (sub1, "SimpleTest"); MessagingCenter.Unsubscribe (sub2, "SimpleTest"); } [Test] public void NoArgUnsubscribe () { bool sentMessage = false; MessagingCenter.Subscribe (this, "SimpleTest", (sender) => sentMessage = true); MessagingCenter.Unsubscribe (this, "SimpleTest"); MessagingCenter.Send (this, "SimpleTest", "My Message"); Assert.That (sentMessage, Is.False); } [Test] public void NoArgSendWithoutSubscribers () { Assert.DoesNotThrow (() => MessagingCenter.Send (this, "SimpleTest")); } [Test] public void ThrowOnNullArgs () { Assert.Throws (() => MessagingCenter.Subscribe (null, "Foo", (sender, args) => { })); Assert.Throws (() => MessagingCenter.Subscribe (this, null, (sender, args) => { })); Assert.Throws (() => MessagingCenter.Subscribe (this, "Foo", null)); Assert.Throws (() => MessagingCenter.Subscribe (null, "Foo", (sender) => { })); Assert.Throws (() => MessagingCenter.Subscribe (this, null, (sender) => { })); Assert.Throws (() => MessagingCenter.Subscribe (this, "Foo", null)); Assert.Throws (() => MessagingCenter.Send (null, "Foo", "Bar")); Assert.Throws (() => MessagingCenter.Send (this, null, "Bar")); Assert.Throws (() => MessagingCenter.Send (null, "Foo")); Assert.Throws (() => MessagingCenter.Send (this, null)); Assert.Throws (() => MessagingCenter.Unsubscribe (null, "Foo")); Assert.Throws (() => MessagingCenter.Unsubscribe (this, null)); Assert.Throws (() => MessagingCenter.Unsubscribe (null, "Foo")); Assert.Throws (() => MessagingCenter.Unsubscribe (this, null)); } [Test] public void UnsubscribeInCallback () { int messageCount = 0; var subscriber1 = new object (); var subscriber2 = new object (); MessagingCenter.Subscribe (subscriber1, "SimpleTest", (sender) => { messageCount++; MessagingCenter.Unsubscribe (subscriber2, "SimpleTest"); }); MessagingCenter.Subscribe (subscriber2, "SimpleTest", (sender) => { messageCount++; MessagingCenter.Unsubscribe (subscriber1, "SimpleTest"); }); MessagingCenter.Send (this, "SimpleTest"); Assert.AreEqual (1, messageCount); } } }