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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值