public void TestOneWayMessage()
        {
            // Create sender and receiver
            var sender = new SenderViewModel();
            var receiver = new ReceiverViewModel();

            // Register receiver to get messages
            receiver.Subscribe(MessageTokens.Test + "_TestOneWayMessage");

            // Set message content
            sender.SentData = new Random().Next(100);

            // Capture orig values
            string origReceiverMessage = receiver.ReceivedMessage;
            bool origSenderData = sender.ReceivedData;

            // Listen for response
            var wait = new AutoResetEvent(false);
            receiver.OneWayMessageReceived += (o, args) => wait.Set();

            // Send message
            sender.SendOneWayMessageAsync(MessageTokens.Test + "_TestOneWayMessage");

            // Wait for response
            if (!wait.WaitOne(TimeSpan.FromSeconds(15)))
                Assert.Fail("Message not received in timeout");

            // Unregister to receive messages
            receiver.Unsubscribe(MessageTokens.Test + "_TestOneWayMessage");

            // Assert message was received
            Assert.AreEqual<int>(sender.SentData, receiver.ReceivedData);

            // Assert receiver and sender data have not changed
            Assert.AreEqual<string>(origReceiverMessage, receiver.ReceivedMessage);
            Assert.AreEqual<bool>(origSenderData, sender.ReceivedData);
        }
        public void TestReceiverUnregister()
        {
            // Create sender and receiver
            var sender = new SenderViewModel();
            var receiver = new ReceiverViewModel();

            // Register receiver to get messages
            receiver.Subscribe(MessageTokens.Test + "_TestReceiverUnregister");

            // Set message content
            sender.SentData = new Random().Next(100);

            // Listen for response
            var wait = new AutoResetEvent(false);
            receiver.OneWayMessageReceived += (o, args) => wait.Set();

            // Send message
            sender.SendOneWayMessageAsync(MessageTokens.Test + "_TestReceiverUnregister");

            // Wait for response
            if (!wait.WaitOne(TimeSpan.FromSeconds(15)))
                Assert.Fail("Message not received in timeout");

            // Assert message was received
            Assert.AreEqual<int>(sender.SentData, receiver.ReceivedData);

            // Unregister receiver
            receiver.Unsubscribe(MessageTokens.Test + "_TestReceiverUnregister");

            // Send another message
            sender.SentData += 100;
            sender.SendOneWayMessage(MessageTokens.Test + "_TestReceiverUnregister");

            // Assert message was NOT received
            Assert.AreNotEqual<int>(sender.SentData, receiver.ReceivedData);
        }
        public void TestRepeatSend()
        {
            // Create sender and receiver
            var sender = new SenderViewModel();
            var receiver = new ReceiverViewModel();

            // Register receiver to get messages
            receiver.Subscribe(MessageTokens.Test + "_TestRepeatSend");

            // Set init value
            int val = new Random().Next(100);

            // Iterate 3 times
            for (int i = 0; i < 3; i++)
            {
                // Set message content
                sender.SentData = val;

                // Listen for response
                var wait = new AutoResetEvent(false);
                receiver.OneWayMessageReceived += (o, args) => wait.Set();

                // Send message
                sender.SendOneWayMessageAsync(MessageTokens.Test + "_TestRepeatSend");

                // Wait for response
                if (!wait.WaitOne(TimeSpan.FromSeconds(15)))
                    Assert.Fail("Message not received in timeout");

                // Assert message was received
                Assert.AreEqual<int>(sender.SentData, receiver.ReceivedData);

                // Increment value
                val += 100;
            }

            // Unregister to receive messages
            receiver.Unsubscribe(MessageTokens.Test + "_TestRepeatSend");
        }