Observes the execution progress of IProgressController and visualizes it using the supplied IProgressVisualizer
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe. Any instance members are not guaranteed to be accessible from a non-UI threads.
Inheritance: IDisposable
Ejemplo n.º 1
0
        public static ProgressObserver StartObserving(IServiceProvider serviceProvider, IProgressEvents progressEvents, IProgressVisualizer visualizer, ProgressControllerViewModel state)
        {
            if (serviceProvider == null)
            {
                throw new ArgumentNullException(nameof(serviceProvider));
            }

            if (progressEvents == null)
            {
                throw new ArgumentNullException(nameof(progressEvents));
            }

            if (visualizer == null)
            {
                throw new ArgumentNullException(nameof(visualizer));
            }

            CheckSupportedProgressEvents(progressEvents);

            ProgressObserver observer = CreateAndConfigureInstance(serviceProvider, visualizer, progressEvents, null, state);

            Debug.Assert(observer != null, "Failed to create observer on the UI thread");

            return(observer);
        }
Ejemplo n.º 2
0
 private static ProgressObserver CreateAndConfigureInstance(IServiceProvider serviceProvider, IProgressVisualizer visualizer, IProgressEvents progressEvents, ICommand cancelCommand, ProgressControllerViewModel state)
 {
     return(VsThreadingHelper.RunInline(serviceProvider, VsTaskRunContext.UIThreadNormalPriority, () =>
     {
         ProgressObserver returnValue = new ProgressObserver(serviceProvider, visualizer, progressEvents, state);
         returnValue.CancelCommand = cancelCommand;
         return returnValue;
     }, null));
 }
        public void TestCleanup()
        {
            if (this.testSubject != null)
            {
                ((IDisposable)this.testSubject).Dispose();
                this.testSubject = null;
            }

            this.testVisualizer = null;
            this.testServiceProvider = null;
            this.progressEvents = null;
            this.threadService = null;
            this.testController = null;
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Stops the specified <see cref="ProgressObserver"/> from observing.
        /// The method is thread safe.
        /// </summary>
        /// <param name="observer">An existing <see cref="ProgressObserver"/> to stop observing with</param>
        public static void StopObserving(ProgressObserver observer)
        {
            if (observer == null)
            {
                throw new ArgumentNullException(nameof(observer));
            }

            if (observer.disposed)
            {
                return;
            }

            VsThreadingHelper.RunInline(observer.serviceProvider, VsTaskRunContext.UIThreadNormalPriority, () => ((IDisposable)observer).Dispose());
        }
Ejemplo n.º 5
0
        public static ProgressObserver StartObserving(IProgressController controller, IProgressVisualizer visualizer, ProgressControllerViewModel state)
        {
            if (controller == null)
            {
                throw new ArgumentNullException(nameof(controller));
            }

            if (visualizer == null)
            {
                throw new ArgumentNullException(nameof(visualizer));
            }

            CheckSupportedController(controller);
            ProgressObserver observer = CreateAndConfigureInstance((IServiceProvider)controller, visualizer, controller.Events, new RelayCommand((s) => controller.TryAbort()), state);

            Debug.Assert(observer != null, "Failed to create observer on the UI thread");

            return(observer);
        }
 private static ProgressObserver CreateAndConfigureInstance(IServiceProvider serviceProvider, IProgressVisualizer visualizer, IProgressEvents progressEvents, ICommand cancelCommand, ProgressControllerViewModel state)
 {
     return VsThreadingHelper.RunInline(serviceProvider, VsTaskRunContext.UIThreadNormalPriority, () =>
     {
         ProgressObserver returnValue = new ProgressObserver(serviceProvider, visualizer, progressEvents, state);
         returnValue.CancelCommand = cancelCommand;
         return returnValue;
     }, null);
 }
        /// <summary>
        /// Stops the specified <see cref="ProgressObserver"/> from observing.
        /// The method is thread safe.
        /// </summary>
        /// <param name="observer">An existing <see cref="ProgressObserver"/> to stop observing with</param>
        public static void StopObserving(ProgressObserver observer)
        {
            if (observer == null)
            {
                throw new ArgumentNullException(nameof(observer));
            }

            if (observer.disposed)
            {
                return;
            }

            VsThreadingHelper.RunInline(observer.serviceProvider, VsTaskRunContext.UIThreadNormalPriority, () => ((IDisposable)observer).Dispose());
        }
        public void ProgressObserver_StartAndStopObserving_OnForegroundThread()
        {
            this.threadService.SetCurrentThreadIsUIThread(true);

            this.testSubject = ProgressObserver.StartObserving(this.testController, this.testVisualizer);
            Assert.AreSame(this.testVisualizer, this.testSubject.Visualizer, "Unexpected visualizer");
            Assert.IsNotNull(this.testSubject, "Failed to create observer on a foreground thread");

            Assert.IsFalse(this.testSubject.IsDisposed, "Not expecting to be disposed");
            ProgressObserver.StopObserving(this.testSubject);
            Assert.AreSame(this.testVisualizer, this.testSubject.Visualizer, "Unexpected visualizer");
            Assert.IsTrue(this.testSubject.IsDisposed, "Expecting to be disposed");
        }
            public ExecutionVerifier(IProgressVisualizer visualizer, ProgressObserver testSubject)
            {
                Assert.IsNotNull(visualizer != null, "IProgressVisualizer is expected");
                Assert.IsNotNull(testSubject != null, "ProgressObserver is expected");

                this.visualizer = visualizer;
                this.testSubject = testSubject;
            }
 private void CreateTestSubject(ProgressControllerViewModel state = null)
 {
     this.testSubject = new ProgressObserver(this.testServiceProvider, this.testVisualizer, this.progressEvents, state);
     this.VerifyNonDisposedAndRegistered();
 }
 private static void VerifyExecutionGroup(ProgressObserver.ExecutionGroup group, IEnumerable<IProgressStep> orderedStepsInGroup)
 {
     Assert.AreEqual(orderedStepsInGroup.Count(), group.Steps.Count, "Unexpected number of actual steps in group");
     int i = 0;
     foreach (IProgressStep step in orderedStepsInGroup)
     {
         Assert.AreSame(step, group.Steps[i++], "Unexpected step in group");
     }
 }
        public void ProgressObserver_StartObserving_DontConfiguresCancelCommand()
        {
            // Execute
            this.testSubject = ProgressObserver.StartObserving(this.testServiceProvider, this.progressEvents, this.testVisualizer);

            // Verify
            Assert.IsNull(this.testSubject.CancelCommand, "CancelCommand should not be set");
        }
        public void ProgressObserver_StartObserving_ConfiguresCancelCommand()
        {
            bool aborted = false;
            this.testController.TryAbortAction = () =>
            {
                aborted = true;
                return true;
            };

            this.testSubject = ProgressObserver.StartObserving(this.testController, this.testVisualizer);
            Assert.IsNotNull(this.testSubject.CancelCommand, "CancelCommand should be set");
            this.testSubject.CancelCommand.Execute(null);
            Assert.IsTrue(aborted, "TryAbort was configured to be called by the CancelCommand");
        }
        public void ProgressObserver_StopObserving_Twice()
        {
            this.testSubject = ProgressObserver.StartObserving(this.testController, this.testVisualizer);

            ProgressObserver.StopObserving(this.testSubject);
            Assert.IsTrue(this.testSubject.IsDisposed, "Expecting to be disposed");

            ProgressObserver.StopObserving(this.testSubject);
            Assert.IsTrue(this.testSubject.IsDisposed, "Expecting to remain disposed");
        }