📄 actionxmltest.java
字号:
public void testWriteNodeActionName() throws Exception {
ProcessDefinition processDefinition = new ProcessDefinition();
Node node = processDefinition.addNode( new Node() );
Delegation instantiatableDelegate = new Delegation();
instantiatableDelegate.setClassName("com.foo.Fighting");
node.setAction(new Action(instantiatableDelegate));
Element actionElement = AbstractXmlTestCase.toXmlAndParse( processDefinition, "/process-definition/node/action" );
assertNotNull(actionElement);
assertEquals("action", actionElement.getName());
assertEquals("com.foo.Fighting", actionElement.attributeValue("class"));
}
public void testReadNodeEnterAction() {
ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
"<process-definition>" +
" <node name='a'>" +
" <event type='node-enter'>" +
" <action class='org.foo.Burps'/>" +
" </event>" +
" </node>" +
"</process-definition>"
);
assertEquals("org.foo.Burps", ((Action)processDefinition.getNode("a").getEvent("node-enter").getActions().get(0)).getActionDelegation().getClassName());
}
public void testWriteNodeEnterAction() throws Exception {
ProcessDefinition processDefinition = new ProcessDefinition();
Node node = processDefinition.addNode( new Node() );
Delegation instantiatableDelegate = new Delegation();
instantiatableDelegate.setClassName("com.foo.Fighting");
node.addEvent(new Event("node-enter")).addAction(new Action(instantiatableDelegate));
Element element = AbstractXmlTestCase.toXmlAndParse( processDefinition, "/process-definition/node[1]/event[1]" );
assertNotNull(element);
assertEquals("event", element.getName());
assertEquals("node-enter", element.attributeValue("type"));
assertEquals(1, element.elements("action").size());
element = element.element("action");
assertNotNull(element);
assertEquals("action", element.getName());
assertEquals("com.foo.Fighting", element.attributeValue("class"));
}
public void testParseAndWriteOfNamedEventActions() throws Exception {
ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
"<process-definition>" +
" <node name='a'>" +
" <event type='node-enter'>" +
" <action name='burps' class='org.foo.Burps'/>" +
" </event>" +
" </node>" +
"</process-definition>"
);
Action burps = (Action)processDefinition.getNode("a").getEvent("node-enter").getActions().get(0);
assertSame(burps, processDefinition.getAction("burps"));
Element processDefinitionElement = toXmlAndParse( processDefinition, "/process-definition" );
assertEquals(0, processDefinitionElement.elements("action").size());
}
public void testParseStateAction() {
ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
"<process-definition>" +
" <state name='a'>" +
" <event type='node-enter'>" +
" <action class='org.foo.Burps' config-type='constructor-text'>" +
" this text should be passed in the constructor" +
" </action>" +
" </event>" +
" </state>" +
"</process-definition>"
);
Node node = processDefinition.getNode("a");
Event event = node.getEvent("node-enter");
Action action = (Action) event.getActions().iterator().next();
Delegation instantiatableDelegate = action.getActionDelegation();
assertEquals("org.foo.Burps", instantiatableDelegate.getClassName());
assertEquals("constructor-text", instantiatableDelegate.getConfigType());
assertTrue(instantiatableDelegate.getConfiguration().indexOf("this text should be passed in the constructor")!=-1 );
}
public void testParseTransitionAction() {
ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
"<process-definition>" +
" <state name='a'>" +
" <transition to='b'>" +
" <action class='org.foo.Burps'/>" +
" </transition>" +
" </state>" +
" <state name='b' />" +
"</process-definition>"
);
Node node = processDefinition.getNode("a");
assertEquals( 1, node.getLeavingTransitionsMap().size() );
Transition transition = node.getDefaultLeavingTransition();
Event event = transition.getEvent(Event.EVENTTYPE_TRANSITION);
Action action = (Action) event.getActions().iterator().next();
Delegation instantiatableDelegate = action.getActionDelegation();
assertEquals("org.foo.Burps", instantiatableDelegate.getClassName());
}
public void testParseReferencedAction() {
ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
"<process-definition>" +
" <node name='a'>" +
" <transition to='b'>" +
" <action ref-name='scratch'/>" +
" </transition>" +
" </node>" +
" <node name='b' />" +
" <action name='scratch' class='com.itch.Scratch' />" +
"</process-definition>"
);
Node node = processDefinition.getNode("a");
Transition transition = node.getDefaultLeavingTransition();
Event event = transition.getEvent(Event.EVENTTYPE_TRANSITION);
Action transitionAction = (Action) event.getActions().iterator().next();
Action processAction = processDefinition.getAction("scratch");
assertEquals("scratch", processAction.getName());
assertSame(processAction, transitionAction.getReferencedAction());
Delegation instantiatableDelegate = processAction.getActionDelegation();
assertEquals("com.itch.Scratch", instantiatableDelegate.getClassName());
}
public void testParseActionWithoutClass() {
StringReader stringReader = new StringReader(
"<process-definition>" +
" <node>" +
" <event type='node-enter'>" +
" <action />" +
" </event>" +
" </node>" +
"</process-definition>");
JpdlXmlReader jpdlReader = new JpdlXmlReader(stringReader);
jpdlReader.readProcessDefinition();
assertTrue(Problem.containsProblemsOfLevel(jpdlReader.problems, Problem.LEVEL_WARNING));
}
public void testParseActionWithInvalidReference() {
StringReader stringReader = new StringReader(
"<process-definition>" +
" <node>" +
" <event type='node-enter'>" +
" <action ref-name='non-existing-action-name'/>" +
" </event>" +
" </node>" +
"</process-definition>");
JpdlXmlReader jpdlReader = new JpdlXmlReader(stringReader);
jpdlReader.readProcessDefinition();
assertTrue(Problem.containsProblemsOfLevel(jpdlReader.problems, Problem.LEVEL_WARNING));
}
public void testWriteTransitionAction() throws Exception {
ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
"<process-definition>" +
" <state name='a'>" +
" <transition to='b' />" +
" </state>" +
" <state name='b' />" +
"</process-definition>"
);
Transition transition = processDefinition.getNode("a").getDefaultLeavingTransition();
Delegation instantiatableDelegate = new Delegation();
instantiatableDelegate.setClassName("com.foo.Fighting");
transition.addEvent(new Event(Event.EVENTTYPE_TRANSITION)).addAction(new Action(instantiatableDelegate));
Element element = AbstractXmlTestCase.toXmlAndParse( processDefinition, "/process-definition/state/transition" );
assertNotNull(element);
assertEquals("transition", element.getName());
assertEquals(1, element.elements("action").size());
element = element.element("action");
assertNotNull(element);
assertEquals("action", element.getName());
assertEquals("com.foo.Fighting", element.attributeValue("class"));
}
public void testWriteConfigurableAction() throws Exception {
ProcessDefinition processDefinition = new ProcessDefinition();
State state = (State) processDefinition.addNode( new State("a") );
Delegation instantiatableDelegate = new Delegation();
instantiatableDelegate.setClassName("com.foo.Fighting");
instantiatableDelegate.setConfigType("bean");
instantiatableDelegate.setConfiguration("<id>4</id><greeting>aloha</greeting>");
state.addEvent(new Event("node-enter")).addAction(new Action(instantiatableDelegate));
Element element = AbstractXmlTestCase.toXmlAndParse( processDefinition, "/process-definition/state[1]/event[1]/action[1]" );
assertNotNull(element);
assertEquals("action", element.getName());
assertEquals("bean", element.attributeValue("config-type"));
assertEquals("4", element.element("id").getTextTrim() );
assertEquals("aloha", element.element("greeting").getTextTrim() );
}
public void testWriteReferenceAction() throws Exception {
ProcessDefinition processDefinition = new ProcessDefinition();
// add a global action with name 'pina colada'
Delegation instantiatableDelegate = new Delegation();
instantiatableDelegate.setClassName("com.foo.Fighting");
instantiatableDelegate.setConfigType("bean");
instantiatableDelegate.setConfiguration("<id>4</id><greeting>aloha</greeting>");
Action action = new Action();
action.setName("pina colada");
action.setActionDelegation(instantiatableDelegate);
processDefinition.addAction(action);
// now create a reference to it from event node-enter on state 'a'
State state = (State) processDefinition.addNode( new State() );
Action refAction = new Action();
refAction.setReferencedAction(action);
state.addEvent(new Event(Event.EVENTTYPE_NODE_ENTER)).addAction(refAction);
AbstractXmlTestCase.toXmlAndParse( processDefinition, "/process-definition/state[1]/event[1]/action[1]" );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -