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