1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.apache.commons.scxml;
17
18 import java.net.URL;
19 import java.util.List;
20 import java.util.Map;
21 import java.util.Set;
22
23 import junit.framework.Test;
24 import junit.framework.TestCase;
25 import junit.framework.TestSuite;
26 import junit.textui.TestRunner;
27
28 import org.apache.commons.scxml.env.Tracer;
29 import org.apache.commons.scxml.env.jexl.JexlContext;
30 import org.apache.commons.scxml.env.jexl.JexlEvaluator;
31 import org.apache.commons.scxml.model.SCXML;
32 import org.apache.commons.scxml.model.State;
33 /***
34 * Unit tests {@link org.apache.commons.scxml.SCXMLExecutor}.
35 */
36 public class WizardsTest extends TestCase {
37 /***
38 * Construct a new instance of SCXMLExecutorTest with
39 * the specified name
40 */
41 public WizardsTest(String name) {
42 super(name);
43 }
44
45 public static Test suite() {
46 TestSuite suite = new TestSuite(WizardsTest.class);
47 suite.setName("SCXML Executor Tests, Wizard Style documents");
48 return suite;
49 }
50
51
52 private URL wizard01, wizard02;
53 private SCXMLExecutor exec;
54
55 /***
56 * Set up instance variables required by this test case.
57 */
58 public void setUp() {
59 wizard01 = this.getClass().getClassLoader().
60 getResource("org/apache/commons/scxml/env/jexl/wizard-01.xml");
61 wizard02 = this.getClass().getClassLoader().
62 getResource("org/apache/commons/scxml/env/jexl/wizard-02.xml");
63 }
64
65 /***
66 * Tear down instance variables required by this test case.
67 */
68 public void tearDown() {
69 wizard01 = wizard02 = null;
70 }
71
72 /***
73 * Test the wizard style SCXML documents, and send usage
74 */
75 public void testWizard01Sample() {
76 exec = SCXMLTestHelper.getExecutor(wizard01);
77 assertNotNull(exec);
78 try {
79 Set currentStates = exec.getCurrentStatus().getStates();
80 assertEquals(1, currentStates.size());
81 assertEquals("state1", ((State)currentStates.iterator().
82 next()).getId());
83 currentStates = SCXMLTestHelper.fireEvent(exec, "event2");
84 assertEquals(1, currentStates.size());
85 assertEquals("state2", ((State)currentStates.iterator().
86 next()).getId());
87 currentStates = SCXMLTestHelper.fireEvent(exec, "event4");
88 assertEquals(1, currentStates.size());
89 assertEquals("state4", ((State)currentStates.iterator().
90 next()).getId());
91 currentStates = SCXMLTestHelper.fireEvent(exec, "event3");
92 assertEquals(1, currentStates.size());
93 assertEquals("state3", ((State)currentStates.iterator().
94 next()).getId());
95 currentStates = SCXMLTestHelper.fireEvent(exec, "event3");
96 assertEquals(1, currentStates.size());
97 assertEquals("state3", ((State)currentStates.iterator().
98 next()).getId());
99 } catch (Exception e) {
100 fail(e.getMessage());
101 }
102 }
103
104 public void testWizard02Sample() {
105 SCXML scxml = SCXMLTestHelper.digest(wizard02);
106 exec = SCXMLTestHelper.getExecutor(new JexlContext(),
107 new JexlEvaluator(), scxml, new TestEventDispatcher(),
108 new Tracer());
109 assertNotNull(exec);
110 try {
111
112
113 Set currentStates = exec.getCurrentStatus().getStates();
114 assertEquals(1, currentStates.size());
115 assertEquals("state2", ((State)currentStates.iterator().
116 next()).getId());
117 currentStates = SCXMLTestHelper.fireEvent(exec, "event4");
118 assertEquals(1, currentStates.size());
119 assertEquals("state4", ((State)currentStates.iterator().
120 next()).getId());
121 } catch (Exception e) {
122 fail(e.getMessage());
123 }
124 }
125
126 class TestEventDispatcher implements EventDispatcher {
127
128 int callback = 0;
129 public void send(String sendId, String target, String targetType,
130 String event, Map params, Object hints, long delay,
131 List externalNodes) {
132 int i = ((Integer) params.get("aValue")).intValue();
133 switch (callback) {
134 case 0:
135 assertTrue(i == 2);
136 callback++;
137 break;
138 case 1:
139 assertTrue(i == 4);
140 callback++;
141 break;
142 default:
143 fail("More than 2 TestEventDispatcher <send> callbacks");
144 }
145 }
146 public void cancel(String sendId) {
147
148 fail("<cancel> TestEventDispatcher callback unexpected");
149 }
150 }
151
152 public static void main(String args[]) {
153 TestRunner.run(suite());
154 }
155 }