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(); }
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); }