|
3 | 3 | // See the LICENSE file in the project root for more information.
|
4 | 4 |
|
5 | 5 | using System;
|
| 6 | +using System.Collections.Generic; |
6 | 7 | using System.Linq;
|
7 | 8 | using System.Reflection;
|
8 | 9 | using System.Threading;
|
9 | 10 | using System.Threading.Tasks;
|
10 | 11 | using CommunityToolkit.Mvvm.Messaging;
|
| 12 | +using CommunityToolkit.Mvvm.Messaging.Messages; |
11 | 13 | using Microsoft.VisualStudio.TestTools.UnitTesting;
|
12 | 14 |
|
13 | 15 | namespace CommunityToolkit.Mvvm.UnitTests;
|
@@ -372,6 +374,40 @@ public void Test_Messenger_IRecipient_SomeMessages_NoToken(Type type)
|
372 | 374 | Assert.IsFalse(messenger.IsRegistered<MessageB>(recipient));
|
373 | 375 | }
|
374 | 376 |
|
| 377 | + // See https://github.com/CommunityToolkit/dotnet/issues/198 |
| 378 | + [TestMethod] |
| 379 | + [DataRow(typeof(StrongReferenceMessenger))] |
| 380 | + [DataRow(typeof(WeakReferenceMessenger))] |
| 381 | + public void Test_Messenger_IRecipient_SomeMessages_WithGenericTypeParameters(Type type) |
| 382 | + { |
| 383 | + IMessenger? messenger = (IMessenger)Activator.CreateInstance(type)!; |
| 384 | + GenericRecipient<string> recipient = new(); |
| 385 | + |
| 386 | + messenger.RegisterAll(recipient); |
| 387 | + |
| 388 | + Assert.IsTrue(messenger.IsRegistered<GenericRecipient<string>.Message>(recipient)); |
| 389 | + Assert.IsTrue(messenger.IsRegistered<ValueChangedMessage<string>>(recipient)); |
| 390 | + Assert.IsTrue(messenger.IsRegistered<MessageA>(recipient)); |
| 391 | + |
| 392 | + Assert.IsNull(recipient.ReceivedMessage1); |
| 393 | + Assert.IsNull(recipient.ReceivedMessage2); |
| 394 | + Assert.IsNull(recipient.ReceivedMessage3); |
| 395 | + |
| 396 | + GenericRecipient<string>.Message message1 = messenger.Send(new GenericRecipient<string>.Message(new List<string> { "Hello world!" })); |
| 397 | + ValueChangedMessage<string> message2 = messenger.Send(new ValueChangedMessage<string>("Hello")); |
| 398 | + MessageA message3 = messenger.Send<MessageA>(); |
| 399 | + |
| 400 | + Assert.AreSame(recipient.ReceivedMessage1, message1); |
| 401 | + Assert.AreSame(recipient.ReceivedMessage2, message2); |
| 402 | + Assert.AreSame(recipient.ReceivedMessage3, message3); |
| 403 | + |
| 404 | + messenger.UnregisterAll(recipient); |
| 405 | + |
| 406 | + Assert.IsFalse(messenger.IsRegistered<GenericRecipient<string>.Message>(recipient)); |
| 407 | + Assert.IsFalse(messenger.IsRegistered<ValueChangedMessage<string>>(recipient)); |
| 408 | + Assert.IsFalse(messenger.IsRegistered<MessageA>(recipient)); |
| 409 | + } |
| 410 | + |
375 | 411 | [TestMethod]
|
376 | 412 | [DataRow(typeof(StrongReferenceMessenger))]
|
377 | 413 | [DataRow(typeof(WeakReferenceMessenger))]
|
@@ -1059,4 +1095,36 @@ public sealed class MessageA
|
1059 | 1095 | public sealed class MessageB
|
1060 | 1096 | {
|
1061 | 1097 | }
|
| 1098 | + |
| 1099 | + public partial class GenericRecipient<T> : IRecipient<GenericRecipient<T>.Message>, IRecipient<ValueChangedMessage<T>>, IRecipient<MessageA> |
| 1100 | + { |
| 1101 | + public Message? ReceivedMessage1 { get; private set; } |
| 1102 | + |
| 1103 | + public ValueChangedMessage<T>? ReceivedMessage2 { get; private set; } |
| 1104 | + |
| 1105 | + public MessageA? ReceivedMessage3 { get; private set; } |
| 1106 | + |
| 1107 | + public void Receive(Message message) |
| 1108 | + { |
| 1109 | + ReceivedMessage1 = message; |
| 1110 | + } |
| 1111 | + |
| 1112 | + public void Receive(ValueChangedMessage<T> message) |
| 1113 | + { |
| 1114 | + ReceivedMessage2 = message; |
| 1115 | + } |
| 1116 | + |
| 1117 | + public void Receive(MessageA message) |
| 1118 | + { |
| 1119 | + ReceivedMessage3 = message; |
| 1120 | + } |
| 1121 | + |
| 1122 | + public sealed class Message : ValueChangedMessage<List<T>> |
| 1123 | + { |
| 1124 | + public Message(List<T> list) |
| 1125 | + : base(list) |
| 1126 | + { |
| 1127 | + } |
| 1128 | + } |
| 1129 | + } |
1062 | 1130 | }
|
0 commit comments