예제 #1
0
        public void NullPublishCausesException()
        {
            var messenger = new MvxMessengerHub();

            Assert.Throws <ArgumentNullException>(() => {
                messenger.Publish <TestMessage>(null);
            });
        }
예제 #2
0
        public void MultipleSubscribeAndPublishAllowsMessageToBeReceived()
        {
            var messenger    = new MvxMessengerHub();
            var message      = new TestMessage(this);
            var otherMessage = new OtherTestMessage(this);

            var messageReceived = 0;

            messenger.Subscribe <TestMessage>(m =>
            {
                Assert.That(m, Is.EqualTo(message));
                Assert.That(m.Sender, Is.EqualTo(this));
                messageReceived++;
            });

            var otherMessageReceived = 0;

            messenger.Subscribe <OtherTestMessage>(m =>
            {
                Assert.That(m, Is.EqualTo(otherMessage));
                Assert.That(m.Sender, Is.EqualTo(this));
                otherMessageReceived++;
            });

            messenger.Publish(otherMessage);
            Assert.AreEqual(0, messageReceived);
            Assert.AreEqual(1, otherMessageReceived);

            messenger.Publish(message);
            Assert.AreEqual(1, messageReceived);
            Assert.AreEqual(1, otherMessageReceived);

            messenger.Publish(message);
            Assert.AreEqual(2, messageReceived);
            Assert.AreEqual(1, otherMessageReceived);

            messenger.Publish(message);
            Assert.AreEqual(3, messageReceived);
            Assert.AreEqual(1, otherMessageReceived);

            messenger.Publish(otherMessage);
            Assert.AreEqual(3, messageReceived);
            Assert.AreEqual(2, otherMessageReceived);
        }
예제 #3
0
        protected override void AdditionalSetup()
        {
            _queueItems = new List <Core.Models.GatewayQueueItem>();
            _mockQueueItemRepository = new Mock <Core.Repositories.IGatewayQueueItemRepository>();
            _mockQueueItemRepository.Setup(m => m.GetAllInQueueOrderAsync()).ReturnsAsync(_queueItems);

            _mockQueueItemRepository.Setup(m => m.InsertAsync(It.IsAny <Core.Models.GatewayQueueItem>()))
            .Callback <Core.Models.GatewayQueueItem>(gqi => _queueItems.Add(gqi))
            .Returns(Task.FromResult(0));

            _mockQueueItemRepository.Setup(m => m.DeleteAsync(It.IsAny <Core.Models.GatewayQueueItem>()))
            .Callback <Core.Models.GatewayQueueItem>(gqi => _queueItems.Remove(gqi))
            .Returns(Task.FromResult(0));

            _fixture = new Fixture().Customize(new AutoMoqCustomization());


            IDeviceRepository repo  = Mock.Of <IDeviceRepository>(dr => dr.GetAllAsync() == Task.FromResult(_fixture.CreateMany <Device>()));
            IRepositories     repos = Mock.Of <IRepositories>(r => r.DeviceRepository == repo &&
                                                              r.GatewayQueueItemRepository == _mockQueueItemRepository.Object);

            _fixture.Register <IRepositories>(() => repos);

            // Mock a success response from the BlueSphere MWF Mobile gateway service
            var responseActions = new[] { new Core.Models.GatewayServiceResponse.ResponseAction {
                                              Ack = true
                                          } };

            var response = new Core.HttpResult <Core.Models.GatewayServiceResponse.Response>
            {
                StatusCode = System.Net.HttpStatusCode.Accepted,
                Content    = new Core.Models.GatewayServiceResponse.Response {
                    Actions = responseActions
                },
            };

            var mockHttpService = new Mock <Core.Services.IHttpService>();

            mockHttpService.Setup(m => m.PostJsonAsync <Core.Models.GatewayServiceResponse.Response>(It.IsAny <string>(), It.IsAny <string>())).ReturnsAsync(response);
            _fixture.Register <Core.Services.IHttpService>(() => mockHttpService.Object);

            _fixture.Register <Core.Services.IDeviceInfo>(() => Mock.Of <Core.Services.IDeviceInfo>());

            var messenger = new MvxMessengerHub();

            _fixture.Register <IMvxMessenger>(() => messenger);

            // We don't have the GatewayQueueTimerService so replicate the trigger -> publish elapsed message functionality
            _token = messenger.Subscribe <GatewayQueueTimerCommandMessage>(m =>
            {
                if (m.Command == GatewayQueueTimerCommandMessage.TimerCommand.Trigger)
                {
                    messenger.Publish(new GatewayQueueTimerElapsedMessage(this));
                }
            });
        }
