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.util.HashSet;
19 import java.util.Set;
20
21 import org.apache.commons.scxml.env.MockErrorReporter;
22 import org.apache.commons.scxml.env.SimpleErrorReporter;
23 import org.apache.commons.scxml.model.Parallel;
24 import org.apache.commons.scxml.model.State;
25 import org.apache.commons.scxml.model.TransitionTarget;
26
27 import junit.framework.Test;
28 import junit.framework.TestCase;
29 import junit.framework.TestSuite;
30
31 public class SCXMLHelperTest extends TestCase {
32
33 public SCXMLHelperTest(String testName) {
34 super(testName);
35 }
36
37 public static Test suite() {
38 return new TestSuite(SCXMLHelperTest.class);
39 }
40
41 public static void main(String args[]) {
42 String[] testCaseName = { SCXMLHelperTest.class.getName()};
43 junit.textui.TestRunner.main(testCaseName);
44 }
45
46 public void testIsStringEmptyNull() {
47 assertTrue(SCXMLHelper.isStringEmpty(null));
48 }
49
50 public void testIsStringEmptyZeroLength() {
51 assertTrue(SCXMLHelper.isStringEmpty(""));
52 }
53
54 public void testIsStringEmpty() {
55 assertFalse(SCXMLHelper.isStringEmpty("value"));
56 }
57
58 public void testIsDescendantNullParent() {
59 TransitionTarget state = new State();
60 TransitionTarget context = new State();
61
62 assertFalse(SCXMLHelper.isDescendant(state, context));
63 }
64
65 public void testIsDescendantNotEqual() {
66 TransitionTarget state = new State();
67 state.setParent(new State());
68 TransitionTarget context = new State();
69
70 assertFalse(SCXMLHelper.isDescendant(state, context));
71 }
72
73 public void testIsDescendantEqual() {
74 TransitionTarget state = new State();
75 TransitionTarget context = new State();
76 state.setParent(context);
77
78 assertTrue(SCXMLHelper.isDescendant(state, context));
79 }
80
81 public void testIsDescendantParentEqual() {
82 TransitionTarget state = new State();
83 TransitionTarget context = new State();
84 TransitionTarget parent = new State();
85
86 parent.setParent(context);
87 state.setParent(parent);
88
89 assertTrue(SCXMLHelper.isDescendant(state, context));
90 }
91
92 public void testGetAncestorClosureEmptySet() {
93 Set states = new HashSet();
94
95 Set returnValue = SCXMLHelper.getAncestorClosure(states, new HashSet());
96
97 assertEquals(0, returnValue.size());
98 }
99
100 public void testGetAncestorClosureUpperBoundNotNullAndContains() {
101 Set states = new HashSet();
102 TransitionTarget state = new State();
103 state.setId("1");
104 states.add(state);
105
106 Set upperBounds = new HashSet();
107 upperBounds.add(state);
108
109 Set returnValue = SCXMLHelper.getAncestorClosure(states, upperBounds);
110
111 assertEquals(1, returnValue.size());
112 assertEquals("1", ((TransitionTarget)returnValue.toArray()[0]).getId());
113 }
114
115 public void testGetAncestorClosureContainsParent() {
116 Set states = new HashSet();
117 TransitionTarget state = new State();
118 state.setId("1");
119 state.setParent(state);
120 states.add(state);
121
122 Set upperBounds = new HashSet();
123
124 Set returnValue = SCXMLHelper.getAncestorClosure(states, upperBounds);
125
126 assertEquals(1, returnValue.size());
127 assertEquals("1", ((TransitionTarget)returnValue.toArray()[0]).getId());
128 }
129
130 public void testIsLegalConfigNoStates() {
131 Set states = new HashSet();
132
133 assertTrue(SCXMLHelper.isLegalConfig(states, new SimpleErrorReporter()));
134 }
135
136 public void testIsLegalConfigInvalidParallel() {
137 Set states = new HashSet();
138 Parallel parallel = new Parallel();
139
140 Parallel parent = new Parallel();
141 parent.setId("4");
142
143 State state1 = new State();
144 state1.setId("1");
145 State state2 = new State();
146 state2.setId("2");
147
148 parent.addState(state1);
149 parent.addState(state2);
150
151 parallel.setParent(parent);
152
153 states.add(parallel);
154
155 MockErrorReporter errorReporter = new MockErrorReporter();
156
157 assertFalse(SCXMLHelper.isLegalConfig(states, errorReporter));
158 assertEquals(ErrorReporter.ILLEGAL_CONFIG, errorReporter.getErrCode());
159 assertEquals("Not all AND states active for parallel 4", errorReporter.getErrDetail());
160 }
161
162 public void testIsLegalConfigMultipleTopLevel() {
163 Set states = new HashSet();
164
165 State state1 = new State();
166 state1.setId("1");
167 State state2 = new State();
168 state2.setId("2");
169
170 states.add(state1);
171 states.add(state2);
172
173 MockErrorReporter errorReporter = new MockErrorReporter();
174
175 assertTrue(SCXMLHelper.isLegalConfig(states, errorReporter));
176 assertEquals(ErrorReporter.ILLEGAL_CONFIG, errorReporter.getErrCode());
177 assertEquals("Multiple top-level OR states active!", errorReporter.getErrDetail());
178 }
179
180 public void testIsLegalConfigMultipleStatesActive() {
181 Set states = new HashSet();
182
183 State state1 = new State();
184 state1.setId("1");
185
186 State state2 = new State();
187 state2.setId("2");
188
189 State parent = new State();
190 parent.setId("parentid");
191
192 state2.setParent(parent);
193 state1.setParent(parent);
194
195 states.add(state1);
196 states.add(state2);
197
198 MockErrorReporter errorReporter = new MockErrorReporter();
199
200 assertFalse(SCXMLHelper.isLegalConfig(states, errorReporter));
201 assertEquals(ErrorReporter.ILLEGAL_CONFIG, errorReporter.getErrCode());
202 assertEquals("Multiple OR states active for state parentid", errorReporter.getErrDetail());
203 }
204
205 public void testGetLCASameTarget() {
206 TransitionTarget target = new State();
207 target.setId("1");
208
209 TransitionTarget returnValue = SCXMLHelper.getLCA(target, target);
210
211 assertEquals("1", returnValue.getId());
212 }
213
214 public void testGetLCAIsDescendant() {
215 TransitionTarget target = new State();
216 target.setId("1");
217
218 TransitionTarget parent = new State();
219 parent.setId("2");
220
221 target.setParent(parent);
222
223 TransitionTarget returnValue = SCXMLHelper.getLCA(target, parent);
224
225 assertEquals("2", returnValue.getId());
226 }
227
228 public void testGetLCAIsDescendantReverse() {
229 TransitionTarget target = new State();
230 target.setId("1");
231
232 TransitionTarget parent = new State();
233 parent.setId("2");
234
235 parent.setParent(target);
236
237 TransitionTarget returnValue = SCXMLHelper.getLCA(target, parent);
238
239 assertEquals("1", returnValue.getId());
240 }
241
242 public void testGetLCANull() {
243 TransitionTarget target = new State();
244 target.setId("1");
245
246 TransitionTarget notParent = new State();
247 notParent.setId("2");
248
249 TransitionTarget returnValue = SCXMLHelper.getLCA(target, notParent);
250
251 assertNull(returnValue);
252 }
253
254 public void testGetLCADistantAncestor() {
255 TransitionTarget target1 = new State();
256 target1.setId("1");
257
258 TransitionTarget target2 = new State();
259 target2.setId("2");
260
261 TransitionTarget parent = new State();
262 parent.setId("3");
263
264 target1.setParent(parent);
265 target2.setParent(parent);
266
267 TransitionTarget returnValue = SCXMLHelper.getLCA(target1, target2);
268
269 assertEquals("3", returnValue.getId());
270 }
271 }