public async Task MudPopoverHandler_InitializeAndDetachConcurrent_DetachRunsAfterInitialize() { var connectTcs = new TaskCompletionSource <IJSVoidResult>(); var mock = new Mock <IJSRuntime>(); var handler = new MudPopoverHandler(_ => { }, mock.Object, () => { }); mock.Setup(x => x.InvokeAsync <IJSVoidResult>("mudPopover.connect", It.Is <object[]>(y => y.Length == 1 && (Guid)y[0] == handler.Id))) .Returns(new ValueTask <IJSVoidResult>(connectTcs.Task)) .Verifiable(); mock.Setup(x => x.InvokeAsync <IJSVoidResult>("mudPopover.disconnect", It.Is <object[]>(y => y.Length == 1 && (Guid)y[0] == handler.Id))) .ReturnsAsync(Mock.Of <IJSVoidResult>()) .Verifiable(); var task1 = handler.Initialize(); var task2 = handler.Detach(); connectTcs.SetResult(Mock.Of <IJSVoidResult>()); await Task.WhenAll(task1, task2); mock.Verify(); mock.VerifyNoOtherCalls(); }
public async Task MudPopoverHandler_InitizeAndDetach_DetachThrowsNotTaskCancelledException() { var handlerId = Guid.NewGuid(); RenderFragment renderFragement = (tree) => { }; var mock = new Mock <IJSRuntime>(); mock.Setup(x => x.InvokeAsync <IJSVoidResult>( "mudPopover.connect", It.Is <object[]>(x => x.Length == 1 && (Guid)x[0] == handlerId))).ReturnsAsync(Mock.Of <IJSVoidResult>).Verifiable(); mock.Setup(x => x.InvokeAsync <IJSVoidResult>( "mudPopover.disconnect", It.Is <object[]>(x => x.Length == 1 && (Guid)x[0] == handlerId))).ThrowsAsync(new InvalidOperationException()).Verifiable(); var updateCounter = 0; Action updater = () => { updateCounter++; }; var handler = new MudPopoverHandler(renderFragement, mock.Object, updater); handlerId = handler.Id; await handler.Initialize(); //exception of the js interop should result in an exception Assert.ThrowsAsync <InvalidOperationException>(async() => await handler.Detach()); //despite the exception the handler should be disconnected handler.IsConnected.Should().BeFalse(); }
public async Task MudPopoverHandler_InitizeAndDetach_DetachThrowsTaskCancelledException() { var handlerId = Guid.NewGuid(); RenderFragment renderFragement = (tree) => { }; var mock = new Mock <IJSRuntime>(); mock.Setup(x => x.InvokeAsync <IJSVoidResult>( "mudPopover.connect", It.Is <object[]>(x => x.Length == 1 && (Guid)x[0] == handlerId))).ReturnsAsync(Mock.Of <IJSVoidResult>).Verifiable(); mock.Setup(x => x.InvokeAsync <IJSVoidResult>( "mudPopover.disconnect", It.Is <object[]>(x => x.Length == 1 && (Guid)x[0] == handlerId))).ThrowsAsync(new TaskCanceledException()).Verifiable(); var updateCounter = 0; Action updater = () => { updateCounter++; }; var handler = new MudPopoverHandler(renderFragement, mock.Object, updater); handlerId = handler.Id; await handler.Initialize(); //task canceled exception shoudn't result in an exception await handler.Detach(); handler.IsConnected.Should().BeFalse(); }
public async Task MudPopoverHandler_InitizeAndDetach() { var handlerId = Guid.NewGuid(); RenderFragment renderFragement = (tree) => { }; var mock = new Mock <IJSRuntime>(); mock.Setup(x => x.InvokeAsync <object>( "mudPopover.connect", It.Is <object[]>(x => x.Length == 1 && (Guid)x[0] == handlerId))).ReturnsAsync(new object()).Verifiable(); mock.Setup(x => x.InvokeAsync <object>( "mudPopover.disconnect", It.Is <object[]>(x => x.Length == 1 && (Guid)x[0] == handlerId))).ReturnsAsync(new object()).Verifiable(); var updateCounter = 0; Action updater = () => { updateCounter++; }; var handler = new MudPopoverHandler(renderFragement, mock.Object, updater); handlerId = handler.Id; handler.IsConnected.Should().BeFalse(); await handler.Initialize(); handler.IsConnected.Should().BeTrue(); await handler.Detach(); handler.IsConnected.Should().BeFalse(); }
public async Task MudPopoverHandler_DetachCalledBeforeInitialize_NoInteropShouldOccur() { var mock = new Mock <IJSRuntime>(); var handler = new MudPopoverHandler(_ => { }, mock.Object, () => { }); await handler.Detach(); handler.IsConnected.Should().BeFalse(); await handler.Initialize(); handler.IsConnected.Should().BeFalse(); mock.VerifyNoOtherCalls(); }
public async Task MudPopoverHandler_InitializeAndDetachConcurrent_DetachDoesNotRunAtSameTimeAsInitialize() { var connectTcs = new TaskCompletionSource <IJSVoidResult>(); var mock = new Mock <IJSRuntime>(); var handler = new MudPopoverHandler(_ => { }, mock.Object, () => { }); mock.Setup(x => x.InvokeAsync <IJSVoidResult>("mudPopover.connect", It.Is <object[]>(y => y.Length == 1 && (Guid)y[0] == handler.Id))) .Returns(new ValueTask <IJSVoidResult>(connectTcs.Task)) .Verifiable(); _ = handler.Initialize(); var task2 = handler.Detach(); var completedTask = await Task.WhenAny(Task.Delay(50), task2); completedTask.Should().NotBe(task2); mock.Verify(); mock.VerifyNoOtherCalls(); }