예제 #4
0
        public void DisposeTokenPreventsMessagesBeingReceived()
        {
            var messenger = new MvxMessengerHub();
            Action <TestMessage> action = _ => Assert.That(false, "This event should not fire!");

            var id = messenger.Subscribe(action);

            id.Dispose();
            messenger.Publish(new TestMessage(this));
        }
예제 #5
0
        public void UnsubscribePreventsMessagesBeingReceived()
        {
            var messenger = new MvxMessengerHub();
            Action <TestMessage> action = _ => Assert.True(false, "This event should not fire!");

            var id = messenger.Subscribe(action);

            messenger.Unsubscribe <TestMessage>(id);
            messenger.Publish(new TestMessage(this));
        }
예제 #6
0
        public void SubscribeAndPublishAllowsMessageToBeReceived()
        {
            var messenger = new MvxMessengerHub();
            var message = new TestMessage(this);

            var messageReceived = false;
            messenger.Subscribe<TestMessage>(m =>
                {
                    Assert.That(m, Is.EqualTo(message));
                    Assert.That(m.Sender, Is.EqualTo(this));
                    messageReceived = true;
                });

            messenger.Publish(message);

            Assert.IsTrue(messageReceived);
        }
예제 #7
0
        public void SubscribeAndPublishAllowsMessageToBeReceived()
        {
            var messenger = new MvxMessengerHub();
            var message   = new TestMessage(this);

            var messageReceived = false;

            messenger.Subscribe <TestMessage>(m =>
            {
                Assert.That(m, Is.EqualTo(message));
                Assert.That(m.Sender, Is.EqualTo(this));
                messageReceived = true;
            });

            messenger.Publish(message);

            Assert.IsTrue(messageReceived);
        }
예제 #8
0
        public void MultipleSubscribeAndPublishAllowsMessageToBeReceived()
        {
            var messenger = new MvxMessengerHub();
            var message = new TestMessage(this);
            var otherMessage = new OtherTestMessage(this);

            var messageReceived = 0;
            messenger.Subscribe<TestMessage>(m =>
                {
                    Assert.That(m, Is.EqualTo(message));
                    Assert.That(m.Sender, Is.EqualTo(this));
                    messageReceived++;
                });

            var otherMessageReceived = 0;
            messenger.Subscribe<OtherTestMessage>(m =>
                {
                    Assert.That(m, Is.EqualTo(otherMessage));
                    Assert.That(m.Sender, Is.EqualTo(this));
                    otherMessageReceived++;
                });

            messenger.Publish(otherMessage);
            Assert.AreEqual(0, messageReceived);
            Assert.AreEqual(1, otherMessageReceived);

            messenger.Publish(message);
            Assert.AreEqual(1, messageReceived);
            Assert.AreEqual(1, otherMessageReceived);

            messenger.Publish(message);
            Assert.AreEqual(2, messageReceived);
            Assert.AreEqual(1, otherMessageReceived);

            messenger.Publish(message);
            Assert.AreEqual(3, messageReceived);
            Assert.AreEqual(1, otherMessageReceived);

            messenger.Publish(otherMessage);
            Assert.AreEqual(3, messageReceived);
            Assert.AreEqual(2, otherMessageReceived);
        }
