1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.scxml.model;
18
19 import java.net.URL;
20 import java.util.Set;
21
22 import junit.framework.Test;
23 import junit.framework.TestCase;
24 import junit.framework.TestSuite;
25 import junit.textui.TestRunner;
26
27 import org.apache.commons.scxml.SCXMLExecutor;
28 import org.apache.commons.scxml.SCXMLTestHelper;
29 import org.apache.commons.scxml.TriggerEvent;
30 import org.apache.commons.scxml.env.jexl.JexlContext;
31 import org.apache.commons.scxml.env.jexl.JexlEvaluator;
32 import org.apache.commons.scxml.env.jsp.ELContext;
33 import org.apache.commons.scxml.env.jsp.ELEvaluator;
34 /***
35 * Unit tests {@link org.apache.commons.scxml.SCXMLExecutor}.
36 */
37 public class DatamodelTest extends TestCase {
38 /***
39 * Construct a new instance of SCXMLExecutorTest with
40 * the specified name
41 */
42 public DatamodelTest(String name) {
43 super(name);
44 }
45
46 public static Test suite() {
47 TestSuite suite = new TestSuite(DatamodelTest.class);
48 suite.setName("SCXML Executor Tests");
49 return suite;
50 }
51
52
53 private URL datamodel01jexl, datamodel02jexl, datamodel01jsp, datamodel02jsp;
54 private SCXMLExecutor exec01, exec02;
55
56 /***
57 * Set up instance variables required by this test case.
58 */
59 public void setUp() {
60 datamodel01jexl = this.getClass().getClassLoader().
61 getResource("org/apache/commons/scxml/env/jexl/datamodel-01.xml");
62 datamodel02jexl = this.getClass().getClassLoader().
63 getResource("org/apache/commons/scxml/env/jexl/datamodel-02.xml");
64 datamodel01jsp = this.getClass().getClassLoader().
65 getResource("org/apache/commons/scxml/env/jsp/datamodel-01.xml");
66 datamodel02jsp = this.getClass().getClassLoader().
67 getResource("org/apache/commons/scxml/env/jsp/datamodel-02.xml");
68 }
69
70 /***
71 * Tear down instance variables required by this test case.
72 */
73 public void tearDown() {
74 datamodel01jexl = datamodel02jexl = datamodel01jsp = datamodel02jsp = null;
75 }
76
77 /***
78 * Test the stateless model, simultaneous executions
79 */
80 public void testDatamodelSimultaneousJexl() {
81 exec01 = SCXMLTestHelper.getExecutor(datamodel01jexl,
82 new JexlContext(), new JexlEvaluator());
83 assertNotNull(exec01);
84 exec02 = SCXMLTestHelper.getExecutor(datamodel01jexl,
85 new JexlContext(), new JexlEvaluator());
86 assertNotNull(exec02);
87 assertFalse(exec01 == exec02);
88 runtest();
89 }
90
91 public void testDatamodelSimultaneousJsp() {
92 exec01 = SCXMLTestHelper.getExecutor(datamodel01jsp,
93 new ELContext(), new ELEvaluator());
94 assertNotNull(exec01);
95 exec02 = SCXMLTestHelper.getExecutor(datamodel01jsp,
96 new ELContext(), new ELEvaluator());
97 assertNotNull(exec02);
98 assertFalse(exec01 == exec02);
99 runtest();
100 }
101
102 public void testDatamodelNamespacePrefixedXPaths() {
103 exec01 = SCXMLTestHelper.getExecutor(datamodel02jexl,
104 new JexlContext(), new JexlEvaluator());
105 assertNotNull(exec01);
106 exec02 = SCXMLTestHelper.getExecutor(datamodel02jsp,
107 new ELContext(), new ELEvaluator());
108 assertNotNull(exec02);
109 assertFalse(exec01 == exec02);
110 runtest();
111 }
112
113 private void runtest() {
114 try {
115
116
117 Set currentStates = exec01.getCurrentStatus().getStates();
118 assertEquals(1, currentStates.size());
119 assertEquals("ten", ((State)currentStates.iterator().
120 next()).getId());
121 exec01 = SCXMLTestHelper.testExecutorSerializability(exec01);
122 currentStates = fireEvent("ten.done", exec01);
123 assertEquals(1, currentStates.size());
124 assertEquals("twenty", ((State)currentStates.iterator().
125 next()).getId());
126
127 currentStates = exec02.getCurrentStatus().getStates();
128 assertEquals(1, currentStates.size());
129 assertEquals("ten", ((State)currentStates.iterator().
130 next()).getId());
131
132 currentStates = fireEvent("twenty.done", exec01);
133 assertEquals(1, currentStates.size());
134 assertEquals("thirty", ((State)currentStates.iterator().
135 next()).getId());
136 exec01 = SCXMLTestHelper.testExecutorSerializability(exec01);
137
138 currentStates = fireEvent("ten.done", exec02);
139 assertEquals(1, currentStates.size());
140 assertEquals("twenty", ((State)currentStates.iterator().
141 next()).getId());
142 exec02 = SCXMLTestHelper.testExecutorSerializability(exec02);
143 currentStates = fireEvent("twenty.done", exec02);
144 assertEquals(1, currentStates.size());
145 assertEquals("thirty", ((State)currentStates.iterator().
146 next()).getId());
147 currentStates = fireEvent("thirty.done", exec02);
148 assertEquals(1, currentStates.size());
149 assertEquals("forty", ((State)currentStates.iterator().
150 next()).getId());
151
152 currentStates = fireEvent("thirty.done", exec01);
153 assertEquals(1, currentStates.size());
154 assertEquals("forty", ((State)currentStates.iterator().
155 next()).getId());
156 } catch (Exception e) {
157 fail(e.getMessage());
158 }
159 }
160
161 private Set fireEvent(String name, SCXMLExecutor exec) {
162 TriggerEvent[] evts = {new TriggerEvent(name,
163 TriggerEvent.SIGNAL_EVENT, null)};
164 try {
165 exec.triggerEvents(evts);
166 } catch (Exception e) {
167 fail(e.getMessage());
168 }
169 return exec.getCurrentStatus().getStates();
170 }
171
172 public static void main(String args[]) {
173 TestRunner.run(suite());
174 }
175 }
176