|
11 | 11 | using System.Threading.Tasks;
|
12 | 12 | using CommunityToolkit.Mvvm.ComponentModel;
|
13 | 13 | using CommunityToolkit.Mvvm.Input;
|
| 14 | +using CommunityToolkit.Mvvm.Messaging; |
| 15 | +using CommunityToolkit.Mvvm.Messaging.Messages; |
14 | 16 | using Microsoft.VisualStudio.TestTools.UnitTesting;
|
15 | 17 |
|
16 | 18 | namespace CommunityToolkit.Mvvm.UnitTests;
|
@@ -360,6 +362,61 @@ public void Test_OnPropertyChangingAndChangedPartialMethodWithAdditionalValidati
|
360 | 362 | Assert.AreEqual("B", model.Name);
|
361 | 363 | }
|
362 | 364 |
|
| 365 | + [TestMethod] |
| 366 | + public void Test_AlsoBroadcastChange_WithObservableObject() |
| 367 | + { |
| 368 | + Test_AlsoBroadcastChange_Test( |
| 369 | + factory: static messenger => new BroadcastingViewModel(messenger), |
| 370 | + setter: static (model, value) => model.Name = value, |
| 371 | + propertyName: nameof(BroadcastingViewModel.Name)); |
| 372 | + } |
| 373 | + |
| 374 | + [TestMethod] |
| 375 | + public void Test_AlsoBroadcastChange_WithObservableRecipientAttribute() |
| 376 | + { |
| 377 | + Test_AlsoBroadcastChange_Test( |
| 378 | + factory: static messenger => new BroadcastingViewModelWithAttribute(messenger), |
| 379 | + setter: static (model, value) => model.Name = value, |
| 380 | + propertyName: nameof(BroadcastingViewModelWithAttribute.Name)); |
| 381 | + } |
| 382 | + |
| 383 | + [TestMethod] |
| 384 | + public void Test_AlsoBroadcastChange_WithInheritedObservableRecipientAttribute() |
| 385 | + { |
| 386 | + Test_AlsoBroadcastChange_Test( |
| 387 | + factory: static messenger => new BroadcastingViewModelWithInheritedAttribute(messenger), |
| 388 | + setter: static (model, value) => model.Name2 = value, |
| 389 | + propertyName: nameof(BroadcastingViewModelWithInheritedAttribute.Name2)); |
| 390 | + } |
| 391 | + |
| 392 | + private void Test_AlsoBroadcastChange_Test<T>(Func<IMessenger, T> factory, Action<T, string?> setter, string propertyName) |
| 393 | + where T : notnull |
| 394 | + { |
| 395 | + IMessenger messenger = new StrongReferenceMessenger(); |
| 396 | + |
| 397 | + T model = factory(messenger); |
| 398 | + |
| 399 | + List<(object Sender, PropertyChangedMessage<string?> Message)> messages = new(); |
| 400 | + |
| 401 | + messenger.Register<PropertyChangedMessage<string?>>(model, (r, m) => messages.Add((r, m))); |
| 402 | + |
| 403 | + setter(model, "Bob"); |
| 404 | + |
| 405 | + Assert.AreEqual(1, messages.Count); |
| 406 | + Assert.AreSame(model, messages[0].Sender); |
| 407 | + Assert.AreEqual(null, messages[0].Message.OldValue); |
| 408 | + Assert.AreEqual("Bob", messages[0].Message.NewValue); |
| 409 | + Assert.AreEqual(propertyName, messages[0].Message.PropertyName); |
| 410 | + |
| 411 | + setter(model, "Ross"); |
| 412 | + |
| 413 | + Assert.AreEqual(2, messages.Count); |
| 414 | + Assert.AreSame(model, messages[1].Sender); |
| 415 | + Assert.AreEqual("Bob", messages[1].Message.OldValue); |
| 416 | + Assert.AreEqual("Ross", messages[1].Message.NewValue); |
| 417 | + Assert.AreEqual(propertyName, messages[0].Message.PropertyName); |
| 418 | + } |
| 419 | + |
363 | 420 | public partial class SampleModel : ObservableObject
|
364 | 421 | {
|
365 | 422 | /// <summary>
|
@@ -615,4 +672,36 @@ protected override void OnPropertyChanged(PropertyChangedEventArgs e)
|
615 | 672 | Assert.AreEqual(nameof(Name), e.PropertyName);
|
616 | 673 | }
|
617 | 674 | }
|
| 675 | + |
| 676 | + partial class BroadcastingViewModel : ObservableRecipient |
| 677 | + { |
| 678 | + public BroadcastingViewModel(IMessenger messenger) |
| 679 | + : base(messenger) |
| 680 | + { |
| 681 | + } |
| 682 | + |
| 683 | + [ObservableProperty] |
| 684 | + [AlsoBroadcastChange] |
| 685 | + private string? name; |
| 686 | + } |
| 687 | + |
| 688 | + [ObservableRecipient] |
| 689 | + partial class BroadcastingViewModelWithAttribute : ObservableObject |
| 690 | + { |
| 691 | + [ObservableProperty] |
| 692 | + [AlsoBroadcastChange] |
| 693 | + private string? name; |
| 694 | + } |
| 695 | + |
| 696 | + partial class BroadcastingViewModelWithInheritedAttribute : BroadcastingViewModelWithAttribute |
| 697 | + { |
| 698 | + public BroadcastingViewModelWithInheritedAttribute(IMessenger messenger) |
| 699 | + : base(messenger) |
| 700 | + { |
| 701 | + } |
| 702 | + |
| 703 | + [ObservableProperty] |
| 704 | + [AlsoBroadcastChange] |
| 705 | + private string? name2; |
| 706 | + } |
618 | 707 | }
|
0 commit comments