public void MudPopoverHandler_UpdateFragment() { RenderFragment initialRenderFragement = (tree) => { }; var mock = Mock.Of <IJSRuntime>(); var updateCounter = 0; Action updater = () => { updateCounter++; }; var handler = new MudPopoverHandler(initialRenderFragement, mock, updater); var comp = Context.RenderComponent <MudBadge>(p => { p.Add(x => x.UserAttributes, new Dictionary <string, object> { { "myprop1", "myValue1" } }); p.Add(x => x.Tag, "my tag"); }); RenderFragment newRenderFragement = (tree) => { }; handler.UpdateFragment(newRenderFragement, comp.Instance, "my-extra-class", "my-extra-style:2px", true); handler.Id.Should().NotBe(default(Guid)); handler.UserAttributes.Should().BeEquivalentTo(new Dictionary <string, object> { { "myprop1", "myValue1" } }); handler.Class.Should().Be("my-extra-class"); handler.Style.Should().Be("my-extra-style:2px"); handler.Tag.Should().Be("my tag"); handler.Fragment.Should().BeSameAs(newRenderFragement); handler.IsConnected.Should().BeFalse(); handler.ShowContent.Should().BeTrue(); updateCounter.Should().Be(1); }
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_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_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 void MudPopoverHandler_UpdateAndLockCycle() { RenderFragment initialRenderFragement = (tree) => { }; var mock = Mock.Of <IJSRuntime>(); var updateCounter = 0; Action updater = () => { updateCounter++; }; var handler = new MudPopoverHandler(initialRenderFragement, mock, updater); var comp = Context.RenderComponent <MudBadge>(p => { p.Add(x => x.UserAttributes, new Dictionary <string, object> { { "myprop1", "myValue1" } }); p.Add(x => x.Tag, "my tag"); }); RenderFragment newRenderFragement = (tree) => { }; for (int i = 0; i < 4; i++) { handler.UpdateFragment(newRenderFragement, comp.Instance, "my-extra-class", "my-extra-style:2px", i % 2 == 0); } updateCounter.Should().Be(1); handler.Release(); handler.UpdateFragment(newRenderFragement, comp.Instance, "my-new-extra-class", "my-new-extra-style:2px", true); updateCounter.Should().Be(2); handler.Class.Should().Be("my-new-extra-class"); handler.Style.Should().Be("my-new-extra-style:2px"); }
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 MudPopoverService_Unregister_HandlerNotFound() { var service = new MudPopoverService(Mock.Of <IJSRuntime>(MockBehavior.Strict)); var handler = new MudPopoverHandler((tree) => { }, Mock.Of <IJSRuntime>(MockBehavior.Strict), () => { }); var result = await service.Unregister(handler); result.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 void MudPopoverHandler_Constructor() { RenderFragment renderFragement = (tree) => { }; var mock = Mock.Of <IJSRuntime>(); Action updater = () => { }; var handler = new MudPopoverHandler(renderFragement, mock, updater); handler.Id.Should().NotBe(default(Guid)); handler.UserAttributes.Should().BeEmpty(); handler.Class.Should().BeNull(); handler.Tag.Should().BeNull(); handler.Fragment.Should().BeSameAs(renderFragement); handler.IsConnected.Should().BeFalse(); handler.ShowContent.Should().BeFalse(); }
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(); }