Skip to content

Commit d1f334a

Browse files
Merge pull request #4018 from Sergio0694/bugfix/messenger-tests
Improve Messenger tests
2 parents 5d3675b + b191439 commit d1f334a

File tree

2 files changed

+59
-1
lines changed

2 files changed

+59
-1
lines changed

Microsoft.Toolkit.Mvvm/Messaging/Messages/AsyncCollectionRequestMessage{T}.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ public async Task<IReadOnlyCollection<T>> GetResponsesAsync(CancellationToken ca
104104

105105
List<T> results = new(this.responses.Count);
106106

107-
await foreach (var response in this.WithCancellation(cancellationToken))
107+
await foreach (var response in this.WithCancellation(cancellationToken).ConfigureAwait(false))
108108
{
109109
results.Add(response);
110110
}

UnitTests/UnitTests.Shared/Mvvm/Test_Messenger.Request.cs

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
using System;
66
using System.Collections.Generic;
7+
using System.Linq;
78
using System.Threading.Tasks;
89
using Microsoft.Toolkit.Mvvm.Messaging;
910
using Microsoft.Toolkit.Mvvm.Messaging.Messages;
@@ -73,6 +74,8 @@ void Receive(object recipient, NumberRequestMessage m)
7374
messenger.Register<NumberRequestMessage>(recipient, Receive);
7475

7576
int result = messenger.Send<NumberRequestMessage>();
77+
78+
GC.KeepAlive(recipient);
7679
}
7780

7881
public class NumberRequestMessage : RequestMessage<int>
@@ -102,6 +105,8 @@ void Receive(object recipient, AsyncNumberRequestMessage m)
102105
int result = await messenger.Send<AsyncNumberRequestMessage>();
103106

104107
Assert.AreEqual(result, 42);
108+
109+
GC.KeepAlive(recipient);
105110
}
106111

107112
[TestCategory("Mvvm")]
@@ -134,6 +139,8 @@ void Receive(object recipient, AsyncNumberRequestMessage m)
134139
int result = await messenger.Send<AsyncNumberRequestMessage>();
135140

136141
Assert.AreEqual(result, 42);
142+
143+
GC.KeepAlive(recipient);
137144
}
138145

139146
[TestCategory("Mvvm")]
@@ -167,6 +174,8 @@ void Receive(object recipient, AsyncNumberRequestMessage m)
167174
messenger.Register<AsyncNumberRequestMessage>(recipient, Receive);
168175

169176
int result = await messenger.Send<AsyncNumberRequestMessage>();
177+
178+
GC.KeepAlive(recipient);
170179
}
171180

172181
public class AsyncNumberRequestMessage : AsyncRequestMessage<int>
@@ -191,6 +200,8 @@ void Receive(object recipient, NumbersCollectionRequestMessage m)
191200
var results = messenger.Send<NumbersCollectionRequestMessage>().Responses;
192201

193202
Assert.AreEqual(results.Count, 0);
203+
204+
GC.KeepAlive(recipient);
194205
}
195206

196207
[TestCategory("Mvvm")]
@@ -266,6 +277,8 @@ void Receive(object recipient, AsyncNumbersCollectionRequestMessage m)
266277
var results = await messenger.Send<AsyncNumbersCollectionRequestMessage>().GetResponsesAsync();
267278

268279
Assert.AreEqual(results.Count, 0);
280+
281+
GC.KeepAlive(recipient);
269282
}
270283

271284
[TestCategory("Mvvm")]
@@ -298,6 +311,46 @@ async Task<int> GetNumberAsync()
298311
messenger.Register<AsyncNumbersCollectionRequestMessage>(recipient3, Receive3);
299312
messenger.Register<AsyncNumbersCollectionRequestMessage>(recipient4, Receive4);
300313

314+
var responses = await messenger.Send<AsyncNumbersCollectionRequestMessage>().GetResponsesAsync();
315+
316+
CollectionAssert.AreEquivalent(responses.ToArray(), new[] { 1, 2, 3, 3 });
317+
318+
GC.KeepAlive(recipient1);
319+
GC.KeepAlive(recipient2);
320+
GC.KeepAlive(recipient3);
321+
GC.KeepAlive(recipient4);
322+
}
323+
324+
[TestCategory("Mvvm")]
325+
[TestMethod]
326+
[DataRow(typeof(StrongReferenceMessenger))]
327+
[DataRow(typeof(WeakReferenceMessenger))]
328+
public async Task Test_Messenger_AsyncCollectionRequestMessage_Ok_MultipleReplies_Enumerate(Type type)
329+
{
330+
var messenger = (IMessenger)Activator.CreateInstance(type);
331+
object
332+
recipient1 = new object(),
333+
recipient2 = new object(),
334+
recipient3 = new object(),
335+
recipient4 = new object();
336+
337+
async Task<int> GetNumberAsync()
338+
{
339+
await Task.Delay(100);
340+
341+
return 3;
342+
}
343+
344+
void Receive1(object recipient, AsyncNumbersCollectionRequestMessage m) => m.Reply(1);
345+
void Receive2(object recipient, AsyncNumbersCollectionRequestMessage m) => m.Reply(Task.FromResult(2));
346+
void Receive3(object recipient, AsyncNumbersCollectionRequestMessage m) => m.Reply(GetNumberAsync());
347+
void Receive4(object recipient, AsyncNumbersCollectionRequestMessage m) => m.Reply(_ => GetNumberAsync());
348+
349+
messenger.Register<AsyncNumbersCollectionRequestMessage>(recipient1, Receive1);
350+
messenger.Register<AsyncNumbersCollectionRequestMessage>(recipient2, Receive2);
351+
messenger.Register<AsyncNumbersCollectionRequestMessage>(recipient3, Receive3);
352+
messenger.Register<AsyncNumbersCollectionRequestMessage>(recipient4, Receive4);
353+
301354
List<int> responses = new List<int>();
302355

303356
await foreach (var response in messenger.Send<AsyncNumbersCollectionRequestMessage>())
@@ -306,6 +359,11 @@ async Task<int> GetNumberAsync()
306359
}
307360

308361
CollectionAssert.AreEquivalent(responses, new[] { 1, 2, 3, 3 });
362+
363+
GC.KeepAlive(recipient1);
364+
GC.KeepAlive(recipient2);
365+
GC.KeepAlive(recipient3);
366+
GC.KeepAlive(recipient4);
309367
}
310368

311369
public class AsyncNumbersCollectionRequestMessage : AsyncCollectionRequestMessage<int>

0 commit comments

Comments
 (0)