package de.uniba.dsg.bpmnspector.schematron; import java.io.File; import java.nio.file.Paths; import java.util.List; import api.UnsortedValidationResult; import api.ValidationException; import api.ValidationResult; import api.Violation; import api.Warning; import ch.qos.logback.classic.Level; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; /** * Abstract test class for all tests of the BPMN Validator to simplify testing * and reduce redundancy * * @author Philipp Neugebauer * @version 1.0 * */ public class TestCase { protected final SchematronBPMNValidator validator; { validator = new SchematronBPMNValidator(); validator.setLogLevel(Level.OFF); } protected static String getTestFilePath() { return Paths.get(System.getProperty("user.dir")) .resolve("src/test/resources").toString(); } protected File createFile(String fileName) { String path = String.format("%s%s%s%s%s", getTestFilePath(), File.separator, getExtNumber(), File.separator, fileName); return new File(path); } protected ValidationResult validate(File f) throws ValidationException { return validator.validate(f); } private ValidationResult validValidationResultForFile(String filename) { ValidationResult result = new UnsortedValidationResult(); result.addFile(createFile(filename).toPath()); return result; } protected void assertValidValidationResultForFile(String filename) throws ValidationException { ValidationResult expected = validValidationResultForFile(filename); ValidationResult result = validator.validate(createFile(filename)); assertEquals(expected, result); } protected ValidationResult createValidationResultWithWarnings(String filename, List<Warning> warningList) { ValidationResult result = validValidationResultForFile(filename); warningList.forEach(result::addWarning); return result; } protected void verifyValidResult(File f) throws ValidationException { ValidationResult result = validate(f); assertTrue(result.isValid()); assertTrue(result.getViolations().isEmpty()); } protected ValidationResult verifyInvalidResult(File f, int violationsCount) throws ValidationException { ValidationResult result = validate(f); assertFalse(result.isValid()); assertEquals(violationsCount, result.getViolations().size()); return result; } protected void assertViolation(Violation v, String message, String fileName, String xpath, int line) { assertViolation(v, message, xpath, line); assertEquals(fileName, v.getLocation().getResource().getPath().get().getFileName().toString()); } protected void assertURLViolation(Violation v, String message, String url, String xpath, int line) { assertViolation(v, message, xpath, line); assertEquals(url, v.getLocation().getResource().getResourceName()); } protected void assertViolation(Violation v, String message, String xpath, int line) { assertEquals(message.replaceAll("\\s+", " "), v.getMessage().replaceAll("\\s+", " ")); assertEquals(xpath, v.getLocation().getXpath().orElse("")); assertEquals(line, v.getLocation().getLocation().getRow()); } protected void assertViolation(Violation v, String xpath, int line) { assertViolation(v, getErrorMessage(), xpath, line); } protected String getErrorMessage() { throw new UnsupportedOperationException( "must be overriden by every child class!"); } protected String getExtNumber() { throw new UnsupportedOperationException( "must be overriden by every child class!"); } }