package de.uniba.dsg.bpmnspector.schematron.descriptive; import api.ValidationResult; import api.ValidationException; import api.Violation; import de.uniba.dsg.bpmnspector.schematron.TestCase; import org.junit.Test; /** * Test class for testing Constraint EXT.031 * * @author Philipp Neugebauer * @version 1.0 * */ public class Ext031 extends TestCase { private final static String ERRORMESSAGE = "A message flow must connect 'InteractionNodes' from different Pools"; private final static String XPATHSTRING = "//bpmn:messageFlow[0]"; @Test public void testConstraintCircleFail() throws ValidationException { ValidationResult result = verifyInvalidResult( createFile("Fail_circle.bpmn"), 1); assertFirstViolation(result.getViolations().get(0)); } @Test public void testConstraintFromPoolFail() throws ValidationException { ValidationResult result = verifyInvalidResult( createFile("Fail_message_flow_from_pool.bpmn"), 2); assertFirstViolation(result.getViolations().get(0)); assertTargetViolation(result.getViolations().get(1)); } @Test public void testConstraintToPoolFail() throws ValidationException { ValidationResult result = verifyInvalidResult( createFile("Fail_message_flow_to_pool.bpmn"), 2); assertFirstViolation(result.getViolations().get(0)); assertSourceViolation(result.getViolations().get(1)); } @Test public void testConstraintSamePoolFail() throws ValidationException { ValidationResult result = verifyInvalidResult( createFile("Fail_message_flow_in_same_pool.bpmn"), 3); assertFirstViolation(result.getViolations().get(0)); assertSourceViolation(result.getViolations().get(1)); assertTargetViolation(result.getViolations().get(2)); } @Test public void testConstraintSuccess() throws ValidationException { verifyValidResult(createFile("Success.bpmn")); } private void assertFirstViolation(Violation v) { assertViolation(v, ERRORMESSAGE, XPATHSTRING, 7); } private void assertSourceViolation(Violation v) { assertViolation(v, "A Start Event MUST NOT be a source for a message flow", "//bpmn:messageFlow[@sourceRef][0]", 7); } private void assertTargetViolation(Violation v) { assertViolation(v, "An End Event MUST NOT be a target for a message flow", "//bpmn:messageFlow[@targetRef][0]", 7); } @Override protected String getExtNumber() { return "031"; } }