コード例 #1
0
        public async void BlockCommands()
        {
            // Setup

            var commandMock = new Mock <IFluentCommand>();

            commandMock
            .Setup(m => m.CanExecute(It.Is <object>(v => v == null)))
            .Returns(true);
            commandMock
            .Setup(m => m.ExecuteAsync(It.Is <object>(v => v == null)))
            .Returns(Task.CompletedTask);

            IFluentCommand command = null;

            AsyncCommandManager
            .New()
            .AddGroup(eg => command = eg.Register(commandMock.Object));

            // Act

            await command.ExecuteAsync(null);

            // Assert

            command.Should().NotBeNull();

            commandMock.Verify(m => m.CanExecute(It.Is <object>(v => v == null)), Times.Never);
            commandMock.Verify(m => m.ExecuteAsync(It.Is <object>(v => v == null)), Times.Once);

            command.CanExecute(null).Should().BeTrue();
        }
コード例 #2
0
        public void BlockCommands2()
        {
            // Setup

            var tcs = new TaskCompletionSource <object>();

            var commandMockA = new Mock <IFluentCommand>();

            commandMockA
            .Setup(m => m.CanExecute(It.Is <object>(v => v == null)))
            .Returns(true);
            commandMockA
            .Setup(m => m.ExecuteAsync(It.Is <object>(v => v == null)))
            .Returns(tcs.Task);

            var commandMockB = new Mock <IFluentCommand>();

            commandMockB
            .Setup(m => m.CanExecute(It.Is <object>(v => v == null)))
            .Returns(true);
            commandMockB
            .Setup(m => m.ExecuteAsync(It.Is <object>(v => v == null)))
            .Returns(Task.Delay(-1));

            IFluentCommand commandA = null;
            IFluentCommand commandB = null;

            AsyncCommandManager
            .New()
            .AddGroup(eg =>
            {
                commandA = eg.Register(commandMockA.Object);
                commandB = eg.Register(commandMockB.Object);
            });

            // Act

            var _ = commandA.ExecuteAsync(null);

            // Assert

            commandA.Should().NotBeNull();
            commandMockA.Verify(m => m.CanExecute(It.Is <object>(v => v == null)), Times.Never);
            commandMockA.Verify(m => m.ExecuteAsync(It.Is <object>(v => v == null)), Times.Once);

            commandB.Should().NotBeNull();
            commandMockB.Verify(m => m.CanExecute(It.Is <object>(v => v == null)), Times.Never);
            commandMockB.Verify(m => m.ExecuteAsync(It.Is <object>(v => v == null)), Times.Never);
            commandB.CanExecute(null).Should().BeFalse("Command A should block Command B.");

            tcs.SetResult(null);
        }