예제 #1
0
 public void LastResult_BeforeExternalWork_IsFalse()
 {
     using (var sut = new AbortableWorker(() => true))
     {
         sut.Start();
         Assert.False(sut.LastRunResult);
     }
 }
예제 #2
0
        public void Abort_WithTimeout_AbortsWithoutException()
        {
            using (var sut = new AbortableWorker(() => { Thread.Sleep(60000); return true; }))
            {
                sut.Start();
                sut.ResumeWork();
                sut.Abort(400);
                sut.ThreadInstance.Join();

                Assert.True(sut.Aborted);
            }
        }
예제 #3
0
        public RuningTestForm(List <Test> tests)
        {
            InitializeComponent();
            this.tests                        = tests;
            worker                            = new AbortableWorker();
            worker.DoWork                    += DoWork;
            worker.ProgressChanged           += ProgressChanged;
            worker.RunWorkerCompleted        += WorkerCompleted;
            worker.WorkerReportsProgress      = true;
            worker.WorkerSupportsCancellation = true;

            worker.RunWorkerAsync();
        }
예제 #4
0
        /// <summary>
        /// Form closing event
        /// </summary>
        private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            //If any workers are running, display a prompt
            AbortableWorker worker = this.wokers.Find(w => w.IsBusy);

            if (worker != null)
            {
                //Display prompt
                DialogResult prompt = MessageBox.Show(this, "The simulation is still running in the background, are you sure you want to close the form now?",
                                                      "Simulation running!", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2);

                switch (prompt)
                {
                //If user continues to close, abort working thread
                case DialogResult.Yes:
                    worker.Abort(); break;

                //Else cancel closing event
                case DialogResult.No:
                    e.Cancel = true; break;
                }
            }
        }
예제 #5
0
 public void LastResult_ExternalWorkReturnedFalse_IsFalse()
 {
     using (var sut = new AbortableWorker(() => false))
     {
         sut.Start();
         sut.ResumeWork();
         sut.WaitForWorkDone();
         Assert.False(sut.LastRunResult);
     }
 }
예제 #6
0
 public void WorkDelegate_IsNotCalledBeforeDoWork()
 {
     var workMock = PrepareExternalWorkMock();
     using (var sut = new AbortableWorker(workMock.Object.DoWork))
     {
         sut.Start();
         while (!sut.IsWaiting) Thread.Sleep(10);
     }
     workMock.Verify(x => x.DoWork(), Times.Never());
 }
예제 #7
0
 public void WorkDelegate_IsCalledOnceOnDoWork()
 {
     var workMock = PrepareExternalWorkMock();
     using (var sut = new AbortableWorker(workMock.Object.DoWork))
     {
         sut.Start();
         sut.ResumeWork();
         sut.WaitForWorkDone(Timeout.Infinite);
     }
     workMock.Verify(x => x.DoWork(), Times.Once());
 }
예제 #8
0
        public void OnDoWorkFalse_Aborts()
        {
            var workMock = PrepareExternalWorkMock(0);
            using (var sut = new AbortableWorker(workMock.Object.DoWork))
            {
                sut.Start();
                sut.ResumeWork();
                sut.WaitForWorkDone(Timeout.Infinite);

                Assert.True(sut.ThreadInstance.Join(Timeout.Infinite));
            }
        }