public void SingleCommandResponseError_Execute_NoError()
        {
            var waitableCommand = new TestWaitableCommand();

            _macroCommand.AddCommand(waitableCommand);

            _macroCommand.Execute(new object());

            Assert.IsTrue(waitableCommand.IsDoneWasRaised);
        }
        public void Test()
        {
            var waitableCommand = new TestWaitableCommand(ResponseStatus.Success, true);

            _macroCommand.AddCommand(waitableCommand);
            var wasRaised = false;

            _macroCommand.CanExecuteChanged += (sender, args) => wasRaised = true;

            waitableCommand.RaiseCanExecuteChanged();

            Assert.IsTrue(wasRaised, "The macro command did not raise CanExecuteChanged when the subcommand did!");
        }
        public void MultipleCommandButFirstCommandCancel_Execute_SecondCommandNotCalled()
        {
            var waitableCommand1 = new TestWaitableCommand(ResponseStatus.Cancel);
            var waitableCommand2 = new TestWaitableCommand();

            _macroCommand.AddCommand(waitableCommand1);
            _macroCommand.AddCommand(waitableCommand2);

            _macroCommand.Execute(new object());

            Assert.IsTrue(waitableCommand1.IsDoneWasRaised);
            Assert.IsFalse(waitableCommand2.IsDoneWasRaised);

            // test that the listener for IsDone was deregistered
            Assert.IsFalse(waitableCommand1.HasEventListenerRegistered);
            Assert.IsFalse(waitableCommand2.HasEventListenerRegistered);
        }
        public void MultipleCommand_Execute_NoError()
        {
            var waitableCommand1 = new TestWaitableCommand();
            var waitableCommand2 = new TestWaitableCommand();

            _macroCommand.AddCommand(waitableCommand1);
            _macroCommand.AddCommand(waitableCommand2);

            _macroCommand.Execute(new object());

            Assert.IsTrue(waitableCommand1.IsDoneWasRaised);
            Assert.IsTrue(waitableCommand2.IsDoneWasRaised);

            // test that the listener for IsDone was deregistered
            Assert.IsFalse(waitableCommand1.HasEventListenerRegistered);
            Assert.IsFalse(waitableCommand2.HasEventListenerRegistered);
        }
        public void MultipleCommandButFirstCommandDelayed_Execute_BothSuccessful()
        {
            var waitableCommand1 = new TestWaitableCommand(ResponseStatus.Success, true);
            var waitableCommand2 = new TestWaitableCommand();

            _macroCommand.AddCommand(waitableCommand1);
            _macroCommand.AddCommand(waitableCommand2);

            var isDoneResetEvent = new ManualResetEventSlim(false);

            _macroCommand.MacroIsDone += (sender, args) =>
            {
                isDoneResetEvent.Set();
            };

            _macroCommand.Execute(new object());

            Assert.IsFalse(waitableCommand1.IsDoneWasRaised);
            Assert.IsFalse(waitableCommand2.IsDoneWasRaised);

            waitableCommand1.DelayExecutionResetEvent.Set();

            var macroIsDone = isDoneResetEvent.Wait(1000);

            Assert.IsTrue(macroIsDone, "MacroCommand was not marked as done!");

            // To prevent timing issues, wait a bit if it was not updated yet
            if (!waitableCommand1.IsDoneWasRaised)
            {
                Thread.Sleep(10);
            }

            Assert.IsTrue(waitableCommand1.IsDoneWasRaised);
            Assert.IsTrue(waitableCommand2.IsDoneWasRaised);

            // test that the listener for IsDone was deregistered
            Assert.IsFalse(waitableCommand1.HasEventListenerRegistered);
            Assert.IsFalse(waitableCommand2.HasEventListenerRegistered);
        }
 public void Setup()
 {
     _waitableCommand = new TestWaitableCommand();
     _locator         = Substitute.For <ICommandLocator>();
     _macroCommand    = new MacroCommand(_locator);
 }