View | Details | Raw Unified | Return to bug 200997 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/core/tests/runtime/jobs/JobTest.java (-1 / +32 lines)
Lines 393-399 Link Here
393
		barrier.waitForStatus(TestBarrier.STATUS_WAIT_FOR_RUN);
393
		barrier.waitForStatus(TestBarrier.STATUS_WAIT_FOR_RUN);
394
		assertTrue("1.0", !canceling[0]);
394
		assertTrue("1.0", !canceling[0]);
395
		job.cancel();
395
		job.cancel();
396
		assertTrue("1.0", canceling[0]);
396
		assertTrue("1.1", canceling[0]);
397
		//let the job finish
398
		barrier.setStatus(TestBarrier.STATUS_RUNNING);
399
		waitForState(job, Job.NONE);
400
	}
401
402
	/**
403
	 * Tests the hook method {@link Job#canceling}.
404
	 */
405
	public void testCancelingByMonitor() {
406
		final TestBarrier barrier = new TestBarrier();
407
		barrier.setStatus(TestBarrier.STATUS_WAIT_FOR_START);
408
		final boolean[] canceling = new boolean[] {false};
409
		final IProgressMonitor[] jobmonitor = new IProgressMonitor[1];
410
		Job job = new Job("Testing#testCancelingByMonitor") {
411
			protected void canceling() {
412
				canceling[0] = true;
413
			}
414
415
			protected IStatus run(IProgressMonitor monitor) {
416
				jobmonitor[0] = monitor;
417
				barrier.setStatus(TestBarrier.STATUS_WAIT_FOR_RUN);
418
				barrier.waitForStatus(TestBarrier.STATUS_RUNNING);
419
				return Status.OK_STATUS;
420
			}
421
		};
422
		//schedule the job and wait on the barrier until it is running
423
		job.schedule();
424
		barrier.waitForStatus(TestBarrier.STATUS_WAIT_FOR_RUN);
425
		assertTrue("1.0", !canceling[0]);
426
		jobmonitor[0].setCanceled(true);
427
		assertTrue("1.1", canceling[0]);
397
		//let the job finish
428
		//let the job finish
398
		barrier.setStatus(TestBarrier.STATUS_RUNNING);
429
		barrier.setStatus(TestBarrier.STATUS_RUNNING);
399
		waitForState(job, Job.NONE);
430
		waitForState(job, Job.NONE);
(-)src/org/eclipse/core/internal/jobs/JobManager.java (-2 / +9 lines)
Lines 377-388 Link Here
377
	/**
377
	/**
378
	 * Returns a new progress monitor for this job.  Never returns null.
378
	 * Returns a new progress monitor for this job.  Never returns null.
379
	 */
379
	 */
380
	private IProgressMonitor createMonitor(Job job) {
380
	private IProgressMonitor createMonitor(final Job job) {
381
		IProgressMonitor monitor = null;
381
		IProgressMonitor monitor = null;
382
		if (progressProvider != null)
382
		if (progressProvider != null)
383
			monitor = progressProvider.createMonitor(job);
383
			monitor = progressProvider.createMonitor(job);
384
		if (monitor == null)
384
		if (monitor == null)
385
			monitor = new NullProgressMonitor();
385
			monitor = new NullProgressMonitor() {
386
				public void setCanceled(boolean canceled) {
387
					if (canceled && !isCanceled()) {
388
						super.setCanceled(true);
389
						job.cancel();
390
					}
391
				}
392
			};
386
		return monitor;
393
		return monitor;
387
	}
394
	}
388
395

Return to bug 200997