public void CountSubscriptionsForTagIsCorrect()
{
var testTag1 = "TestTag1";
var testTag2 = "TestTag2";
var notExistingTag = "NotExistingTag";
var messenger = new MvxMessengerHub();
Assert.AreEqual(0, messenger.CountSubscriptionsForTag<MvxSubscriberChangeMessage>(null));
Assert.AreEqual(0, messenger.CountSubscriptionsForTag<MvxSubscriberChangeMessage>(testTag1));
Assert.AreEqual(0, messenger.CountSubscriptionsForTag<TestMessage>(testTag1));
Assert.AreEqual(0, messenger.CountSubscriptionsForTag<TestMessage>(testTag2));
Assert.AreEqual(0, messenger.CountSubscriptionsForTag<TestMessage>(notExistingTag));
var changeToken = messenger.Subscribe<MvxSubscriberChangeMessage>(message => { });
Assert.AreEqual(1, messenger.CountSubscriptionsForTag<MvxSubscriberChangeMessage>(null));
Assert.AreEqual(0, messenger.CountSubscriptionsForTag<MvxSubscriberChangeMessage>(testTag1));
Assert.AreEqual(0, messenger.CountSubscriptionsForTag<TestMessage>(testTag1));
Assert.AreEqual(0, messenger.CountSubscriptionsForTag<TestMessage>(testTag2));
Assert.AreEqual(0, messenger.CountSubscriptionsForTag<TestMessage>(notExistingTag));
var token = messenger.Subscribe<TestMessage>(m =>
{
// stuff
}, tag:testTag1);
Assert.AreEqual(1, messenger.CountSubscriptionsForTag<MvxSubscriberChangeMessage>(null));
Assert.AreEqual(0, messenger.CountSubscriptionsForTag<MvxSubscriberChangeMessage>(testTag1));
Assert.AreEqual(1, messenger.CountSubscriptionsForTag<TestMessage>(testTag1));
Assert.AreEqual(0, messenger.CountSubscriptionsForTag<TestMessage>(testTag2));
Assert.AreEqual(0, messenger.CountSubscriptionsForTag<TestMessage>(notExistingTag));
var token2 = messenger.Subscribe<TestMessage>(m =>
{
// stuff
}, tag:testTag1);
Assert.AreEqual(1, messenger.CountSubscriptionsForTag<MvxSubscriberChangeMessage>(null));
Assert.AreEqual(0, messenger.CountSubscriptionsForTag<MvxSubscriberChangeMessage>(testTag1));
Assert.AreEqual(2, messenger.CountSubscriptionsForTag<TestMessage>(testTag1));
Assert.AreEqual(0, messenger.CountSubscriptionsForTag<TestMessage>(testTag2));
Assert.AreEqual(0, messenger.CountSubscriptionsForTag<TestMessage>(notExistingTag));
var token3 = messenger.Subscribe<TestMessage>(m =>
{
// stuff
}, tag: testTag2);
Assert.AreEqual(1, messenger.CountSubscriptionsForTag<MvxSubscriberChangeMessage>(null));
Assert.AreEqual(0, messenger.CountSubscriptionsForTag<MvxSubscriberChangeMessage>(testTag1));
Assert.AreEqual(2, messenger.CountSubscriptionsForTag<TestMessage>(testTag1));
Assert.AreEqual(1, messenger.CountSubscriptionsForTag<TestMessage>(testTag2));
Assert.AreEqual(0, messenger.CountSubscriptionsForTag<TestMessage>(notExistingTag));
messenger.Unsubscribe<TestMessage>(token);
Assert.AreEqual(1, messenger.CountSubscriptionsForTag<MvxSubscriberChangeMessage>(null));
Assert.AreEqual(0, messenger.CountSubscriptionsForTag<MvxSubscriberChangeMessage>(testTag1));
Assert.AreEqual(1, messenger.CountSubscriptionsForTag<TestMessage>(testTag1));
Assert.AreEqual(1, messenger.CountSubscriptionsForTag<TestMessage>(testTag2));
Assert.AreEqual(0, messenger.CountSubscriptionsForTag<TestMessage>(notExistingTag));
messenger.Unsubscribe<TestMessage>(token2);
Assert.AreEqual(1, messenger.CountSubscriptionsForTag<MvxSubscriberChangeMessage>(null));
Assert.AreEqual(0, messenger.CountSubscriptionsForTag<MvxSubscriberChangeMessage>(testTag1));
Assert.AreEqual(0, messenger.CountSubscriptionsForTag<TestMessage>(testTag1));
Assert.AreEqual(1, messenger.CountSubscriptionsForTag<TestMessage>(testTag2));
Assert.AreEqual(0, messenger.CountSubscriptionsForTag<TestMessage>(notExistingTag));
messenger.Unsubscribe<TestMessage>(token3);
Assert.AreEqual(1, messenger.CountSubscriptionsForTag<MvxSubscriberChangeMessage>(null));
Assert.AreEqual(0, messenger.CountSubscriptionsForTag<MvxSubscriberChangeMessage>(testTag1));
Assert.AreEqual(0, messenger.CountSubscriptionsForTag<TestMessage>(testTag1));
Assert.AreEqual(0, messenger.CountSubscriptionsForTag<TestMessage>(testTag2));
Assert.AreEqual(0, messenger.CountSubscriptionsForTag<TestMessage>(notExistingTag));
}