/** * Copyright (c) 2014 - 2017 Frank Appel * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Frank Appel - initial API and implementation */ package com.codeaffine.eclipse.ui.progress; import static org.assertj.core.api.Assertions.assertThat; import static org.eclipse.core.runtime.Status.CANCEL_STATUS; import static org.eclipse.core.runtime.Status.OK_STATUS; import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import org.eclipse.core.runtime.jobs.IJobChangeEvent; import org.eclipse.core.runtime.jobs.IJobChangeListener; import org.junit.Before; import org.junit.Test; public class ClearJobPDETest { private JobHelper jobHelper; private IJobChangeListener listener; private CompletionObserverList observers; private ViewerAdapter viewerAdapter; private PendingUpdatePlaceHolder placeholder; private ClearJob clearJob; @Before public void setUp() { listener = mock( IJobChangeListener.class ); observers = createCompletionObserverList( listener ); viewerAdapter = mock( ViewerAdapter.class ); placeholder = new PendingUpdatePlaceHolder(); clearJob = new ClearJob( observers, viewerAdapter, placeholder ); jobHelper = new JobHelper( clearJob ); } @Test public void initialization() { assertThat( clearJob.isSystem() ).isTrue(); assertThat( clearJob.isUser() ).isFalse(); } @Test public void schedule() { clearJob.schedule(); jobHelper.waitTillJobHasFinished(); verify( viewerAdapter ).remove( placeholder ); verify( listener ).done( any( IJobChangeEvent.class ) ); assertThat( placeholder.isRemoved() ).isTrue(); assertThat( clearJob.getResult() ).isSameAs( OK_STATUS ); } @Test public void scheduleIfViewerAdapterIsDisposed() { when( viewerAdapter.isDisposed() ).thenReturn( true ); clearJob.schedule(); jobHelper.waitTillJobHasFinished(); verify( viewerAdapter, never() ).remove( placeholder ); verify( listener).done( any( IJobChangeEvent.class ) ); assertThat( placeholder.isRemoved() ).isFalse(); assertThat( clearJob.getResult() ).isSameAs( CANCEL_STATUS ); } @Test public void scheduleIfPlaceHolderHasBeenRemoved() { placeholder.setRemoved( true ); clearJob.schedule(); jobHelper.waitTillJobHasFinished(); verify( viewerAdapter, never() ).remove( placeholder ); verify( listener).done( any( IJobChangeEvent.class ) ); assertThat( placeholder.isRemoved() ).isTrue(); assertThat( clearJob.getResult() ).isSameAs( CANCEL_STATUS ); } private static CompletionObserverList createCompletionObserverList( IJobChangeListener listener ) { CompletionObserverList result = new CompletionObserverList(); result.add( listener ); return result; } }