- import groovy.mock.interceptor.MockFor
- import static groovy.test.GroovyAssert.*
- import groovy.util.GroovyTestCase
-
- import org.wikimedia.integration.ExecutionGraph
-
- class ExecutionGraphTest extends GroovyTestCase {
- void testAncestorsOf() {
- def graph = new ExecutionGraph([
- ["a", "b", "c", "d", "e", "f"],
- ["x", "d", "y", "f"],
- ])
-
- assert graph.ancestorsOf("c") == ["b", "a"] as Set
- assert graph.ancestorsOf("d") == ["c", "b", "a", "x"] as Set
- assert graph.ancestorsOf("f") == ["e", "d", "c", "b", "a", "x", "y"] as Set
- }
-
- void testLeaves() {
- def graph = new ExecutionGraph([
- ["a", "b", "c", "d"],
- ["f", "b", "g"],
- ])
-
- assert graph.leaves() == ["g", "d"] as Set
- }
-
- void testInDegreeOf() {
- def graph = new ExecutionGraph([
- ["a", "b", "c"],
- ["d", "b", "e"],
- ["f", "b"],
- ])
-
- assert graph.inDegreeOf("a") == 0
- assert graph.inDegreeOf("d") == 0
- assert graph.inDegreeOf("f") == 0
- assert graph.inDegreeOf("b") == 3
- assert graph.inDegreeOf("e") == 1
- assert graph.inDegreeOf("c") == 1
- }
-
- void testInTo() {
- def graph = new ExecutionGraph([
- ["a", "b", "c"],
- ["d", "b", "e"],
- ["f", "b"],
- ])
-
- assert graph.inTo("a") == [] as Set
- assert graph.inTo("d") == [] as Set
- assert graph.inTo("f") == [] as Set
- assert graph.inTo("b") == ["a", "d", "f"] as Set
- assert graph.inTo("c") == ["b"] as Set
- assert graph.inTo("e") == ["b"] as Set
- }
-
- void testNodes() {
- def graph = new ExecutionGraph([
- ["a", "b", "c"],
- ["x", "b", "y"],
- ["z"],
- ])
-
- assert graph.nodes() == ["a", "b", "c", "x", "y", "z"] as Set
- }
-
- void testOr() {
- def graph1 = new ExecutionGraph([
- ["x", "y", "z"],
- ])
-
- def graph2 = new ExecutionGraph([
- ["a", "b", "c"],
- ["d", "b", "e"],
- ])
-
- assert (graph1 | graph2) == new ExecutionGraph([
- ["x", "y", "z"],
- ["a", "b", "c"],
- ["d", "b", "e"],
- ])
- }
-
- void testOutDegreeOf() {
- def graph = new ExecutionGraph([
- ["a", "b", "c"],
- ["d", "b", "e"],
- ["f", "b"],
- ])
-
- assert graph.outDegreeOf("a") == 1
- assert graph.outDegreeOf("d") == 1
- assert graph.outDegreeOf("f") == 1
- assert graph.outDegreeOf("b") == 2
- assert graph.outDegreeOf("e") == 0
- assert graph.outDegreeOf("c") == 0
- }
-
- void testOutOf() {
- def graph = new ExecutionGraph([
- ["a", "b", "c"],
- ["d", "b", "e"],
- ["f", "b"],
- ])
-
- assert graph.outOf("a") == ["b"] as Set
- assert graph.outOf("d") == ["b"] as Set
- assert graph.outOf("f") == ["b"] as Set
- assert graph.outOf("b") == ["c", "e"] as Set
- assert graph.outOf("c") == [] as Set
- assert graph.outOf("e") == [] as Set
- }
-
- void testPlus() {
- def graph1 = new ExecutionGraph([
- ["x", "y", "z"],
- ])
-
- def graph2 = new ExecutionGraph([
- ["a", "b", "c"],
- ["d", "b", "e"],
- ])
-
- assert (graph1 + graph2) == new ExecutionGraph([
- ["x", "y", "z", "a", "b", "c"],
- ["x", "y", "z", "d", "b", "e"],
- ])
- }
-
- void testRoots() {
- def graph = new ExecutionGraph([
- ["a", "b", "c", "d", "e"],
- ["f", "b", "g", "e"],
- ])
-
- assert graph.roots() == ["a", "f"] as Set
- }
-
- void testRootsOfIsolates() {
- def graph = new ExecutionGraph([["a"], ["z"]])
-
- assert graph.roots() == ["a", "z"] as Set
- }
-
- void testStack() {
- def graph = new ExecutionGraph([
- ["a", "b", "c", "d", "e", "f"],
- ["x", "d", "y", "f"],
- ])
-
- assert graph.stack() == [
- ["a", "x"],
- ["b"],
- ["c"],
- ["d"],
- ["e", "y"],
- ["f"],
- ]
- }
-
- void testStack_cycleDetection() {
- def graph = new ExecutionGraph([
- ["a", "b", "c"],
- ["x", "b", "y", "a"],
- ])
-
- shouldFail(Exception) {
- graph.stack()
- }
- }
-
- void testToString() {
- def graph = new ExecutionGraph([["a", "b", "c"], ["x"]])
-
- assert graph.toString() == "digraph { a -> b; b -> c; x }"
- }
- }
|