/* * Copyright (c) 2015, Effektif GmbH. All rights reserved. */ package com.effektif.workflow.test.diagram; import static org.junit.Assert.*; import java.util.ArrayList; import java.util.List; import org.junit.Test; import com.effektif.workflow.api.workflow.diagram.Bounds; import com.effektif.workflow.api.workflow.diagram.Diagram; import com.effektif.workflow.api.workflow.diagram.Edge; import com.effektif.workflow.api.workflow.diagram.Node; import com.effektif.workflow.api.workflow.diagram.Point; public class DiagramTest { @Test public void testCreateEmptyDiagram() { Diagram diagram = Diagram.newInstance(); assertNotNull(diagram.canvas); assertNotNull(diagram.version); assertEquals(1, diagram.version.longValue()); assertNull(diagram.canvas.children); assertNotNull(diagram.edges); assertEquals(0, diagram.edges.size()); } @Test public void testAddNode() { Diagram diagram = Diagram.newInstance(); String actId = "a1"; assertFalse(diagram.hasChildren()); diagram.addNode(actId, 11.0, 12.0, 113.0, 94.0); assertTrue(diagram.hasChildren()); assertEquals(1, diagram.canvas.children.size()); Node node = diagram.canvas.children.get(0); assertEquals(actId, node.elementId); assertNotNull(node.bounds); assertNotNull(node.bounds.upperLeft); assertNotNull(node.bounds.lowerRight); assertEquals(11.0, node.bounds.upperLeft.x, 0.0); assertEquals(12.0, node.bounds.upperLeft.y, 0.0); assertEquals(113.0, node.bounds.lowerRight.x, 0.0); assertEquals(94.0, node.bounds.lowerRight.y, 0.0); } @Test public void testAddNodeToUninitializedDiagram() { Diagram diagram = new Diagram(); assertFalse(diagram.hasChildren()); String actId = "a1"; diagram.addNode(actId, 1.0, 2.0, 3.0, 4.0); assertNotNull(diagram.canvas); assertTrue(diagram.hasChildren()); assertEquals(1l, diagram.version.longValue()); assertEquals(1, diagram.canvas.children.size()); Node node = diagram.canvas.children.get(0); assertEquals(actId, node.elementId); } @Test public void testAddEdge() { Edge edge = new Edge().id(""); Diagram diagram = new Diagram(); assertFalse(diagram.hasEdges()); diagram.addEdge(edge); assertTrue(diagram.hasEdges()); assertEquals(1, diagram.edges.size()); assertEquals(edge.id, diagram.edges.get(0).id); diagram.edges(null); assertFalse(diagram.hasEdges()); diagram.addEdge(edge); assertTrue(diagram.hasEdges()); assertEquals(1, diagram.edges.size()); assertEquals(edge.id, diagram.edges.get(0).id); diagram.addEdge(null); assertTrue(diagram.hasEdges()); assertEquals(1, diagram.edges.size()); assertEquals(edge.id, diagram.edges.get(0).id); } @Test public void testAddEdgeWithDetails() { Diagram diagram = Diagram.newInstance(); String edgeId = "e1"; String from = "n1"; String to = "n2"; diagram.addEdge(edgeId, from, to, Point.of(1, 2), Point.of(3, 4), Point.of(5, 6)); assertEquals(1, diagram.edges.size()); Edge edge = diagram.edges.get(0); assertEquals(edgeId, edge.transitionId); assertEquals(from, edge.fromId); assertEquals(to, edge.toId); assertEquals(3, edge.dockers.size()); assertEquals(Point.of(1, 2), edge.dockers.get(0)); assertEquals(Point.of(3, 4), edge.dockers.get(1)); assertEquals(Point.of(5, 6), edge.dockers.get(2)); } @Test public void testAddEdgeToUninitializedDiagram() { Diagram diagram = new Diagram(); String edgeId = "e1"; String from = "n1"; String to = "n2"; diagram.addEdge(edgeId, from, to, Point.of(1, 2), Point.of(3, 4), Point.of(5, 6)); assertNotNull(diagram.canvas); assertEquals(1l, diagram.version.longValue()); assertEquals(1, diagram.edges.size()); } @Test public void testRemoveEdge() { Diagram diagram = new Diagram(); String edgeId = "e1"; String from = "n1"; String to = "n2"; diagram.addEdge(edgeId, from, to, Point.of(1, 2), Point.of(3, 4), Point.of(5, 6)); String edgeId2 = "e2"; String from2 = "n3"; String to2 = "n4"; diagram.addEdge(edgeId2, from2, to2, Point.of(1, 2), Point.of(3, 4), Point.of(5, 6)); assertNotNull(diagram.canvas); assertEquals(2, diagram.edges.size()); diagram.removeEdge(edgeId2); assertEquals(1, diagram.edges.size()); assertEquals(edgeId, diagram.edges.get(0).transitionId); } @Test public void testEnsureCanvas() { Diagram diagram = new Diagram(); assertNotNull(diagram.canvas); assertNotNull(diagram.version); assertEquals(1l, diagram.version.longValue()); diagram = new Diagram(); diagram.version(2l); assertNotNull(diagram.canvas); assertEquals(2l, diagram.version.longValue()); Node canvas = new Node().bounds(Bounds.of(1.0, 2.0, 3.0, 4.0)); diagram = new Diagram() .canvas(canvas) .version(2l); // should stay untouched assertEquals(canvas, diagram.canvas); assertEquals(2l, diagram.version.longValue()); } @Test public void testIncVersion() { Diagram diagram = new Diagram(); assertEquals(1l, diagram.version.longValue()); diagram.incVersion(); assertEquals(2l, diagram.version.longValue()); } @Test public void testSetCanvas() { Diagram diagram = Diagram.newInstance(); assertNotNull(diagram.canvas); Node canvas = new Node().bounds(Bounds.of(1.0, 2.0, 3.0, 4.0)); assertNotEquals(canvas, diagram.canvas); diagram.canvas(canvas); assertEquals(canvas, diagram.canvas); diagram.canvas(null); assertNull(diagram.canvas); } @Test public void testSetEdges() { List<Edge> edges = new ArrayList<>(); edges.add(new Edge().transitionId("e1")); edges.add(new Edge().transitionId("e2")); Diagram diagram = Diagram.newInstance(); diagram.edges(edges); assertEquals(edges, diagram.edges); assertTrue(diagram.hasEdges()); edges.add(new Edge().transitionId("e3")); assertNotEquals(edges, diagram.edges); diagram.edges(null); assertNull(diagram.edges); assertFalse(diagram.hasEdges()); } @Test public void testSetVersion() { Diagram diagram = Diagram.newInstance(); assertEquals(1l, diagram.version.longValue()); diagram.version(5l); assertEquals(5l, diagram.version.longValue()); diagram.version(null); assertNull(diagram.version); } @Test public void testEquals() { Diagram diagram1 = Diagram.newInstance(); Diagram diagram2 = Diagram.newInstance(); assertEquals(diagram1, diagram2); diagram2.canvas(new Node().bounds(Bounds.of(1.0, 2.0, 3.0, 4.0))); assertNotEquals(diagram1, diagram2); diagram1.canvas.bounds(Bounds.of(1.0, 2.0, 3.0, 4.0)); assertEquals(diagram1, diagram2); assertEquals(diagram1.hashCode(), diagram2.hashCode()); diagram2.incVersion(); assertNotEquals(diagram1, diagram2); diagram1.incVersion(); assertEquals(diagram1, diagram2); String edgeId = "e1"; diagram1.addEdge(new Edge().transitionId(edgeId)); assertNotEquals(diagram1, diagram2); diagram2.addEdge(new Edge().transitionId(edgeId)); assertEquals(diagram1, diagram2); } @Test public void testIsValid() { Diagram diagram = Diagram.newInstance() .addNode("n1", 0.0, 0.0, 100.0, 80.0) .addNode("n2", 200.0, 0.0, 300.0, 80.0); assertTrue(diagram.isValid()); diagram.addNode("n3", 0.0, 0.0, 0.0, 0.0); assertFalse(diagram.isValid()); diagram.canvas.children.remove(2); assertTrue(diagram.isValid()); diagram.addNode("n4", 0.0, 0.0, 0.0, 80.0); assertFalse(diagram.isValid()); diagram.canvas.children.remove(2); assertTrue(diagram.isValid()); diagram.addNode("n5", 400.0, 0.0, 500.0, 0.0); assertFalse(diagram.isValid()); } }