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.jexl.JexlContext;
30 import org.apache.commons.scxml.env.jexl.JexlEvaluator;
31 import org.apache.commons.scxml.env.jsp.ELContext;
32 import org.apache.commons.scxml.env.jsp.ELEvaluator;
33 /***
34 * Unit tests {@link org.apache.commons.scxml.SCXMLExecutor}.
35 */
36 public class DatamodelTest extends TestCase {
37 /***
38 * Construct a new instance of SCXMLExecutorTest with
39 * the specified name
40 */
41 public DatamodelTest(String name) {
42 super(name);
43 }
44
45 public static Test suite() {
46 TestSuite suite = new TestSuite(DatamodelTest.class);
47 suite.setName("SCXML Executor Tests");
48 return suite;
49 }
50
51
52 private URL datamodel01jexl, datamodel01jsp;
53 private SCXMLExecutor exec01, exec02;
54
55 /***
56 * Set up instance variables required by this test case.
57 */
58 public void setUp() {
59 datamodel01jexl = this.getClass().getClassLoader().
60 getResource("org/apache/commons/scxml/env/jexl/datamodel-01.xml");
61 datamodel01jsp = this.getClass().getClassLoader().
62 getResource("org/apache/commons/scxml/env/jsp/datamodel-01.xml");
63 }
64
65 /***
66 * Tear down instance variables required by this test case.
67 */
68 public void tearDown() {
69 datamodel01jexl = datamodel01jsp = null;
70 }
71
72 /***
73 * Test the stateless model, simultaneous executions
74 */
75 public void testDatamodelSimultaneousJexl() {
76 exec01 = SCXMLTestHelper.getExecutor(datamodel01jexl,
77 new JexlContext(), new JexlEvaluator());
78 assertNotNull(exec01);
79 exec02 = SCXMLTestHelper.getExecutor(datamodel01jexl,
80 new JexlContext(), new JexlEvaluator());
81 assertNotNull(exec02);
82 assertFalse(exec01 == exec02);
83 runtest();
84 }
85
86 public void testDatamodelSimultaneousJsp() {
87 exec01 = SCXMLTestHelper.getExecutor(datamodel01jsp,
88 new ELContext(), new ELEvaluator());
89 assertNotNull(exec01);
90 exec02 = SCXMLTestHelper.getExecutor(datamodel01jsp,
91 new ELContext(), new ELEvaluator());
92 assertNotNull(exec02);
93 assertFalse(exec01 == exec02);
94 runtest();
95 }
96
97 private void runtest() {
98 try {
99
100
101 Set currentStates = exec01.getCurrentStatus().getStates();
102 assertEquals(1, currentStates.size());
103 assertEquals("ten", ((State)currentStates.iterator().
104 next()).getId());
105 currentStates = fireEvent("ten.done", exec01);
106 assertEquals(1, currentStates.size());
107 assertEquals("twenty", ((State)currentStates.iterator().
108 next()).getId());
109
110 currentStates = exec02.getCurrentStatus().getStates();
111 assertEquals(1, currentStates.size());
112 assertEquals("ten", ((State)currentStates.iterator().
113 next()).getId());
114
115 currentStates = fireEvent("twenty.done", exec01);
116 assertEquals(1, currentStates.size());
117 assertEquals("thirty", ((State)currentStates.iterator().
118 next()).getId());
119
120 currentStates = fireEvent("ten.done", exec02);
121 assertEquals(1, currentStates.size());
122 assertEquals("twenty", ((State)currentStates.iterator().
123 next()).getId());
124 currentStates = fireEvent("twenty.done", exec02);
125 assertEquals(1, currentStates.size());
126 assertEquals("thirty", ((State)currentStates.iterator().
127 next()).getId());
128 currentStates = fireEvent("thirty.done", exec02);
129 assertEquals(1, currentStates.size());
130 assertEquals("forty", ((State)currentStates.iterator().
131 next()).getId());
132
133 currentStates = fireEvent("thirty.done", exec01);
134 assertEquals(1, currentStates.size());
135 assertEquals("forty", ((State)currentStates.iterator().
136 next()).getId());
137 } catch (Exception e) {
138 fail(e.getMessage());
139 }
140 }
141
142 private Set fireEvent(String name, SCXMLExecutor exec) {
143 TriggerEvent[] evts = {new TriggerEvent(name,
144 TriggerEvent.SIGNAL_EVENT, null)};
145 try {
146 exec.triggerEvents(evts);
147 } catch (Exception e) {
148 fail(e.getMessage());
149 }
150 return exec.getCurrentStatus().getStates();
151 }
152
153 public static void main(String args[]) {
154 TestRunner.run(suite());
155 }
156 }
157