KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > sapia > soto > state > StateMachineTest


1 package org.sapia.soto.state;
2
3 import junit.framework.TestCase;
4
5 import org.sapia.soto.state.config.StateInterceptor;
6
7 import org.sapia.util.xml.confix.ConfigurationException;
8
9
10 /**
11  * @author Yanick Duchesne
12  * <dl>
13  * <dt><b>Copyright:</b><dd>Copyright &#169; 2002-2003 <a HREF="http://www.sapia-oss.org">Sapia Open Source Software</a>. All Rights Reserved.</dd></dt>
14  * <dt><b>License:</b><dd>Read the license.txt file of the jar or visit the
15  * <a HREF="http://www.sapia-oss.org/license.html">license page</a> at the Sapia OSS web site</dd></dt>
16  * </dl>
17  */

18 public class StateMachineTest extends TestCase {
19   /**
20    *
21    */

22   public StateMachineTest(String JavaDoc name) {
23     super(name);
24   }
25
26   public void testAddGetFlow() throws Exception JavaDoc {
27     StateMachine engine = new StateMachine();
28     TestState main = new TestState(true);
29     main.setId("main");
30
31     TestState err = new TestState(true);
32     err.setId("err");
33
34     TestState succ = new TestState(true);
35     succ.setId("succ");
36
37     TestState dupl = new TestState(true);
38     dupl.setId("main");
39     engine.addState(main);
40     engine.addState(err);
41     engine.addState(succ);
42
43     try {
44       engine.addState(dupl);
45       throw new Exception JavaDoc("Flow with duplicate ID should not have been added");
46     } catch (ConfigurationException e) {
47       //ok
48
}
49
50     engine.init();
51     super.assertEquals(3, engine.getStmContext()._states.size());
52
53     super.assertTrue(engine.getState("main") != null);
54     super.assertTrue(engine.getState("foo") == null);
55   }
56
57   public void testExecuteSuccess() throws Exception JavaDoc {
58     StateMachine engine = new StateMachine();
59     TestState main = new TestState(true);
60     main.setId("main");
61     main.setSuccess("succ");
62     main.setError("err");
63
64     TestState err = new TestState(true);
65     err.setId("err");
66
67     TestState succ = new TestState(true);
68     succ.setId("succ");
69     engine.addState(main);
70     engine.addState(err);
71     engine.addState(succ);
72     engine.init();
73     engine.execute("main", new ContextImpl());
74     super.assertTrue(main.exec);
75     super.assertTrue(succ.exec);
76     super.assertTrue(!err.exec);
77   }
78
79   public void testExecuteFailure() throws Exception JavaDoc {
80     StateMachine engine = new StateMachine();
81     TestState main = new TestState(false);
82     main.setId("main");
83     main.setSuccess("succ");
84     main.setError("err");
85
86     TestState err = new TestState(true);
87     err.setId("err");
88
89     TestState succ = new TestState(true);
90     succ.setId("succ");
91     engine.addState(main);
92     engine.addState(err);
93     engine.addState(succ);
94     engine.init();
95     engine.execute("main", new ContextImpl());
96     super.assertTrue(main.exec);
97     super.assertTrue(!succ.exec);
98     super.assertTrue(err.exec);
99   }
100
101   public void testMerge() throws Exception JavaDoc {
102     StateMachine engine1 = new StateMachine();
103     TestState f1 = new TestState(false);
104     f1.setId("main");
105     engine1.addState(f1);
106
107     StateMachine engine2 = new StateMachine();
108     TestState f2 = new TestState(false);
109     f2.setId("main");
110     engine2.addState(f2);
111
112     try {
113       engine1.merge(engine2);
114       throw new Exception JavaDoc("Duplicate should not have been merged");
115     } catch (ConfigurationException e) {
116       // ok
117
}
118
119     engine2 = new StateMachine();
120     f2 = new TestState(false);
121     f2.setId("second");
122     engine2.addState(f2);
123     engine1.merge(engine2);
124     super.assertTrue(engine1.getState("main") != null);
125     super.assertTrue(engine1.getState("second") != null);
126   }
127
128   public void testError() throws Exception JavaDoc {
129     StateMachine engine = new StateMachine();
130     engine.addState(new TestErrFlow("err", false));
131
132     try {
133       engine.init();
134       engine.execute("err", new ContextImpl());
135       throw new Exception JavaDoc("Engine should have thrown a FlowExecException");
136     } catch (StateExecException e) {
137       // ok
138
}
139
140     engine = new StateMachine();
141     engine.addState(new TestErrFlow("err", true));
142     engine.init();
143     engine.execute("err", new ContextImpl());
144   }
145
146   public void testFlowListener() throws Exception JavaDoc {
147     StateMachine engine = new StateMachine();
148     TestFlowListener listener = new TestFlowListener();
149     engine.addStateExecListener(listener);
150     engine.addState(new TestErrFlow("err", true));
151     engine.init();
152     engine.execute("err", new ContextImpl());
153     super.assertTrue(listener.pre);
154     super.assertTrue(listener.err);
155     super.assertTrue(!listener.post);
156
157     engine = new StateMachine();
158
159     TestState tf = new TestState(true);
160     tf.setId("state");
161     listener = new TestFlowListener();
162     engine.addStateExecListener(listener);
163     engine.addState(tf);
164     engine.init();
165     engine.execute("state", new ContextImpl());
166     super.assertTrue(listener.pre);
167     super.assertTrue(!listener.err);
168     super.assertTrue(listener.post);
169   }
170
171   public void testStateDecorator() throws Exception JavaDoc {
172     StateMachine engine = new StateMachine();
173     TestState pre1 = new TestState(true);
174     pre1.setId("pre1");
175
176     TestState pre2 = new TestState(true);
177     pre2.setId("pre2");
178
179     TestState post1 = new TestState(true);
180     post1.setId("post1");
181
182     TestState post2 = new TestState(true);
183     post2.setId("post2");
184     engine.addState(pre1);
185     engine.addState(pre2);
186     engine.addState(post1);
187     engine.addState(post2);
188
189     TestState main = new TestState(true);
190     main.setId("main");
191
192     StateInterceptor dec = new StateInterceptor();
193     dec.setPreExec("pre1, pre2");
194     dec.setPostExec("post1, post2");
195     dec.handleObject(null, main);
196     engine.addState(dec);
197     engine.init();
198     engine.execute("main", new ContextImpl());
199     super.assertTrue(pre1.exec);
200     super.assertTrue(pre2.exec);
201     super.assertTrue(main.exec);
202     super.assertTrue(post1.exec);
203     super.assertTrue(post2.exec);
204   }
205   
206   public void testAddModule() throws Exception JavaDoc{
207     StateMachine stm = new StateMachine();
208     Module someModule = new Module();
209         StateMachine stm2 = new StateMachine();
210         someModule.setStateMachine(stm2);
211         TestState someState = new TestState(true);
212         someState.setId("someState");
213         stm2.addState(someState);
214         stm.addModule(someModule);
215         stm.init();
216         stm.execute("someState", new ContextImpl());
217             
218   }
219 }
220
Popular Tags