package com.rcpcompany.test.utils;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.eclipse.core.runtime.IProgressMonitor;
import com.rcpcompany.utils.logging.LogUtils;
/**
* Test {@link IProgressMonitor}.
*
* @author Tonny Madsen, tonny.madsen@gmail.com
*/
public class MonitoredMonitor implements IProgressMonitor {
public MonitoredMonitor() {
this(false);
}
public MonitoredMonitor(boolean sysout) {
doSysout = sysout;
myPrefix = getClass().getSimpleName() + "@" + System.identityHashCode(this);
}
private final String myPrefix;
MonitorState myState = MonitorState.INIT;
private int myTotalWork;
private int myWorkDone = 0;
private boolean myCanceled = false;
private int mySubTasks = 0;
private final boolean doSysout;
enum MonitorState {
INIT, OPEN, DONE
}
@Override
public void beginTask(String name, int totalWork) {
assertEquals(MonitorState.INIT, myState);
myState = MonitorState.OPEN;
myTotalWork = totalWork;
if (doSysout) {
LogUtils.debug(this, myPrefix + ": '" + name + "' (" + totalWork + ")");
}
}
public void checkOK() {
assertEquals(MonitorState.DONE, myState);
}
@Override
public void done() {
assertEquals(MonitorState.OPEN, myState);
myState = MonitorState.DONE;
if (doSysout) {
LogUtils.debug(this, myPrefix);
}
}
@Override
public void internalWorked(double work) {
assertEquals(MonitorState.OPEN, myState);
}
@Override
public boolean isCanceled() {
return myCanceled;
}
@Override
public void setCanceled(boolean value) {
myCanceled = value;
}
@Override
public void setTaskName(String name) {
if (doSysout) {
LogUtils.debug(this, myPrefix + ": '" + name + "'");
}
assertEquals(MonitorState.OPEN, myState);
}
@Override
public void subTask(String name) {
if (doSysout) {
LogUtils.debug(this, myPrefix + ": '" + name + "'");
}
mySubTasks++;
assertEquals(MonitorState.OPEN, myState);
}
@Override
public void worked(int work) {
assertEquals(MonitorState.OPEN, myState);
myWorkDone += work;
if (myTotalWork != IProgressMonitor.UNKNOWN) {
assertTrue(myWorkDone <= myTotalWork);
}
if (doSysout) {
LogUtils.debug(this, myPrefix + ": " + myWorkDone + "/"
+ (myTotalWork == IProgressMonitor.UNKNOWN ? "unknown" : "" + myTotalWork));
}
}
public int getSubTasks() {
return mySubTasks;
}
}