Skip to content

Commit e0a8335

Browse files
committed
Added WeakReferenceMessenger auto cleanup test
1 parent c1b829a commit e0a8335

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

UnitTests/UnitTests.Shared/Mvvm/Test_Messenger.cs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,8 @@ void Test()
390390
GC.Collect();
391391

392392
Assert.AreEqual(!isWeak, weakRecipient.IsAlive);
393+
394+
GC.KeepAlive(messenger);
393395
}
394396

395397
[TestCategory("Mvvm")]
@@ -464,6 +466,54 @@ void Test()
464466
Assert.IsTrue(messenger.IsRegistered<MessageA>(recipient));
465467
}
466468

469+
[TestCategory("Mvvm")]
470+
[TestMethod]
471+
public void Test_Messenger_AutoCleanup()
472+
{
473+
IMessenger messenger = new WeakReferenceMessenger();
474+
475+
static int GetRecipientsMapCount(IMessenger messenger)
476+
{
477+
object recipientsMap =
478+
typeof(WeakReferenceMessenger)
479+
.GetField("recipientsMap", BindingFlags.Instance | BindingFlags.NonPublic)
480+
.GetValue(messenger);
481+
482+
return (int)recipientsMap.GetType().GetProperty("Count").GetValue(recipientsMap);
483+
}
484+
485+
WeakReference weakRecipient;
486+
487+
void Test()
488+
{
489+
var recipient = new RecipientWithSomeMessages();
490+
weakRecipient = new WeakReference(recipient);
491+
492+
messenger.Register<MessageA>(recipient);
493+
494+
Assert.IsTrue(messenger.IsRegistered<MessageA>(recipient));
495+
496+
Assert.AreEqual(GetRecipientsMapCount(messenger), 1);
497+
498+
GC.KeepAlive(recipient);
499+
}
500+
501+
Test();
502+
503+
GC.Collect();
504+
505+
Assert.IsFalse(weakRecipient.IsAlive);
506+
507+
// Now that the recipient is collected, trigger another full GC collection
508+
// to let the automatic cleanup callback run and trim the messenger data
509+
GC.Collect();
510+
GC.WaitForPendingFinalizers();
511+
512+
Assert.AreEqual(GetRecipientsMapCount(messenger), 0);
513+
514+
GC.KeepAlive(messenger);
515+
}
516+
467517
[TestCategory("Mvvm")]
468518
[TestMethod]
469519
[DataRow(typeof(StrongReferenceMessenger))]

0 commit comments

Comments
 (0)