package de.uniba.dsg.bpmnspector.refcheck.tests; import api.UnsortedValidationResult; import api.ValidationException; import api.ValidationResult; import api.Violation; import de.uniba.dsg.bpmnspector.common.importer.BPMNProcess; import de.uniba.dsg.bpmnspector.common.importer.ProcessImporter; import de.uniba.dsg.bpmnspector.refcheck.BPMNReferenceValidator; import de.uniba.dsg.bpmnspector.refcheck.ReferenceChecker; import org.junit.BeforeClass; import org.junit.Test; import java.nio.file.Paths; import static org.junit.Assert.*; /** * This test class tests the validator with the predefined BPMN files. The * predefinitions of the tests can be looked up in the bachelor thesis with the * T numbers. The tests are jUnit tests. * * @author Andreas Vorndran * @version 1.0 * */ public class TestBPMNFiles { private static BPMNReferenceValidator application; private static ProcessImporter bpmnImporter; @BeforeClass public static void setupBeforeClass() throws ValidationException { application = new BPMNReferenceValidator(); bpmnImporter = new ProcessImporter(); } @Test public void testValidateWithT1() throws ValidationException { ValidationResult result = importAndTestProcess("src/test/resources/test-1-gruppe-c.bpmn"); assertEquals(1, result.getFoundFiles().size()); assertViolationCount(result, 1); validateResultType(result.getViolations().get(0), 11, "message", "participant"); } @Test public void testValidateWithT2() throws ValidationException { ValidationResult result = importAndTestProcess("src/test/resources/test-2-gruppe-d.bpmn"); assertEquals(1, result.getFoundFiles().size()); assertViolationCount(result, 1); validateResultType(result.getViolations().get(0), 3, "itemRef", "participant"); } @Test public void testValidateWithT3() throws ValidationException { ValidationResult result = importAndTestProcess("src/test/resources/test-3-gruppe-e.bpmn"); assertEquals(1, result.getFoundFiles().size()); assertViolationCount(result, 2); validateResultType(result.getViolations().get(0), 32, "sourceRef", "participant"); validateResultType(result.getViolations().get(1), 33, "targetRef", "sequenceFlow"); } @Test public void testValidateWithT4() throws ValidationException { ValidationResult result = importAndTestProcess("src/test/resources/test-4-gruppe-f.bpmn"); assertEquals(1, result.getFoundFiles().size()); assertViolationCount(result, 2); validateResultType(result.getViolations().get(0), 10, "incoming", "participant"); validateResultType(result.getViolations().get(1), 30, "default", "startEvent"); } @Test public void testValidateWithT5() throws ValidationException { ValidationResult result = importAndTestProcess("src/test/resources/test-5-gruppe-g.bpmn"); assertEquals(1, result.getFoundFiles().size()); assertViolationCount(result, 1); validateResultType(result.getViolations().get(0), 11, "interfaceRef", "task"); } @Test public void testValidateWithT6() throws ValidationException { ValidationResult result = importAndTestProcess("src/test/resources/test-6-gruppe-h.bpmn"); assertEquals(1, result.getFoundFiles().size()); assertViolationCount(result, 1); validateResultType(result.getViolations().get(0), 23, "participantRef", "sequenceFlow"); } @Test public void testValidateWithT7() throws ValidationException { ValidationResult result = importAndTestProcess("src/test/resources/test-7-gruppe-i1.bpmn"); assertEquals(1, result.getFoundFiles().size()); assertViolationCount(result, 2); validateResultType(result.getViolations().get(0), 11, "sourceRef", "message"); validateResultType(result.getViolations().get(1), 11, "targetRef", "process"); } @Test public void testValidateWithT8() throws ValidationException { ValidationResult result = importAndTestProcess("src/test/resources/test-8-gruppe-l.bpmn"); assertEquals(1, result.getFoundFiles().size()); assertViolationCount(result, 1); validateResultType(result.getViolations().get(0), 22, "operationRef", "message"); } @Test public void testValidateWithT9() throws ValidationException { ValidationResult result = importAndTestProcess("src/test/resources/test-9-gruppe-m.bpmn"); assertEquals(1, result.getFoundFiles().size()); assertViolationCount(result, 1); validateResultType(result.getViolations().get(0), 18, "dataInputRefs", "participant"); } @Test public void testValidateWithT10() throws ValidationException { ValidationResult result = importAndTestProcess("src/test/resources/test-10-gruppe-n.bpmn"); assertEquals(1, result.getFoundFiles().size()); assertViolationCount(result, 1); validateResultType(result.getViolations().get(0), 19, "dataOutputRefs", "participant"); } @Test public void testValidateWithT11() throws ValidationException { ValidationResult result = importAndTestProcess("src/test/resources/test-11-gruppe-o.bpmn"); assertEquals(1, result.getFoundFiles().size()); assertViolationCount(result, 2); validateResultType(result.getViolations().get(0), 23, "sourceRef", "participant"); validateResultType(result.getViolations().get(1), 44, "targetRef", "startEvent"); } @Test public void testValidateWithT12() throws ValidationException { ValidationResult result = importAndTestProcess("src/test/resources/test-12-gruppe-p.bpmn"); assertEquals(1, result.getFoundFiles().size()); assertViolationCount(result, 1); validateResultType(result.getViolations().get(0), 27, "eventDefinitionRef", "sequenceFlow"); } @Test public void testValidateWithT13() throws ValidationException { ValidationResult result = importAndTestProcess("src/test/resources/test-13-gruppe-q.bpmn"); assertEquals(1, result.getFoundFiles().size()); assertViolationCount(result, 1); validateResultType(result.getViolations().get(0), 19, "attachedToRef", "participant"); } @Test public void testValidateWithT14() throws ValidationException { ValidationResult result = importAndTestProcess("src/test/resources/test-14-gruppe-r.bpmn"); assertEquals(1, result.getFoundFiles().size()); assertViolationCount(result, 2); validateResultType(result.getViolations().get(0), 24, "source", "startEvent"); validateResultType(result.getViolations().get(1), 43, "target", "endEvent"); } @Test public void testValidateWithT15() throws ValidationException { ValidationResult result = importAndTestProcess("src/test/resources/test-15-gruppe-s.bpmn"); assertEquals(1, result.getFoundFiles().size()); assertViolationCount(result, 1); validateResultType(result.getViolations().get(0), 18, "definitionalCollaborationRef", "message"); } @Test public void testValidateWithT16() throws ValidationException { ValidationResult result = importAndTestProcess("src/test/resources/test-16-gruppe-t.bpmn"); assertEquals(1, result.getFoundFiles().size()); assertViolationCount(result, 1); validateResultType(result.getViolations().get(0), 23, "correlationPropertyRef", "participant"); } @Test public void testValidateWithT17() throws ValidationException { ValidationResult result = importAndTestProcess("src/test/resources/test-17-gruppe-u.bpmn"); assertEquals(1, result.getFoundFiles().size()); assertViolationCount(result, 1); validateResultType(result.getViolations().get(0), 8, "errorRef", "message"); } @Test public void testValidateWithT18() throws ValidationException { ValidationResult result = importAndTestProcess("src/test/resources/test-18-referenz-6-teil-2.bpmn"); assertEquals(2, result.getFoundFiles().size()); assertViolationCount(result, 1); validateResultType(result.getViolations().get(0), 10, "categoryValueRef", "participant"); } @Test public void testValidateWithT18Subfolder() throws ValidationException { ValidationResult result = importAndTestProcess("src/test/resources/test-18-referenz-6-teil-2-subfolder.bpmn"); assertEquals(2, result.getFoundFiles().size()); assertViolationCount(result, 1); validateResultType(result.getViolations().get(0), 10, "categoryValueRef", "participant"); } @Test public void testValidateWithT19() throws ValidationException { ValidationResult result = importAndTestProcess("src/test/resources/test-19-referenz-6-korrekt.bpmn"); assertEquals(2, result.getFoundFiles().size()); assertTrue(result.isValid()); } @Test public void testExistenceViolationMsgEventDef() throws ValidationException { ValidationResult result = importAndTestProcess("src/test/resources/refCheck_existenceViolation_MsgEventDef_messageRef.bpmn"); assertEquals(1, result.getFoundFiles().size()); assertFalse(result.isValid()); assertEquals(result.getViolations().size(), 1); Violation existenceViolation = result.getViolations().get(0); assertEquals("REF_EXISTENCE", existenceViolation.getConstraint()); assertEquals(13, existenceViolation.getLocation().getLocation().getRow()); assertEquals(64, existenceViolation.getLocation().getLocation().getColumn()); } private ValidationResult importAndTestProcess(String filename) throws ValidationException { ValidationResult result = new UnsortedValidationResult(); BPMNProcess process = bpmnImporter .importProcessFromPath(Paths.get(filename), result); application.validate(process, result); return result; } private static void validateResultType(Violation foundError, int expectedLine, String validType, String typeToBeFound) { if(foundError.getConstraint()==null || !foundError.getConstraint().equals( ReferenceChecker.CONSTRAINT_REF_TYPE)) { fail("found violation has the wrong type. Expected: "+ ReferenceChecker.CONSTRAINT_REF_TYPE+" Found: "+foundError.getConstraint()); } if(foundError.getLocation().getLocation().getRow()<=0 || foundError.getLocation().getLocation().getRow()!=expectedLine) { fail("Violation is at an unexpected line. Expected: "+expectedLine+" Found: "+foundError.getLocation().getLocation().getRow()); } if(foundError.getMessage()==null || !foundError.getMessage().contains("incorrect type '"+typeToBeFound)) { fail("Violation Message does not contain expected String: 'incorrect type "+typeToBeFound+"'\n\t Message was: "+foundError.getMessage()); } else if(!foundError.getMessage().contains(validType)) { fail("Valid Type ("+validType+") is not found in list of expected types."+foundError.getMessage()); } } private static void assertViolationCount(ValidationResult result, int expectedViolationsCount) { if(expectedViolationsCount!=0) { assertFalse(result.isValid()); assertEquals(expectedViolationsCount, result.getViolations().size()); } } }