Пример #1
0
        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);
        }
Пример #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_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();
        }
Пример #4
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();
        }
Пример #5
0
        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");
        }
Пример #6
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();
        }
Пример #7
0
        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();
        }
Пример #8
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();
        }
Пример #9
0
        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();
        }
Пример #10
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();
        }