package org.jbpm.examples.door;
import org.jbpm.AbstractJbpmTestCase;
import org.jbpm.JbpmException;
import org.jbpm.graph.def.Node;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.graph.exe.Token;
public class DoorProcessTest extends AbstractJbpmTestCase {
/**
* The doorProcess is a reference to the single ProcessDefinition that will be used for all
* executions in all the tests of this test case.
*
* In this case, we'll just store the process definition object in memory in a static member
* field. In practice, most often process definitions will be deployed to a database.
*/
static ProcessDefinition doorProcess;
static Node locked, closed, open, openLocked;
static {
doorProcess = ProcessDefinition.parseXmlInputStream(DoorProcessTest.class.getResourceAsStream("/door/processdefinition.xml"));
locked = doorProcess.getNode("Locked");
closed = doorProcess.getNode("Closed");
open = doorProcess.getNode("Open");
openLocked = doorProcess.getNode("Open Locked");
}
/**
* This test shows how you can execute one scenario in a test method. Inside the test method, the
* external triggers (=signals) are provided to a process instance. Then you assert wether the
* process instance ends up in the expected state.
*/
public void testScenarioOne() {
ProcessInstance processInstance = new ProcessInstance(doorProcess);
Token token = processInstance.getRootToken();
assertEquals("Closed", token.getNode().getName());
token.signal("open");
assertEquals("Open", token.getNode().getName());
token.signal("close");
assertEquals("Closed", token.getNode().getName());
try {
token.signal("unlock");
fail("excepted exception");
}
catch (RuntimeException e) {
}
}
// Below are all the simple state-change tests.
// Note that you can actually put a token into a given state with
// the setNode method.
public void testClosedOpen() {
ProcessInstance processInstance = new ProcessInstance(doorProcess);
Token token = processInstance.getRootToken();
token.signal("open");
assertEquals("Open", token.getNode().getName());
}
public void testClosedLock() {
ProcessInstance processInstance = new ProcessInstance(doorProcess);
Token token = processInstance.getRootToken();
token.signal("lock");
assertEquals("Locked", token.getNode().getName());
}
public void testClosedClose() {
ProcessInstance processInstance = new ProcessInstance(doorProcess);
Token token = processInstance.getRootToken();
try {
token.signal("close");
fail("expected exception");
}
catch (JbpmException e) {
}
}
public void testClosedUnlock() {
ProcessInstance processInstance = new ProcessInstance(doorProcess);
Token token = processInstance.getRootToken();
try {
token.signal("unlock");
fail("expected exception");
}
catch (JbpmException e) {
}
}
public void testOpenedOpen() {
ProcessInstance processInstance = new ProcessInstance(doorProcess);
Token token = processInstance.getRootToken();
token.setNode(open);
try {
token.signal("open");
fail("expected exception");
}
catch (JbpmException e) {
}
}
public void testOpenedLock() {
ProcessInstance processInstance = new ProcessInstance(doorProcess);
Token token = processInstance.getRootToken();
token.setNode(open);
token.signal("lock");
assertEquals("Open Locked", token.getNode().getName());
}
public void testOpenedClose() {
ProcessInstance processInstance = new ProcessInstance(doorProcess);
Token token = processInstance.getRootToken();
token.setNode(open);
token.signal("close");
assertEquals("Closed", token.getNode().getName());
}
public void testOpenedUnlock() {
ProcessInstance processInstance = new ProcessInstance(doorProcess);
Token token = processInstance.getRootToken();
token.setNode(open);
try {
token.signal("unlock");
fail("expected exception");
}
catch (JbpmException e) {
}
}
public void testLockedOpen() {
ProcessInstance processInstance = new ProcessInstance(doorProcess);
Token token = processInstance.getRootToken();
token.setNode(locked);
try {
token.signal("open");
fail("expected exception");
}
catch (JbpmException e) {
}
}
public void testLockedLock() {
ProcessInstance processInstance = new ProcessInstance(doorProcess);
Token token = processInstance.getRootToken();
token.setNode(locked);
try {
token.signal("lock");
fail("expected exception");
}
catch (JbpmException e) {
}
}
public void testLockedClose() {
ProcessInstance processInstance = new ProcessInstance(doorProcess);
Token token = processInstance.getRootToken();
token.setNode(locked);
try {
token.signal("close");
fail("expected exception");
}
catch (JbpmException e) {
}
}
public void testLockedUnlock() {
ProcessInstance processInstance = new ProcessInstance(doorProcess);
Token token = processInstance.getRootToken();
token.setNode(locked);
token.signal("unlock");
assertEquals("Closed", token.getNode().getName());
}
public void testOpenLockedOpen() {
ProcessInstance processInstance = new ProcessInstance(doorProcess);
Token token = processInstance.getRootToken();
token.setNode(openLocked);
try {
token.signal("open");
fail("expected exception");
}
catch (JbpmException e) {
}
}
public void testOpenLockedLock() {
ProcessInstance processInstance = new ProcessInstance(doorProcess);
Token token = processInstance.getRootToken();
token.setNode(openLocked);
try {
token.signal("lock");
fail("expected exception");
}
catch (JbpmException e) {
}
}
public void testOpenLockedClose() {
ProcessInstance processInstance = new ProcessInstance(doorProcess);
Token token = processInstance.getRootToken();
token.setNode(openLocked);
try {
token.signal("close");
fail("expected exception");
}
catch (JbpmException e) {
}
}
public void testOpenLockedUnlock() {
ProcessInstance processInstance = new ProcessInstance(doorProcess);
Token token = processInstance.getRootToken();
token.setNode(openLocked);
token.signal("unlock");
assertEquals("Open", token.getNode().getName());
}
}