예제 #1
0
        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();
        }
예제 #2
0
        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();
        }
예제 #3
0
        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();
        }
예제 #4
0
        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();
        }
예제 #5
0
        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();
        }
예제 #6
0
        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();
        }