1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.scxml;
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.env.SimpleContext;
28 import org.apache.commons.scxml.env.jsp.ELEvaluator;
29 import org.apache.commons.scxml.model.State;
30 /***
31 * Unit tests {@link org.apache.commons.scxml.SCXMLExecutor}.
32 */
33 public class SCXMLExecutorTest extends TestCase {
34 /***
35 * Construct a new instance of SCXMLExecutorTest with
36 * the specified name
37 */
38 public SCXMLExecutorTest(String name) {
39 super(name);
40 }
41
42 public static Test suite() {
43 TestSuite suite = new TestSuite(SCXMLExecutorTest.class);
44 suite.setName("SCXML Executor Tests");
45 return suite;
46 }
47
48
49 private URL microwave01jsp, microwave02jsp, microwave01jexl,
50 microwave02jexl, transitions01, transitions02, prefix01, send01, send02;
51 private SCXMLExecutor exec;
52
53 /***
54 * Set up instance variables required by this test case.
55 */
56 public void setUp() {
57 microwave01jsp = this.getClass().getClassLoader().
58 getResource("org/apache/commons/scxml/env/jsp/microwave-01.xml");
59 microwave02jsp = this.getClass().getClassLoader().
60 getResource("org/apache/commons/scxml/env/jsp/microwave-02.xml");
61 microwave01jexl = this.getClass().getClassLoader().
62 getResource("org/apache/commons/scxml/env/jexl/microwave-01.xml");
63 microwave02jexl = this.getClass().getClassLoader().
64 getResource("org/apache/commons/scxml/env/jexl/microwave-02.xml");
65 transitions01 = this.getClass().getClassLoader().
66 getResource("org/apache/commons/scxml/transitions-01.xml");
67 transitions02 = this.getClass().getClassLoader().
68 getResource("org/apache/commons/scxml/transitions-02.xml");
69 prefix01 = this.getClass().getClassLoader().
70 getResource("org/apache/commons/scxml/prefix-01.xml");
71 send01 = this.getClass().getClassLoader().
72 getResource("org/apache/commons/scxml/send-01.xml");
73 send02 = this.getClass().getClassLoader().
74 getResource("org/apache/commons/scxml/send-02.xml");
75 }
76
77 /***
78 * Tear down instance variables required by this test case.
79 */
80 public void tearDown() {
81 microwave01jsp = microwave02jsp = microwave01jexl = microwave02jexl =
82 transitions01 = transitions02 = prefix01 = send01 = send02 = null;
83 }
84
85 /***
86 * Test the implementation
87 */
88 public void testSCXMLExecutorMicrowave01JspSample() {
89 exec = SCXMLTestHelper.getExecutor(microwave01jsp,
90 new SimpleContext(), new ELEvaluator());
91 assertNotNull(exec);
92 checkMicrowave01Sample();
93 }
94
95 public void testSCXMLExecutorMicrowave02JspSample() {
96 exec = SCXMLTestHelper.getExecutor(microwave02jsp,
97 new SimpleContext(), new ELEvaluator());
98 assertNotNull(exec);
99 checkMicrowave02Sample();
100 }
101
102 public void testSCXMLExecutorMicrowave01JexlSample() {
103 exec = SCXMLTestHelper.getExecutor(microwave01jexl);
104 assertNotNull(exec);
105 checkMicrowave01Sample();
106 }
107
108 public void testSCXMLExecutorMicrowave02JexlSample() {
109 exec = SCXMLTestHelper.getExecutor(microwave02jexl);
110 assertNotNull(exec);
111 checkMicrowave02Sample();
112 }
113
114 public void testSCXMLExecutorPrefix01Sample() {
115 exec = SCXMLTestHelper.getExecutor(prefix01);
116 assertNotNull(exec);
117 Set currentStates = exec.getCurrentStatus().getStates();
118 assertEquals(1, currentStates.size());
119 assertEquals("ten", ((State)currentStates.iterator().
120 next()).getId());
121 currentStates = SCXMLTestHelper.fireEvent(exec, "ten.done");
122 assertEquals(1, currentStates.size());
123 assertEquals("twenty", ((State)currentStates.iterator().
124 next()).getId());
125 }
126
127 public void testSCXMLExecutorTransitions01Sample() {
128 exec = SCXMLTestHelper.getExecutor(transitions01);
129 assertNotNull(exec);
130 try {
131 Set currentStates = SCXMLTestHelper.fireEvent(exec, "ten.done");
132 assertEquals(1, currentStates.size());
133 assertEquals("twenty_one", ((State)currentStates.iterator().
134 next()).getId());
135 currentStates = SCXMLTestHelper.fireEvent(exec, "twenty_one.done");
136 assertEquals(1, currentStates.size());
137 assertEquals("twenty_two", ((State)currentStates.iterator().
138 next()).getId());
139 currentStates = SCXMLTestHelper.fireEvent(exec, "twenty_two.done");
140 assertEquals(3, exec.getCurrentStatus().getStates().size());
141 } catch (Exception e) {
142 fail(e.getMessage());
143 }
144 }
145
146 public void testSCXMLExecutorTransitions02Sample() {
147 exec = SCXMLTestHelper.getExecutor(transitions02);
148 assertNotNull(exec);
149 try {
150 Set currentStates = SCXMLTestHelper.fireEvent(exec, "ten.stay");
151 assertEquals(1, currentStates.size());
152 assertEquals("ten", ((State)currentStates.iterator().
153 next()).getId());
154 exec = SCXMLTestHelper.testExecutorSerializability(exec);
155 currentStates = SCXMLTestHelper.fireEvent(exec, "ten.self");
156 assertEquals(1, currentStates.size());
157 assertEquals("ten", ((State)currentStates.iterator().
158 next()).getId());
159 currentStates = SCXMLTestHelper.fireEvent(exec, "ten.done");
160 assertEquals(1, currentStates.size());
161 assertEquals("twenty", ((State)currentStates.iterator().
162 next()).getId());
163 } catch (Exception e) {
164 fail(e.getMessage());
165 }
166 }
167
168 public void testSend01Sample() {
169 exec = SCXMLTestHelper.getExecutor(send01);
170 assertNotNull(exec);
171 try {
172 Set currentStates = exec.getCurrentStatus().getStates();
173 assertEquals(1, currentStates.size());
174 assertEquals("ten", ((State)currentStates.iterator().
175 next()).getId());
176 currentStates = SCXMLTestHelper.fireEvent(exec, "ten.done");
177 assertEquals(1, currentStates.size());
178 assertEquals("twenty", ((State)currentStates.iterator().
179 next()).getId());
180 } catch (Exception e) {
181 fail(e.getMessage());
182 }
183 }
184
185 public void testSend02TargettypeSCXMLSample() {
186 exec = SCXMLTestHelper.getExecutor(send02);
187 assertNotNull(exec);
188 try {
189 Set currentStates = exec.getCurrentStatus().getStates();
190 assertEquals(1, currentStates.size());
191 assertEquals("ninety", ((State)currentStates.iterator().
192 next()).getId());
193 } catch (Exception e) {
194 fail(e.getMessage());
195 }
196 }
197
198 private void checkMicrowave01Sample() {
199 try {
200 Set currentStates = SCXMLTestHelper.fireEvent(exec, "turn_on");
201 assertEquals(1, currentStates.size());
202 assertEquals("cooking", ((State)currentStates.iterator().
203 next()).getId());
204 } catch (Exception e) {
205 fail(e.getMessage());
206 }
207 }
208
209 private void checkMicrowave02Sample() {
210 try {
211 Set currentStates = SCXMLTestHelper.fireEvent(exec, "turn_on");
212 assertEquals(2, currentStates.size());
213 String id = ((State)currentStates.iterator().next()).getId();
214 assertTrue(id.equals("closed") || id.equals("cooking"));
215 } catch (Exception e) {
216 fail(e.getMessage());
217 }
218 }
219
220 public static void main(String args[]) {
221 TestRunner.run(suite());
222 }
223 }
224