package org.marketcetera.module;
import org.marketcetera.util.misc.ClassVersion;
import static org.junit.Assert.*;
import static org.marketcetera.module.ModuleState.*;
import org.junit.Test;
import java.util.Set;
import java.util.HashSet;
import java.util.EnumSet;
/* $License$ */
/**
* Tests various aspects of {@link ModuleState}
*
* @author anshul@marketcetera.com
*/
@ClassVersion("$Id: ModuleStateTest.java 16154 2012-07-14 16:34:05Z colin $")
public class ModuleStateTest extends ModuleTestBase {
/**
* Tests attributes of various module states.
*/
@Test
public void states() {
assertModuleState(CREATED, true, false, false, false, false, false, true);
assertModuleState(STARTED, false, true, true, true, true, true, false);
assertModuleState(STARTING, false, false, true, false, false, false, false);
assertModuleState(START_FAILED, true, false, false, false, false, false, true);
assertModuleState(STOPPING, false, false, false, false, true, false, false);
assertModuleState(STOP_FAILED, false, true, true, true, true, true, false);
assertModuleState(STOPPED, true, false, false, false, false, false, true);
assertTrue("All states not tested",mAllValues.isEmpty());
}
/**
* Verifies the supplied ModuleState instance.
*
* @param inState the module state value
* @param inCanStart if the module can be started from this state
* @param inStarted if the module is considered started in this state
* @param inRequest if the module can request data flows in this state
* @param inParticipate if the module can participate in data flows
* in this state
* @param inCancel if the moduel can cancel data flows in this state.
* @param inCanStop if the module can stop data flows in this state.
* @param inCanDelete if the module can be deleted in this state.
*/
private void assertModuleState(ModuleState inState,
boolean inCanStart,
boolean inStarted,
boolean inRequest,
boolean inParticipate,
boolean inCancel,
boolean inCanStop,
boolean inCanDelete) {
assertEquals(inCanStart, inState.canBeStarted());
assertEquals(inCanStart, STARTABLE_STATES.contains(inState));
assertEquals(inStarted, inState.isStarted());
assertEquals(inStarted, STARTED_STATES.contains(inState));
assertEquals(inRequest, inState.canRequestFlows());
assertEquals(inRequest, REQUEST_FLOW_STATES.contains(inState));
assertEquals(inParticipate, inState.canParticipateFlows());
assertEquals(inParticipate, PARTICIPATE_FLOW_STATES.contains(inState));
assertEquals(inCancel, inState.canCancelFlows());
assertEquals(inCancel, CANCEL_FLOW_STATES.contains(inState));
assertEquals(inCanStop, inState.canBeStopped());
assertEquals(inCanStop, STOPPABLE_STATES.contains(inState));
assertEquals(inCanDelete, inState.canBeDeleted());
assertEquals(inCanDelete, DELETABLE_STATES.contains(inState));
mAllValues.remove(inState);
}
private final Set<ModuleState> mAllValues = new HashSet<ModuleState>(EnumSet.allOf(ModuleState.class));
}