// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System; using System.Threading; using System.Threading.Tasks; using CommunityToolkit.Mvvm.Messaging; using CommunityToolkit.Mvvm.Messaging.Messages; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace CommunityToolkit.Mvvm.UnitTests; public partial class Test_ArgumentNullException { [TestMethod] [DataRow(typeof(StrongReferenceMessenger))] [DataRow(typeof(WeakReferenceMessenger))] public void Test_ArgumentNullException_Messenger(Type type) { IMessenger messenger = (IMessenger)Activator.CreateInstance(type)!; Assert(() => messenger.IsRegistered(recipient: null!, 42), "recipient"); Assert(() => messenger.IsRegistered(new object(), null!), "token"); Assert(() => messenger.Register(recipient: null!, "", (r, m) => { }), "recipient"); Assert(() => messenger.Register(new object(), null!, (r, m) => { }), "token"); Assert(() => messenger.Register(new object(), "", handler: null!), "handler"); Assert(() => messenger.UnregisterAll(recipient: null!), "recipient"); Assert(() => messenger.UnregisterAll(recipient: null!, ""), "recipient"); Assert(() => messenger.UnregisterAll(new object(), token: null!), "token"); Assert(() => messenger.Unregister(recipient: null!, ""), "recipient"); Assert(() => messenger.Unregister(new object(), token: null!), "token"); Assert(() => messenger.Send(message: null!, ""), "message"); Assert(() => messenger.Send(new DummyMessage(), token: null!), "token"); } [TestMethod] [DataRow(typeof(StrongReferenceMessenger))] [DataRow(typeof(WeakReferenceMessenger))] public void Test_ArgumentNullException_MessengerExtensions(Type type) { IMessenger messenger = (IMessenger)Activator.CreateInstance(type)!; Assert(() => ((IMessenger)null!).IsRegistered(new object()), "messenger"); Assert(() => messenger.IsRegistered(recipient: null!), "recipient"); Assert(() => ((IMessenger)null!).RegisterAll(new object()), "messenger"); Assert(() => messenger.RegisterAll(recipient: null!), "recipient"); Assert(() => ((IMessenger)null!).RegisterAll(new object(), ""), "messenger"); Assert(() => messenger.RegisterAll(recipient: null!, ""), "recipient"); Assert(() => messenger.RegisterAll(new object(), token: null!), "token"); Assert(() => ((IMessenger)null!).Register(new Recipient()), "messenger"); Assert(() => messenger.Register(recipient: null!), "recipient"); Assert(() => ((IMessenger)null!).Register(new Recipient(), ""), "messenger"); Assert(() => messenger.Register(recipient: null!, ""), "recipient"); Assert(() => messenger.Register(new Recipient(), token: null!), "token"); Assert(() => ((IMessenger)null!).Register(new object(), (r, m) => { }), "messenger"); Assert(() => messenger.Register(recipient: null!, (r, m) => { }), "recipient"); Assert(() => messenger.Register(new object(), handler: null!), "handler"); Assert(() => ((IMessenger)null!).Register(new Recipient(), (r, m) => { }), "messenger"); Assert(() => messenger.Register(recipient: null!, (r, m) => { }), "recipient"); Assert(() => messenger.Register(new Recipient(), handler: null!), "handler"); Assert(() => ((IMessenger)null!).Register(new Recipient(), "", (r, m) => { }), "messenger"); Assert(() => messenger.Register(recipient: null!, "", (r, m) => { }), "recipient"); Assert(() => messenger.Register(new Recipient(), token: null!, handler: null!), "token"); Assert(() => messenger.Register(new Recipient(), "", handler: null!), "handler"); Assert(() => ((IMessenger)null!).Unregister(new Recipient()), "messenger"); Assert(() => messenger.Unregister(recipient: null!), "recipient"); Assert(() => ((IMessenger)null!).Send(), "messenger"); Assert(() => ((IMessenger)null!).Send(new DummyMessage()), "messenger"); Assert(() => messenger.Send(message: null!), "message"); Assert(() => ((IMessenger)null!).Send(""), "messenger"); Assert(() => messenger.Send(token: null!), "token"); } [TestMethod] public void Test_ArgumentNullException_AsyncCollectionRequestMessage() { AsyncCollectionRequestMessage message = new(); Assert(() => message.Reply(response: (Task)null!), "response"); Assert(() => message.Reply(response: (Func>)null!), "response"); } [TestMethod] public void Test_ArgumentNullException_AsyncRequestMessage() { AsyncRequestMessage message = new(); Assert(() => message.Reply(response: null!), "response"); } [TestMethod] public void Test_ArgumentNullException_PropertyChangedMessage() { Assert(() => new PropertyChangedMessage(sender: null!, "", 0, 1), "sender"); } [TestMethod] public void Test_ArgumentNullException_RequestMessage() { Assert(() => _ = (int)(RequestMessage)null!, "message"); } internal class DummyMessage { } internal class Recipient : IRecipient { public void Receive(DummyMessage message) { throw new NotImplementedException(); } } }