分享

DecisionExpressionTest(Jbpm)

 夜郎 2008-09-02

DecisionExpressionTest(Jbpm)

package org.jbpm.jpdl.el;
import junit.framework.TestCase;
import org.jbpm.JbpmException;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
public class DecisionExpressionTest extends TestCase {
public static class Customer {
String priority;
int number;
public Customer(String priority) {
this.priority = priority;
}
public Customer(int number) {
this.number = number;
}
public String getPriority() {
return priority;
}
public int getNumber() {
return number;
}
}
public ProcessDefinition createCustomerPriorityProcess() {
return ProcessDefinition.parseXmlString(
"<process-definition>" +
"  <start-state>" +
"    <transition to=‘d‘/>" +
"  </start-state>" +
"  <decision name=‘d‘ expression=‘#{customer.priority}‘>" +
"    <transition name=‘LOW‘ to=‘l‘ />" +
"    <transition name=‘MEDIUM‘ to=‘m‘ />" +
"    <transition name=‘HIGH‘ to=‘h‘ />" +
"  </decision>" +
"  <state name=‘l‘ />" +
"  <state name=‘m‘ />" +
"  <state name=‘h‘ />" +
"</process-definition>"
);
}
public void testCustomerPriorityLow() {
ProcessDefinition processDefinition = createCustomerPriorityProcess();
ProcessInstance processInstance = new ProcessInstance(processDefinition);
processInstance.getContextInstance().setVariable("customer", new Customer("LOW"));
processInstance.signal();
assertEquals("l", processInstance.getRootToken().getNode().getName());
}
public void testCustomerPriorityMedium() {
ProcessDefinition processDefinition = createCustomerPriorityProcess();
ProcessInstance processInstance = new ProcessInstance(processDefinition);
processInstance.getContextInstance().setVariable("customer", new Customer("MEDIUM"));
processInstance.signal();
assertEquals("m", processInstance.getRootToken().getNode().getName());
}
public void testCustomerPriorityUndefined() {
ProcessDefinition processDefinition = createCustomerPriorityProcess();
ProcessInstance processInstance = new ProcessInstance(processDefinition);
processInstance.getContextInstance().setVariable("customer", new Customer("UNDEFINED"));
try {
processInstance.signal();
fail("expected exception");
} catch (JbpmException e) {
assertTrue(e.getMessage().indexOf("non existing transition")!=-1);
// OK
}
}
public void testCustomerPriorityNull() {
ProcessDefinition processDefinition = createCustomerPriorityProcess();
ProcessInstance processInstance = new ProcessInstance(processDefinition);
processInstance.getContextInstance().setVariable("customer", new Customer(null));
try {
processInstance.signal();
fail("expected exception");
} catch (JbpmException e) {
// OK
}
}
public ProcessDefinition createBooleanExpressionProcess() {
return ProcessDefinition.parseXmlString(
"<process-definition>" +
"  <start-state>" +
"    <transition to=‘d‘/>" +
"  </start-state>" +
"  <decision name=‘d‘ expression=‘#{customer.number > 5}‘>" +
"    <transition name=‘true‘ to=‘high-numbered-customer‘ />" +
"    <transition name=‘false‘ to=‘low-numbered-customer‘ />" +
"  </decision>" +
"  <state name=‘high-numbered-customer‘ />" +
"  <state name=‘low-numbered-customer‘ />" +
"</process-definition>"
);
}
public void testBooleanExpressionTrue() {
ProcessDefinition processDefinition = createBooleanExpressionProcess();
ProcessInstance processInstance = new ProcessInstance(processDefinition);
processInstance.getContextInstance().setVariable("customer", new Customer(9));
processInstance.signal();
assertEquals("high-numbered-customer", processInstance.getRootToken().getNode().getName());
}
public void testBooleanExpressionFalse() {
ProcessDefinition processDefinition = createBooleanExpressionProcess();
ProcessInstance processInstance = new ProcessInstance(processDefinition);
processInstance.getContextInstance().setVariable("customer", new Customer(3));
processInstance.signal();
assertEquals("low-numbered-customer", processInstance.getRootToken().getNode().getName());
}
public ProcessDefinition createConditionProcess() {
return ProcessDefinition.parseXmlString(
"<process-definition>" +
"  <start-state>" +
"    <transition to=‘d‘/>" +
"  </start-state>" +
"  <decision name=‘d‘>" +
"    <transition to=‘high-numbered-customer‘>" +
"      <condition  expression=‘#{customer.number > 5}‘ />" +
"    </transition>" +
"    <transition to=‘medium-numbered-customer‘>" +
"      <condition expression=‘#{customer.number == 5}‘ />" +
"    </transition>" +
"    <transition to=‘low-numbered-customer‘ />" +
"  </decision>" +
"  <state name=‘high-numbered-customer‘ />" +
"  <state name=‘medium-numbered-customer‘ />" +
"  <state name=‘low-numbered-customer‘ />" +
"</process-definition>"
);
}
public void testConditionHigh() {
ProcessDefinition processDefinition = createConditionProcess();
ProcessInstance processInstance = new ProcessInstance(processDefinition);
processInstance.getContextInstance().setVariable("customer", new Customer(9));
processInstance.signal();
assertEquals("high-numbered-customer", processInstance.getRootToken().getNode().getName());
}
public void testConditionMedium() {
ProcessDefinition processDefinition = createConditionProcess();
ProcessInstance processInstance = new ProcessInstance(processDefinition);
processInstance.getContextInstance().setVariable("customer", new Customer(5));
processInstance.signal();
assertEquals("high-numbered-customer", processInstance.getRootToken().getNode().getName());
}
public void testConditionLow() {
ProcessDefinition processDefinition = createConditionProcess();
ProcessInstance processInstance = new ProcessInstance(processDefinition);
processInstance.getContextInstance().setVariable("customer", new Customer(3));
processInstance.signal();
assertEquals("high-numbered-customer", processInstance.getRootToken().getNode().getName());
}
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多