diff --git a/src/test/java/com/syncleus/grail/graph/action/AbstractPrioritySerialTriggerTest.java b/src/test/java/com/syncleus/grail/graph/action/AbstractPrioritySerialTriggerTest.java index 0f018480ce1d05dc0b685c2774c5a1c7f0ca137c..f6901f4ecb29cc02f6a508c6a3bbcb1820b2a429 100644 --- a/src/test/java/com/syncleus/grail/graph/action/AbstractPrioritySerialTriggerTest.java +++ b/src/test/java/com/syncleus/grail/graph/action/AbstractPrioritySerialTriggerTest.java @@ -52,6 +52,72 @@ public class AbstractPrioritySerialTriggerTest { Assert.assertTrue(actionNode.isDone()); } + @Test + public void testDoesTriggerInOrder() { + final FramedTransactionalGraph<?> graph = FACTORY.create(new MockTransactionalTinkerGraph()); + + final List<String> triggerOrder = new ArrayList<String>(2); + + // construct graph + final SimpleActionNode firstActionNode = (SimpleActionNode) graph.addVertex(null, SimpleActionNode.class); + firstActionNode.setTriggerOrder(triggerOrder); + final SimpleActionNode secondActionNode = (SimpleActionNode) graph.addVertex(null, SimpleActionNode.class); + secondActionNode.setTriggerOrder(triggerOrder); + final PrioritySerialTrigger trigger = (PrioritySerialTrigger) graph.addVertex(null, PrioritySerialTrigger.class); + final PrioritySerialTriggerEdge firstTriggerEdge = (PrioritySerialTriggerEdge) graph.addEdge(null, trigger.asVertex(), firstActionNode.asVertex(), "triggers", PrioritySerialTriggerEdge.class); + firstTriggerEdge.setTriggerAction("first"); + firstTriggerEdge.setTriggerPriority(1000); + final PrioritySerialTriggerEdge secondTriggerEdge = (PrioritySerialTriggerEdge) graph.addEdge(null, trigger.asVertex(), secondActionNode.asVertex(), "triggers", PrioritySerialTriggerEdge.class); + secondTriggerEdge.setTriggerAction("second"); + secondTriggerEdge.setTriggerPriority(0); + + Assert.assertTrue(triggerOrder.isEmpty()); + + //process the weight + trigger.trigger(); + + //make sure we clear out the action node since the attribute is static. + firstActionNode.setTriggerOrder(null); + secondActionNode.setTriggerOrder(null); + + Assert.assertTrue(triggerOrder.size() == 2); + Assert.assertTrue(triggerOrder.get(0).equals("first")); + Assert.assertTrue(triggerOrder.get(1).equals("second")); + } + + @Test + public void testDoesTriggerInOrderReversed() { + final FramedTransactionalGraph<?> graph = FACTORY.create(new MockTransactionalTinkerGraph()); + + final List<String> triggerOrder = new ArrayList<String>(2); + + // construct graph + final SimpleActionNode firstActionNode = (SimpleActionNode) graph.addVertex(null, SimpleActionNode.class); + firstActionNode.setTriggerOrder(triggerOrder); + final SimpleActionNode secondActionNode = (SimpleActionNode) graph.addVertex(null, SimpleActionNode.class); + secondActionNode.setTriggerOrder(triggerOrder); + final PrioritySerialTrigger trigger = (PrioritySerialTrigger) graph.addVertex(null, PrioritySerialTrigger.class); + final PrioritySerialTriggerEdge secondTriggerEdge = (PrioritySerialTriggerEdge) graph.addEdge(null, trigger.asVertex(), secondActionNode.asVertex(), "triggers", PrioritySerialTriggerEdge.class); + secondTriggerEdge.setTriggerAction("second"); + secondTriggerEdge.setTriggerPriority(0); + final PrioritySerialTriggerEdge firstTriggerEdge = (PrioritySerialTriggerEdge) graph.addEdge(null, trigger.asVertex(), firstActionNode.asVertex(), "triggers", PrioritySerialTriggerEdge.class); + firstTriggerEdge.setTriggerAction("first"); + firstTriggerEdge.setTriggerPriority(1000); + + Assert.assertTrue(triggerOrder.isEmpty()); + + //process the weight + trigger.trigger(); + + //make sure we clear out the action node since the attribute is static. + firstActionNode.setTriggerOrder(null); + secondActionNode.setTriggerOrder(null); + + Assert.assertTrue(triggerOrder.size() == 2); + Assert.assertTrue(triggerOrder.get(0).equals("first")); + Assert.assertTrue(triggerOrder.get(1).equals("second")); + } + @Test(expected = UndeclaredThrowableException.class ) public void testBadArguments() { final FramedTransactionalGraph<?> graph = FACTORY.create(new MockTransactionalTinkerGraph()); diff --git a/src/test/java/com/syncleus/grail/graph/action/AbstractSimpleActionNode.java b/src/test/java/com/syncleus/grail/graph/action/AbstractSimpleActionNode.java index 33a666f9f508e85b59591b79d12e2db1d30c950f..7677adea76197d5e878016fd840f4b323e90fd6c 100644 --- a/src/test/java/com/syncleus/grail/graph/action/AbstractSimpleActionNode.java +++ b/src/test/java/com/syncleus/grail/graph/action/AbstractSimpleActionNode.java @@ -20,9 +20,33 @@ package com.syncleus.grail.graph.action; import com.tinkerpop.frames.modules.javahandler.JavaHandlerContext; +import java.util.List; + public abstract class AbstractSimpleActionNode implements SimpleActionNode, JavaHandlerContext { + private static List<String> triggerOrder; + + @Override + public void setTriggerOrder(final List<String> triggerOrder) { + this.triggerOrder = triggerOrder; + } + + @Override + public List<String> getTriggerOrder() { + return this.triggerOrder; + } + @Override public void doSomething() { this.setDone(true); } + + @Override + public void doSomethingFirst() { + this.triggerOrder.add("first"); + } + + @Override + public void doSomethingSecond() { + this.triggerOrder.add("second"); + } } diff --git a/src/test/java/com/syncleus/grail/graph/action/SimpleActionNode.java b/src/test/java/com/syncleus/grail/graph/action/SimpleActionNode.java index 4c0e96a776538e0b4efe985b4fc0efdb9ef6023d..766eba916ab01d2ebca9b12b591edcd8308e4939 100644 --- a/src/test/java/com/syncleus/grail/graph/action/SimpleActionNode.java +++ b/src/test/java/com/syncleus/grail/graph/action/SimpleActionNode.java @@ -23,6 +23,8 @@ import com.tinkerpop.frames.*; import com.tinkerpop.frames.modules.javahandler.*; import com.tinkerpop.frames.modules.typedgraph.*; +import java.util.List; + @TypeValue("SimpleActionNode") @JavaHandlerClass(AbstractSimpleActionNode.class) public interface SimpleActionNode extends Node { @@ -32,7 +34,21 @@ public interface SimpleActionNode extends Node { @Property("isDone") void setDone(boolean isDone); + @JavaHandler + void setTriggerOrder(List<String> triggerOrder); + + @JavaHandler + List<String> getTriggerOrder(); + @JavaHandler @Action("action") void doSomething(); + + @JavaHandler + @Action("first") + void doSomethingFirst(); + + @JavaHandler + @Action("second") + void doSomethingSecond(); }