package org.activiti.editor.language.xml;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import org.activiti.bpmn.exceptions.XMLException;
import org.activiti.bpmn.model.BpmnModel;
import org.activiti.bpmn.model.FlowElement;
import org.activiti.bpmn.model.ServiceTask;
import org.junit.Test;
public class MapExceptionConverterTest extends AbstractConverterTest {
String resourceName;
protected String getResource() {
return resourceName;
}
@Test
public void testMapExceptionWithInvalidHasChildren() throws Exception {
resourceName = "mapException/mapExceptionInvalidHasChildrenModel.bpmn";
try {
BpmnModel bpmnModel = readXMLFile();
fail("No exception is thrown for mapExecution with invalid boolean for hasChildren");
} catch (XMLException x) {
assertTrue(x.getMessage().indexOf("is not valid boolean") != -1);
} catch (Exception e) {
fail("wrong exception thrown. XmlException expected, " + e.getClass() + " thrown");
}
}
@Test
public void testMapExceptionWithNoErrorCode() throws Exception {
resourceName = "mapException/mapExceptionNoErrorCode.bpmn";
try {
BpmnModel bpmnModel = readXMLFile();
fail("No exception is thrown for mapExecution with no Error Code");
} catch (XMLException x) {
assertTrue(x.getMessage().indexOf("No errorCode defined") != -1);
} catch (Exception e) {
fail("wrong exception thrown. XmlException expected, " + e.getClass() + " thrown");
}
}
@Test
public void testMapExceptionWithNoExceptionClass() throws Exception {
resourceName = "mapException/mapExceptionNoExceptionClass.bpmn";
BpmnModel bpmnModel = readXMLFile();
FlowElement flowElement = bpmnModel.getMainProcess().getFlowElement("servicetaskWithAndTrueAndChildren");
assertNotNull(flowElement);
assertTrue(flowElement instanceof ServiceTask);
assertEquals("servicetaskWithAndTrueAndChildren", flowElement.getId());
ServiceTask serviceTask = (ServiceTask) flowElement;
assertNotNull(serviceTask.getMapExceptions());
assertEquals(1, serviceTask.getMapExceptions().size());
assertNotNull(serviceTask.getMapExceptions().get(0).getClassName());
assertEquals(0, serviceTask.getMapExceptions().get(0).getClassName().length());
}
@Test
public void connvertXMLToModel() throws Exception {
resourceName = "mapException/mapExceptionModel.bpmn";
BpmnModel bpmnModel = readXMLFile();
validateModel(bpmnModel);
}
private void validateModel(BpmnModel model) {
// check service task with andChildren Set to True
FlowElement flowElement = model.getMainProcess().getFlowElement("servicetaskWithAndTrueAndChildren");
assertNotNull(flowElement);
assertTrue(flowElement instanceof ServiceTask);
assertEquals("servicetaskWithAndTrueAndChildren", flowElement.getId());
ServiceTask serviceTask = (ServiceTask) flowElement;
assertNotNull(serviceTask.getMapExceptions());
assertEquals(3, serviceTask.getMapExceptions().size());
// check a normal mapException, with hasChildren == true
assertEquals("myErrorCode1", serviceTask.getMapExceptions().get(0).getErrorCode());
assertEquals("com.activiti.Something1", serviceTask.getMapExceptions().get(0).getClassName());
assertTrue(serviceTask.getMapExceptions().get(0).isAndChildren());
// check a normal mapException, with hasChildren == false
assertEquals("myErrorCode2", serviceTask.getMapExceptions().get(1).getErrorCode());
assertEquals("com.activiti.Something2", serviceTask.getMapExceptions().get(1).getClassName());
assertFalse(serviceTask.getMapExceptions().get(1).isAndChildren());
// check a normal mapException, with no hasChildren Defined, default should
// be false
assertEquals("myErrorCode3", serviceTask.getMapExceptions().get(2).getErrorCode());
assertEquals("com.activiti.Something3", serviceTask.getMapExceptions().get(2).getClassName());
assertFalse(serviceTask.getMapExceptions().get(2).isAndChildren());
// if no map exception is defined, getMapException should return a not null
// empty list
FlowElement flowElement1 = model.getMainProcess().getFlowElement("servicetaskWithNoMapException");
assertNotNull(flowElement1);
assertTrue(flowElement1 instanceof ServiceTask);
assertEquals("servicetaskWithNoMapException", flowElement1.getId());
ServiceTask serviceTask1 = (ServiceTask) flowElement1;
assertNotNull(serviceTask1.getMapExceptions());
assertEquals(0, serviceTask1.getMapExceptions().size());
}
}