示例#1
0
        public void Progress()
        {
            IAmbientProgress progress = AmbientProgressService.GlobalProgress;

            progress?.ResetCancellation(); // make a new cancellation in case the source was canceled in this execution context during a previous test
            progress?.Update(0.01f);
            Assert.AreEqual(0.01f, progress?.PortionComplete ?? float.NaN);
            Assert.AreEqual("", progress?.ItemCurrentlyBeingProcessed);
            progress?.Update(0.02f, "test");
            Assert.AreEqual(0.02f, progress?.PortionComplete ?? float.NaN);
            Assert.AreEqual("test", progress?.ItemCurrentlyBeingProcessed);
            progress?.Update(0.03f);
            Assert.AreEqual(0.03f, progress?.PortionComplete ?? float.NaN);
            Assert.AreEqual("test", progress?.ItemCurrentlyBeingProcessed);
            progress?.Update(0.04f, "");
            Assert.AreEqual(0.04f, progress?.PortionComplete ?? float.NaN);
            Assert.AreEqual("", progress?.ItemCurrentlyBeingProcessed);
            using (progress?.TrackPart(0.05f, 0.10f, null, true))
            {
                IAmbientProgress subprogress = AmbientProgressService.GlobalProgress;
                subprogress?.ResetCancellation(TimeSpan.FromMilliseconds(5));
            }
            using (progress?.TrackPart(0.10f, 0.15f, null, false))
            {
                IAmbientProgress subprogress = AmbientProgressService.GlobalProgress;
                subprogress?.ResetCancellation(TimeSpan.FromMilliseconds(5));
            }
        }
示例#2
0
    public async Task MainOperation(CancellationToken cancel = default(CancellationToken))
    {
        IAmbientProgress?progress = AmbientProgressService.Progress;

        using (progress?.TrackPart(0.01f, 0.75f, "Download "))
        {
            await Download();
        }
        using (progress?.TrackPart(0.75f, 0.99f, "Unzip "))
        {
            await Unzip();
        }
    }
示例#3
0
        public void PortionTooLargeError()
        {
            IAmbientProgress progress = AmbientProgressService.GlobalProgress;

            progress?.ResetCancellation(); // make a new cancellation in case the source was canceled in this execution context during a previous test
            using (progress?.TrackPart(0.5f, 0.73f))
            {
            }
        }
示例#4
0
        public void ProgressPartStack()
        {
            IAmbientProgress progress = AmbientProgressService.GlobalProgress;

            progress?.ResetCancellation(); // make a new cancellation in case the source was canceled in this execution context during a previous test
            using (progress?.TrackPart(0.05f, 0.10f))
            {
                Assert.AreNotEqual(progress, AmbientProgressService.GlobalProgress);
            }
            Assert.AreEqual(progress, AmbientProgressService.GlobalProgress);
        }
示例#5
0
        public void PartPortionCompleteTooHighError()
        {
            IAmbientProgress progress = AmbientProgressService.GlobalProgress;

            progress?.ResetCancellation(); // make a new cancellation in case the source was canceled in this execution context during a previous test
            using (progress?.TrackPart(0.01f, 0.02f))
            {
                IAmbientProgress subprogress = AmbientProgressService.GlobalProgress;
                subprogress?.Update(1.01f);
            }
        }
示例#6
0
        public void PartStackCorruption4()
        {
            IAmbientProgress progress = AmbientProgressService.GlobalProgress;

            progress?.ResetCancellation(); // make a new cancellation in case the source was canceled in this execution context during a previous test
            IDisposable subProgress1 = progress?.TrackPart(0.05f, 0.13f);
            IDisposable subProgress2 = AmbientProgressService.GlobalProgress?.TrackPart(0.05f, 0.24f);
            IDisposable subProgress3 = AmbientProgressService.GlobalProgress?.TrackPart(0.05f, 0.24f);

            Assert.ThrowsException <InvalidOperationException>(() => subProgress2?.Dispose());
            subProgress1?.Dispose();
            Assert.ThrowsException <InvalidOperationException>(() => subProgress3?.Dispose());
        }
示例#7
0
        public void DisposeTopLevelProgress()
        {
            IAmbientProgress progress = AmbientProgressService.GlobalProgress;

            using (progress as IDisposable)
            {
            }
            // this should create a new progress
            progress = AmbientProgressService.GlobalProgress;
            progress?.ResetCancellation(); // make a new cancellation in case the source was canceled in this execution context during a previous test
            using (progress?.TrackPart(0.05f, 0.13f))
            {
            }
        }
示例#8
0
        public void ProgressPart()
        {
            IAmbientProgress progress = AmbientProgressService.GlobalProgress;

            progress?.ResetCancellation(); // make a new cancellation in case the source was canceled in this execution context during a previous test
            using (progress?.TrackPart(0.05f, 0.05f, "prefix-"))
            {
                IAmbientProgress subprogress = AmbientProgressService.GlobalProgress;
                Assert.AreEqual(0.0f, subprogress?.PortionComplete);
                Assert.AreNotEqual(progress, AmbientProgressService.GlobalProgress);
                subprogress?.Update(.5f, "subitem");
                Assert.AreEqual(0.5f, subprogress?.PortionComplete);
                Assert.AreEqual("subitem", subprogress?.ItemCurrentlyBeingProcessed);
                Assert.AreEqual(0.075f, progress?.PortionComplete);
                Assert.AreEqual("prefix-subitem", progress?.ItemCurrentlyBeingProcessed);
            }
            Assert.AreEqual(progress, AmbientProgressService.GlobalProgress);
            Assert.AreEqual(0.10f, progress?.PortionComplete);
            Assert.AreEqual("prefix-subitem", progress?.ItemCurrentlyBeingProcessed);
        }
示例#9
0
        public void CancellationToken()
        {
            IAmbientProgress progress = AmbientProgressService.GlobalProgress;

            progress?.ResetCancellation(); // make a new cancellation in case the source was canceled in this execution context during a previous test
            if (progress?.GetType().Name == "SubProgress")
            {
                Assert.Fail("Progress: " + progress.ItemCurrentlyBeingProcessed + "(" + progress.PortionComplete + ")");
            }
            Assert.AreEqual("Progress", progress?.GetType().Name);
            CancellationToken token = progress?.CancellationToken ?? default(CancellationToken);

            Assert.IsFalse(token.IsCancellationRequested);
            IDisposable subProgress1 = progress?.TrackPart(0.05f, 0.11f);

            using (AmbientProgressService.GlobalProgress?.TrackPart(0.05f, 0.07f))
            {
                token = AmbientProgressService.GlobalProgress?.CancellationToken ?? default(CancellationToken);
                Assert.IsFalse(token.IsCancellationRequested);
            }
        }
示例#10
0
        public void SubProgressCancellation()
        {
            IAmbientProgress progress = AmbientProgressService.Progress;

            progress?.ResetCancellation(); // make a new cancellation in case the source was canceled in this execution context during a previous test
            progress?.CancellationToken.ThrowIfCancellationRequested();
            using (progress?.TrackPart(0.0f, 1.0f))
            {
                IAmbientProgress subprogress = AmbientProgressService.Progress;
                using (AmbientClock.Pause())
                {
                    subprogress?.ResetCancellation(TimeSpan.FromMilliseconds(104));
                    AmbientCancellationTokenSource tokenSource = subprogress?.CancellationTokenSource;
                    Assert.IsNotNull(tokenSource);
                    Assert.IsFalse(tokenSource?.IsCancellationRequested ?? true);
                    AmbientClock.SkipAhead(TimeSpan.FromMilliseconds(106));
                    Assert.IsTrue(tokenSource?.IsCancellationRequested ?? false);
                    Assert.ThrowsException <OperationCanceledException>(() => AmbientProgressService.Progress?.ThrowIfCancelled());
                }
            }
        }
示例#11
0
        public void SubProgressCancellationTokenSource()
        {
            IAmbientProgress progress = AmbientProgressService.Progress;

            progress?.ResetCancellation(); // make a new cancellation in case the source was canceled in this execution context during a previous test
            using (progress?.TrackPart(0.0f, 1.0f))
            {
                IAmbientProgress subprogress = AmbientProgressService.Progress;
                using (AmbientClock.Pause())
                {
                    subprogress?.ResetCancellation(TimeSpan.FromMilliseconds(100));
                    AmbientCancellationTokenSource tokenSource = subprogress?.CancellationTokenSource;
                    Assert.IsNotNull(tokenSource);
                    Assert.IsFalse(tokenSource?.IsCancellationRequested ?? true);
                    Assert.AreEqual(tokenSource?.Token, subprogress?.CancellationToken);
                    AmbientClock.SkipAhead(TimeSpan.FromMilliseconds(100));
                    Assert.IsTrue(tokenSource?.IsCancellationRequested ?? false);
                    Assert.AreEqual(tokenSource?.Token, subprogress?.CancellationToken);
                    Assert.IsTrue(subprogress?.CancellationToken.IsCancellationRequested ?? false);

                    subprogress?.ResetCancellation(null);
                    AmbientCancellationTokenSource newTokenSource = subprogress?.CancellationTokenSource;
                    Assert.IsNotNull(newTokenSource);
                    Assert.IsFalse(newTokenSource?.IsCancellationRequested ?? true);
                    Assert.AreEqual(newTokenSource?.Token, subprogress?.CancellationToken);
                    AmbientClock.SkipAhead(TimeSpan.FromMilliseconds(100));
                    Assert.IsFalse(newTokenSource?.IsCancellationRequested ?? true);
                    Assert.IsTrue(newTokenSource?.Token.CanBeCanceled ?? false);
                    Assert.AreEqual(newTokenSource?.Token, subprogress?.CancellationToken);
                    Assert.IsFalse(subprogress?.CancellationToken.IsCancellationRequested ?? true);

                    subprogress?.Update(0.5f);
                    subprogress?.ThrowIfCancelled();
                }
            }
        }