1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.scxml2.model;
18
19 import java.util.HashMap;
20 import java.util.Map;
21 import java.util.Set;
22
23 import org.apache.commons.scxml2.SCXMLExecutor;
24 import org.apache.commons.scxml2.SCXMLTestHelper;
25 import org.apache.commons.scxml2.TriggerEvent;
26 import org.junit.Assert;
27 import org.junit.Test;
28
29
30
31 public class DatamodelTest {
32
33
34
35
36 @Test
37 public void testDatamodelSimultaneousJexl() throws Exception {
38 SCXMLExecutor exec01 = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/datamodel-01.xml");
39 exec01.go();
40 SCXMLExecutor exec02 = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/datamodel-01.xml");
41 exec02.go();
42 Assert.assertFalse(exec01 == exec02);
43 runtest(exec01, exec02);
44 }
45
46 @Test
47 public void testDatamodelNamespacePrefixedXPaths() throws Exception {
48 SCXMLExecutor exec01 = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/datamodel-02.xml");
49 exec01.go();
50 SCXMLExecutor exec02 = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/datamodel-02.xml");
51 exec02.go();
52 Assert.assertFalse(exec01 == exec02);
53 runtest(exec01, exec02);
54 }
55
56 @Test
57 public void testDatamodel04Jexl() throws Exception {
58 SCXMLExecutor exec01 = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/datamodel-04.xml");
59 exec01.go();
60 Set<EnterableState> currentStates = exec01.getStatus().getStates();
61 Assert.assertEquals(1, currentStates.size());
62 Assert.assertEquals("ten", currentStates.iterator().next().getId());
63 Map<String, Object> payload = new HashMap<String, Object>();
64 payload.put("one", "1");
65 payload.put("two", "2");
66 TriggerEvent te = new TriggerEvent("done.state.ten", TriggerEvent.SIGNAL_EVENT, payload);
67 SCXMLTestHelper.fireEvent(exec01, te);
68 currentStates = exec01.getStatus().getStates();
69 Assert.assertEquals(1, currentStates.size());
70 Assert.assertEquals("twenty", currentStates.iterator().next().getId());
71 SCXMLTestHelper.fireEvent(exec01, "done.state.twenty");
72 currentStates = exec01.getStatus().getStates();
73 Assert.assertEquals(1, currentStates.size());
74 Assert.assertEquals("thirty", currentStates.iterator().next().getId());
75 }
76
77 @Test
78 public void testDatamodel05Jexl() throws Exception {
79 SCXMLExecutor exec01 = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/datamodel-05.xml");
80 exec01.go();
81 SCXMLTestHelper.assertState(exec01, "end");
82 }
83
84 private void runtest(SCXMLExecutor exec01, SCXMLExecutor exec02) throws Exception {
85
86
87 Set<EnterableState> currentStates = exec01.getStatus().getStates();
88 Assert.assertEquals(1, currentStates.size());
89 Assert.assertEquals("ten", currentStates.iterator().next().getId());
90 exec01 = SCXMLTestHelper.testInstanceSerializability(exec01);
91 currentStates = fireEvent("done.state.ten", exec01);
92 Assert.assertEquals(1, currentStates.size());
93 Assert.assertEquals("twenty", currentStates.iterator().next().getId());
94
95 currentStates = exec02.getStatus().getStates();
96 Assert.assertEquals(1, currentStates.size());
97 Assert.assertEquals("ten", currentStates.iterator().next().getId());
98
99 currentStates = fireEvent("done.state.twenty", exec01);
100 Assert.assertEquals(1, currentStates.size());
101 Assert.assertEquals("thirty", currentStates.iterator().next().getId());
102 exec01 = SCXMLTestHelper.testInstanceSerializability(exec01);
103
104 currentStates = fireEvent("done.state.ten", exec02);
105 Assert.assertEquals(1, currentStates.size());
106 Assert.assertEquals("twenty", currentStates.iterator().next().getId());
107 exec02 = SCXMLTestHelper.testInstanceSerializability(exec02);
108 currentStates = fireEvent("done.state.twenty", exec02);
109 Assert.assertEquals(1, currentStates.size());
110 Assert.assertEquals("thirty", currentStates.iterator().next().getId());
111 currentStates = fireEvent("done.state.thirty", exec02);
112 Assert.assertEquals(1, currentStates.size());
113 Assert.assertEquals("forty", currentStates.iterator().next().getId());
114
115 currentStates = fireEvent("done.state.thirty", exec01);
116 Assert.assertEquals(1, currentStates.size());
117 Assert.assertEquals("forty", currentStates.iterator().next().getId());
118 }
119
120 private Set<EnterableState> fireEvent(String name, SCXMLExecutor exec) throws Exception {
121 TriggerEvent[] evts = {new TriggerEvent(name,
122 TriggerEvent.SIGNAL_EVENT, null)};
123 exec.triggerEvents(evts);
124 return exec.getStatus().getStates();
125 }
126 }
127