public void GetSubscriptionTagsIsCorrect()
{
var testTag1 = "TestTag1";
var testTag2 = "TestTag2";
var messenger = new MvxMessengerHub();
Assert.IsEmpty(messenger.GetSubscriptionTagsFor<MvxSubscriberChangeMessage>());
Assert.IsEmpty(messenger.GetSubscriptionTagsFor<TestMessage>());
var changeToken = messenger.Subscribe<MvxSubscriberChangeMessage>(message => { });
Assert.AreEqual(1, messenger.GetSubscriptionTagsFor<MvxSubscriberChangeMessage>().Count);
Assert.AreEqual(null, messenger.GetSubscriptionTagsFor<MvxSubscriberChangeMessage>()[0]);
Assert.IsEmpty(messenger.GetSubscriptionTagsFor<TestMessage>());
var token = messenger.Subscribe<TestMessage>(m =>
{
// stuff
}, tag: testTag1);
Assert.AreEqual(1, messenger.GetSubscriptionTagsFor<MvxSubscriberChangeMessage>().Count);
Assert.AreEqual(null, messenger.GetSubscriptionTagsFor<MvxSubscriberChangeMessage>()[0]);
Assert.AreEqual(1, messenger.GetSubscriptionTagsFor<TestMessage>().Count);
Assert.AreEqual(testTag1, messenger.GetSubscriptionTagsFor<TestMessage>()[0]);
var token2 = messenger.Subscribe<TestMessage>(m =>
{
// stuff
}, tag: testTag1);
Assert.AreEqual(1, messenger.GetSubscriptionTagsFor<MvxSubscriberChangeMessage>().Count);
Assert.AreEqual(null, messenger.GetSubscriptionTagsFor<MvxSubscriberChangeMessage>()[0]);
Assert.AreEqual(2, messenger.GetSubscriptionTagsFor<TestMessage>().Count);
Assert.AreEqual(testTag1, messenger.GetSubscriptionTagsFor<TestMessage>()[0]);
Assert.AreEqual(testTag1, messenger.GetSubscriptionTagsFor<TestMessage>()[1]);
var token3 = messenger.Subscribe<TestMessage>(m =>
{
// stuff
}, tag: testTag2);
Assert.AreEqual(1, messenger.GetSubscriptionTagsFor<MvxSubscriberChangeMessage>().Count);
Assert.AreEqual(null, messenger.GetSubscriptionTagsFor<MvxSubscriberChangeMessage>()[0]);
Assert.AreEqual(3, messenger.GetSubscriptionTagsFor<TestMessage>().Count);
Assert.AreEqual(2, messenger.GetSubscriptionTagsFor<TestMessage>().Where(x => x == testTag1).Count());
Assert.AreEqual(1, messenger.GetSubscriptionTagsFor<TestMessage>().Where(x => x == testTag2).Count());
messenger.Unsubscribe<TestMessage>(token);
Assert.AreEqual(1, messenger.GetSubscriptionTagsFor<MvxSubscriberChangeMessage>().Count);
Assert.AreEqual(null, messenger.GetSubscriptionTagsFor<MvxSubscriberChangeMessage>()[0]);
Assert.AreEqual(2, messenger.GetSubscriptionTagsFor<TestMessage>().Count);
Assert.AreEqual(1, messenger.GetSubscriptionTagsFor<TestMessage>().Where(x => x == testTag1).Count());
Assert.AreEqual(1, messenger.GetSubscriptionTagsFor<TestMessage>().Where(x => x == testTag2).Count());
messenger.Unsubscribe<TestMessage>(token2);
Assert.AreEqual(1, messenger.GetSubscriptionTagsFor<MvxSubscriberChangeMessage>().Count);
Assert.AreEqual(null, messenger.GetSubscriptionTagsFor<MvxSubscriberChangeMessage>()[0]);
Assert.AreEqual(1, messenger.GetSubscriptionTagsFor<TestMessage>().Count);
Assert.AreEqual(0, messenger.GetSubscriptionTagsFor<TestMessage>().Where(x => x == testTag1).Count());
Assert.AreEqual(1, messenger.GetSubscriptionTagsFor<TestMessage>().Where(x => x == testTag2).Count());
messenger.Unsubscribe<TestMessage>(token3);
Assert.AreEqual(1, messenger.GetSubscriptionTagsFor<MvxSubscriberChangeMessage>().Count);
Assert.AreEqual(null, messenger.GetSubscriptionTagsFor<MvxSubscriberChangeMessage>()[0]);
Assert.AreEqual(0, messenger.GetSubscriptionTagsFor<TestMessage>().Count);
}