public async void IsLoadingEventShouldTriggerTwice()
        {
            // Arrange
            var triggerCount = 0;
            var loader = new Loader(new Mock<IDialogService>().Object);
            loader.LoadingChanged += (sender, args) => ++triggerCount;

            // Act
            await loader.LoadAsync(token => Task.FromResult<object>(null));

            // Assert
            Assert.AreEqual(2, triggerCount);
        }
        public async void CancelledTaskDoesNotShowDialog()
        {
            // Arrange
            var dialogService = new Mock<IDialogService>();
            dialogService.Setup(d => d.ShowMessageAsync(It.IsAny<string>()));

            var tcs = new TaskCompletionSource<object>();
            tcs.SetCanceled();

            var loader = new Loader(dialogService.Object);

            // Act
            await loader.LoadAsync(token => tcs.Task);

            // Assert
            dialogService.Verify(s => s.ShowMessageAsync(It.IsAny<string>()), Times.Never);
        }
        public async void FailedTaskShowsDialog()
        {
            // Arrange
            var dialogService = new Mock<IDialogService>();
            dialogService.Setup(d => d.ShowMessageAsync(It.IsAny<string>())).Returns(Task.FromResult<object>(null));

            const string failedMessage = "Failed";
            var tcs = new TaskCompletionSource<object>();
            tcs.SetException(new Exception(failedMessage));

            var loader = new Loader(dialogService.Object);

            // Act
            await loader.LoadAsync(token => tcs.Task);

            // Assert
            dialogService.Verify(s => s.ShowMessageAsync(failedMessage), Times.Once);
        }