未验证 提交 cbcd5521 编写于 作者: J Jakub Sokołowski 提交者: GitHub

AAE-12143 Process diagram SVG generation tests (#4215)

上级 3eca644b
......@@ -66,5 +66,10 @@
<artifactId>activiti-engine</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.xmlunit</groupId>
<artifactId>xmlunit-assertj3</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
......@@ -15,10 +15,6 @@
*/
package org.activiti.engine.test.image;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.activiti.bpmn.model.BpmnModel;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.ProcessEngines;
......@@ -34,6 +30,21 @@ import org.apache.batik.anim.dom.SAXSVGDocumentFactory;
import org.apache.batik.anim.dom.SVGOMDocument;
import org.apache.batik.util.XMLResourceDescriptor;
import org.apache.commons.io.IOUtils;
import org.springframework.util.ResourceUtils;
import org.springframework.util.StreamUtils;
import org.xmlunit.assertj3.XmlAssert;
import org.xmlunit.diff.Comparison;
import org.xmlunit.diff.ComparisonResult;
import org.xmlunit.diff.ComparisonType;
import org.xmlunit.diff.DifferenceEvaluator;
import java.io.File;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import static java.util.Arrays.asList;
import static java.util.Collections.emptyList;
......@@ -42,6 +53,17 @@ import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
public class ProcessDiagramGeneratorTest extends PluggableActivitiTestCase {
public static final String TEST_OUTPUT_RESULT_PATH = "classpath:org/activiti/engine/test/image/" +
"ProcessDiagramGeneratorTest.testOutput.result.svg";
private final ProcessDiagramGenerator imageGenerator = new DefaultProcessDiagramGenerator();
private final String activityFontName = imageGenerator.getDefaultActivityFontName();
private final String labelFontName = imageGenerator.getDefaultLabelFontName();
private final String annotationFontName = imageGenerator.getDefaultAnnotationFontName();
@Override
protected void initializeProcessEngine() {
ProcessEngines.destroy();
......@@ -59,11 +81,6 @@ public class ProcessDiagramGeneratorTest extends PluggableActivitiTestCase {
@Deployment
public void testHighLighted() throws Exception {
ProcessDiagramGenerator imageGenerator = new DefaultProcessDiagramGenerator();
String activityFontName = imageGenerator.getDefaultActivityFontName();
String labelFontName = imageGenerator.getDefaultLabelFontName();
String annotationFontName = imageGenerator.getDefaultAnnotationFontName();
runtimeService.startProcessInstanceByKey("myProcess");
List<Task> tasks = taskService.createTaskQuery().list();
for (Task task : tasks) {
......@@ -89,11 +106,6 @@ public class ProcessDiagramGeneratorTest extends PluggableActivitiTestCase {
@Deployment
public void testSmallBoxLabels() throws Exception {
ProcessDiagramGenerator imageGenerator = new DefaultProcessDiagramGenerator();
String activityFontName = imageGenerator.getDefaultActivityFontName();
String labelFontName = imageGenerator.getDefaultLabelFontName();
String annotationFontName = imageGenerator.getDefaultAnnotationFontName();
String id = repositoryService.createProcessDefinitionQuery().processDefinitionKey("myProcess").singleResult()
.getId();
......@@ -110,11 +122,6 @@ public class ProcessDiagramGeneratorTest extends PluggableActivitiTestCase {
@Deployment
public void testTransactionElements() throws Exception {
ProcessDiagramGenerator imageGenerator = new DefaultProcessDiagramGenerator();
String activityFontName = imageGenerator.getDefaultActivityFontName();
String labelFontName = imageGenerator.getDefaultLabelFontName();
String annotationFontName = imageGenerator.getDefaultAnnotationFontName();
String id = repositoryService.createProcessDefinitionQuery().processDefinitionKey("transactionSubRequest").singleResult()
.getId();
......@@ -131,11 +138,6 @@ public class ProcessDiagramGeneratorTest extends PluggableActivitiTestCase {
@Deployment
public void testAllElements() throws Exception {
ProcessDiagramGenerator imageGenerator = new DefaultProcessDiagramGenerator();
String activityFontName = imageGenerator.getDefaultActivityFontName();
String labelFontName = imageGenerator.getDefaultLabelFontName();
String annotationFontName = imageGenerator.getDefaultAnnotationFontName();
String id = repositoryService.createProcessDefinitionQuery().processDefinitionKey("myProcess").singleResult()
.getId();
BpmnModel bpmnModel = repositoryService.getBpmnModel(id);
......@@ -171,6 +173,23 @@ public class ProcessDiagramGeneratorTest extends PluggableActivitiTestCase {
}
}
@Deployment
public void testOutput() throws Exception {
String id = repositoryService.createProcessDefinitionQuery().processDefinitionKey("big-process").singleResult()
.getId();
BpmnModel bpmnModel = repositoryService.getBpmnModel(id);
try (final InputStream resourceStream = imageGenerator.generateDiagram(bpmnModel, "", "", "")) {
byte[] bytes = StreamUtils.copyToByteArray(resourceStream);
String resultSvgContent = new String(bytes, StandardCharsets.UTF_8);
File expectedResultFile = ResourceUtils.getFile(TEST_OUTPUT_RESULT_PATH);
XmlAssert.assertThat(resultSvgContent).and(expectedResultFile)
.ignoreWhitespace()
.withNodeFilter(node -> !"path".equals(node.getNodeName()))
.withDifferenceEvaluator(new StyleAttributeEvaluator())
.areIdentical();
}
}
/**
* Test that when the diagram is generated for a model without graphic info
* then the default diagram image is returned
......@@ -188,11 +207,6 @@ public class ProcessDiagramGeneratorTest extends PluggableActivitiTestCase {
.getId();
BpmnModel bpmnModel = repositoryService.getBpmnModel(id);
ProcessDiagramGenerator imageGenerator = new DefaultProcessDiagramGenerator();
String activityFontName = imageGenerator.getDefaultActivityFontName();
String labelFontName = imageGenerator.getDefaultLabelFontName();
String annotationFontName = imageGenerator.getDefaultAnnotationFontName();
//WHEN
try (final InputStream resourceStream = imageGenerator.generateDiagram(bpmnModel,
emptyList(),
......@@ -251,4 +265,28 @@ public class ProcessDiagramGeneratorTest extends PluggableActivitiTestCase {
return (SVGOMDocument) factory.createDocument(null, resourceStream);
}
private static class StyleAttributeEvaluator implements DifferenceEvaluator {
@Override
public ComparisonResult evaluate(Comparison comparison, ComparisonResult outcome) {
if (outcome != ComparisonResult.EQUAL && isStyleAttribute(comparison)) {
List<String> controlStream = split(comparison.getControlDetails());
List<String> testStream = split(comparison.getTestDetails());
if (controlStream.size() == testStream.size() && controlStream.containsAll(testStream)) {
return ComparisonResult.EQUAL;
}
}
return outcome;
}
private boolean isStyleAttribute(Comparison comparison) {
return comparison.getType() == ComparisonType.ATTR_VALUE &&
"style".equals(comparison.getControlDetails().getTarget().getNodeName());
}
private List<String> split(Comparison.Detail comparison) {
return Arrays.stream(((String) comparison.getValue()).split(";"))
.map(String::trim)
.collect(Collectors.toList());
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册