예제 #9
0
        public void PurgeCausesChangeMessage()
        {
            var messenger = new MvxMessengerHub();
            MvxSubscriberChangeMessage subscriberChangeMessage = null;
            var changeToken = messenger.Subscribe <MvxSubscriberChangeMessage>(message => subscriberChangeMessage = message);

            CreateShortLivedSubscription(messenger);
            Assert.NotNull(subscriberChangeMessage);
            Assert.AreEqual(1, subscriberChangeMessage.SubscriberCount);
            Assert.AreEqual(typeof(TestMessage), subscriberChangeMessage.MessageType);
            subscriberChangeMessage = null;
            System.Threading.Thread.Sleep(100);
            GC.Collect();
            GC.WaitForFullGCComplete();
            messenger.Publish(new TestMessage(this));
            System.Threading.Thread.Sleep(100);
            Assert.NotNull(subscriberChangeMessage);
            Assert.AreEqual(0, subscriberChangeMessage.SubscriberCount);
            Assert.AreEqual(typeof(TestMessage), subscriberChangeMessage.MessageType);
        }
예제 #10
0
        public void PurgeCausesChangeMessage()
        {
            var messenger = new MvxMessengerHub();
            MvxSubscriberChangeMessage subscriberChangeMessage = null;
            var changeToken = messenger.Subscribe <MvxSubscriberChangeMessage>(message => subscriberChangeMessage = message);

            CreateShortLivedSubscription(messenger);
            Assert.NotNull(subscriberChangeMessage);
            Assert.AreEqual(1, subscriberChangeMessage.SubscriberCount);
            Assert.AreEqual(typeof(TestMessage), subscriberChangeMessage.MessageType);
            subscriberChangeMessage = null;
            Thread.Sleep(100);
            GC.Collect();
            GC.WaitForFullGCComplete();
            messenger.Publish(new TestMessage(this));
            Thread.Sleep(100);
            // TODO - figure out why this test fails in NUnit console runner, but not through VS Test Execution
            //Assert.NotNull(subscriberChangeMessage);
            //Assert.AreEqual(0, subscriberChangeMessage.SubscriberCount);
            //Assert.AreEqual(typeof(TestMessage), subscriberChangeMessage.MessageType);
        }
예제 #11
0
 public void PurgeCausesChangeMessage()
 {
     var messenger = new MvxMessengerHub();
     MvxSubscriberChangeMessage subscriberChangeMessage = null;
     var changeToken = messenger.Subscribe<MvxSubscriberChangeMessage>(message => subscriberChangeMessage = message);
     CreateShortLivedSubscription(messenger);
     Assert.NotNull(subscriberChangeMessage);
     Assert.AreEqual(1, subscriberChangeMessage.SubscriberCount);
     Assert.AreEqual(typeof(TestMessage), subscriberChangeMessage.MessageType);
     subscriberChangeMessage = null;
     System.Threading.Thread.Sleep(100);
     GC.Collect();
     GC.WaitForFullGCComplete();
     messenger.Publish(new TestMessage(this));
     System.Threading.Thread.Sleep(100);
     Assert.NotNull(subscriberChangeMessage);
     Assert.AreEqual(0, subscriberChangeMessage.SubscriberCount);
     Assert.AreEqual(typeof(TestMessage), subscriberChangeMessage.MessageType);
 }
예제 #12
0
 public void NullPublishCausesException()
 {
     var messenger = new MvxMessengerHub();
     messenger.Publish<TestMessage>(null);
 }
예제 #13
0
        public void DisposeTokenPreventsMessagesBeingReceived()
        {
            var messenger = new MvxMessengerHub();
            Action<TestMessage> action = _ => Assert.That(false, "This event should not fire!");

            var id = messenger.Subscribe(action);
            id.Dispose();
            messenger.Publish(new TestMessage(this));
        }
예제 #14
0
        public void NullPublishCausesException()
        {
            var messenger = new MvxMessengerHub();

            messenger.Publish <TestMessage>(null);
        }
 public void NullPublishCausesException()
 {
     var messenger = new MvxMessengerHub();
     Assert.Throws<ArgumentNullException>(() => {
         messenger.Publish<TestMessage>(null);
     });
 }
예제 #16
0
 protected void SendEvent <T>(T evt) where T : MvxMessage
 {
     _messengerHub.Publish(evt);
 }