public void CanExecuteReturnsTrueWithoutCanExecuteDelegate()
        {
            var handlers = new AsyncDelegateObjectHandlers();
            var command  = new global::Anori.WinUI.Commands.AsyncRelayCommand <object>(async o => await handlers.Execute(o));

            var condition = command.CanExecute(null);

            Assert.True(condition);
        }
        public void RaiseCanExecuteChangedRaisesCanExecuteChanged()
        {
            var handlers = new AsyncDelegateObjectHandlers();
            var command  = new global::Anori.WinUI.Commands.AsyncRelayCommand <object>(async o => await handlers.Execute(o), o => false);
            var canExecuteChangedRaised = false;

            command.CanExecuteChanged += delegate { canExecuteChangedRaised = true; };

            command.RaiseCanExecuteChanged();
            Assert.True(canExecuteChangedRaised);
        }
        public void RaiseCanExecuteChangedNoCanExecuteNoRaiseCanExecuteChanged()
        {
            var handlers = new AsyncDelegateObjectHandlers();
            var command  = new WinUI.Commands.AsyncRelayCommand <object>(async o => await handlers.Execute(o));
            var canExecuteChangedRaised = false;

            command.CanExecuteChanged += delegate { canExecuteChangedRaised = true; };

            command.RaiseCanExecuteChanged();
            Assert.False(canExecuteChangedRaised);
        }
        public void CanExecuteCallsPassedInCanExecuteDelegate()
        {
            var handlers  = new AsyncDelegateObjectHandlers();
            var command   = new global::Anori.WinUI.Commands.AsyncRelayCommand <object>(async o => await handlers.Execute(o), handlers.CanExecute);
            var parameter = new object();

            handlers.CanExecuteReturnValue = true;
            var actual = command.CanExecute(parameter);

            Assert.AreSame(parameter, handlers.CanExecuteParameter);
            Assert.AreEqual(handlers.CanExecuteReturnValue, actual);
        }
        public void ExecuteCallsPassedInExecuteDelegate()
        {
            var handlers = new AsyncDelegateObjectHandlers();

            using var waitHandle = new EventWaitHandle(false, EventResetMode.AutoReset);

            var command = new global::Anori.WinUI.Commands.AsyncRelayCommand <object>(async o =>
            {
                await handlers.Execute(o);
                waitHandle.Set();
            }) as ICommand;
            var parameter = new object();

            command.Execute(parameter);
            waitHandle.WaitOne();
            Assert.AreSame(parameter, handlers.ExecuteParameter);
        }