1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.scxml.io;
18  
19  import java.util.ArrayList;
20  import java.util.List;
21  
22  import junit.framework.Test;
23  import junit.framework.TestCase;
24  import junit.framework.TestSuite;
25  
26  import org.apache.commons.scxml.model.Assign;
27  import org.apache.commons.scxml.model.Cancel;
28  import org.apache.commons.scxml.model.Else;
29  import org.apache.commons.scxml.model.ElseIf;
30  import org.apache.commons.scxml.model.Exit;
31  import org.apache.commons.scxml.model.If;
32  import org.apache.commons.scxml.model.Log;
33  import org.apache.commons.scxml.model.OnEntry;
34  import org.apache.commons.scxml.model.OnExit;
35  import org.apache.commons.scxml.model.SCXML;
36  import org.apache.commons.scxml.model.Send;
37  import org.apache.commons.scxml.model.State;
38  import org.apache.commons.scxml.model.TransitionTarget;
39  import org.apache.commons.scxml.model.Var;
40  
41  public class SCXMLSerializerTest extends TestCase {
42  
43      public SCXMLSerializerTest(String testName) {
44          super(testName);
45      }
46  
47      public static Test suite() {
48          return new TestSuite(SCXMLSerializerTest.class);
49      }
50  
51      public static void main(String args[]) {
52          String[] testCaseName = { SCXMLSerializerTest.class.getName()};
53          junit.textui.TestRunner.main(testCaseName);
54      }
55      
56      public void testSerializeSCXMLNoStates() {
57          SCXML scxml = new SCXML();
58          scxml.setXmlns("namespace");
59          scxml.setVersion("version1");
60          scxml.setInitialstate("off");
61          scxml.addState(new State());
62          
63          String assertValue = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
64              + "<scxml xmlns=\"namespace\" version=\"version1\" "
65              + "initialstate=\"off\">\n <state>\n </state>\n</scxml>\n";
66          
67          assertEquals(assertValue, SCXMLSerializer.serialize(scxml));
68      }
69      
70      public void testSerializeSend() {
71          Send send = new Send();
72          send.setSendid("1");
73          send.setTarget("newTarget");
74          send.setTargettype("newTargetType");
75          send.setNamelist("names");
76          send.setDelay("4 secs");
77          send.setEvent("turnoff");
78          send.setHints("guess");
79          
80          String assertValue = " <send sendid=\"1\" " +
81                  "target=\"newTarget\" " +
82                  "targetType=\"newTargetType\" " +
83                  "namelist=\"names\" " +
84                  "delay=\"4 secs\" " +
85                  "events=\"turnoff\" " +
86                  "hints=\"guess\">\n </send>\n";
87          
88          StringBuffer returnValue = new StringBuffer(); 
89          SCXMLSerializer.serializeSend(returnValue, send, " "); 
90          
91          assertEquals(assertValue.toString(), returnValue.toString());
92      }
93  
94      public void testSerializeActionsListNull() {
95          TransitionTarget target = new State();
96          target.setId("1");
97          
98          StringBuffer returnValue = new StringBuffer();
99          boolean returnBoolean = SCXMLSerializer.serializeActions(returnValue, null, " ");
100         
101         assertFalse(returnBoolean);
102         assertEquals(0, returnValue.length());
103     }
104     
105     public void testSerializeActionsVar() {
106         Var var = new Var();
107         var.setName("newName");
108         var.setExpr("newExpression");
109         
110         List values = new ArrayList();
111         values.add(var);
112         
113         String actualValue = " <var name=\"newName\" expr=\"newExpression\"/>\n";
114         
115         StringBuffer returnValue = new StringBuffer();
116         boolean returnBoolean = SCXMLSerializer.serializeActions(returnValue, values, " ");
117         
118         assertFalse(returnBoolean);
119         assertEquals(actualValue, returnValue.toString());
120     }
121     
122     public void testSerializeActionsAssign() {
123         Assign assign = new Assign();
124         assign.setName("newName");
125         assign.setExpr("newExpression");
126         
127         List values = new ArrayList();
128         values.add(assign);
129         
130         String actualValue = " <assign name=\"newName\" expr=\"newExpression\"/>\n";
131         
132         StringBuffer returnValue = new StringBuffer();
133         boolean returnBoolean = SCXMLSerializer.serializeActions(returnValue, values, " ");
134         
135         assertFalse(returnBoolean);
136         assertEquals(actualValue, returnValue.toString());
137     }
138     
139     public void testSerializeActionsCancel() {
140         Cancel cancel = new Cancel();
141         cancel.setSendid("1");
142         
143         List values = new ArrayList();
144         values.add(cancel);
145         
146         String actualValue = " <cancel sendid=\"1\"/>\n";
147         
148         StringBuffer returnValue = new StringBuffer();
149         boolean returnBoolean = SCXMLSerializer.serializeActions(returnValue, values, " ");
150         
151         assertFalse(returnBoolean);
152         assertEquals(actualValue, returnValue.toString());
153     }
154     
155     public void testSerializeActionsLog() {
156         Log log = new Log();
157         log.setExpr("newExpression");
158         
159         List values = new ArrayList();
160         values.add(log);
161         
162         String actualValue = " <log expr=\"newExpression\"/>\n";
163         
164         StringBuffer returnValue = new StringBuffer();
165         boolean returnBoolean = SCXMLSerializer.serializeActions(returnValue, values, " ");
166         
167         assertFalse(returnBoolean);
168         assertEquals(actualValue, returnValue.toString());
169     }
170     
171     public void testSerializeActionsExit() {
172         Exit exit = new Exit();
173         exit.setExpr("newExpression");
174         exit.setNamelist("names");
175         
176         List values = new ArrayList();
177         values.add(exit);
178         
179         String actualValue = " <exit expr=\"newExpression\" namelist=\"names\"/>\n";
180         
181         StringBuffer returnValue = new StringBuffer();
182         boolean returnBoolean = SCXMLSerializer.serializeActions(returnValue, values, " ");
183         
184         assertTrue(returnBoolean);
185         assertEquals(actualValue, returnValue.toString());
186     }
187     
188     public void testSerializeActionsElse() {
189         Else elseValue = new Else();
190         
191         List values = new ArrayList();
192         values.add(elseValue);
193         
194         String actualValue = " <else/>\n";
195         
196         StringBuffer returnValue = new StringBuffer();
197         boolean returnBoolean = SCXMLSerializer.serializeActions(returnValue, values, " ");
198         
199         assertFalse(returnBoolean);
200         assertEquals(actualValue, returnValue.toString());
201     }
202     
203     public void testSerializeActionsElseIf() {
204         ElseIf elseIf = new ElseIf();
205         elseIf.setCond("newCondition");
206         
207         List values = new ArrayList();
208         values.add(elseIf);
209         
210         String actualValue = " <elseif cond=\"newCondition\" />\n";
211         
212         StringBuffer returnValue = new StringBuffer();
213         boolean returnBoolean = SCXMLSerializer.serializeActions(returnValue, values, " ");
214         
215         assertFalse(returnBoolean);
216         assertEquals(actualValue, returnValue.toString());
217     }
218     
219     public void testSerializeIf() {
220         If ifValue = new If();
221         ifValue.setCond("newCondition");
222         
223         List values = new ArrayList();
224         values.add(ifValue);
225         
226         String actualValue = " <if cond=\"newCondition\">\n </if>\n";
227         
228         StringBuffer returnValue = new StringBuffer();
229         boolean returnBoolean = SCXMLSerializer.serializeActions(returnValue, values, " ");
230         
231         assertFalse(returnBoolean);
232         assertEquals(actualValue, returnValue.toString());
233     }
234     
235     public void testSerializeOnEntrySizeZero() {
236         TransitionTarget target = new State();
237         target.setOnEntry(new OnEntry());
238 
239         String actualValue = "";
240 
241         StringBuffer returnValue = new StringBuffer();
242         SCXMLSerializer.serializeOnEntry(returnValue, target, " ");
243         
244         assertEquals(actualValue, returnValue.toString());
245     }
246 
247     public void testSerializeOnEntry() {
248         TransitionTarget target = new State();
249         
250         OnEntry onEntry = new OnEntry();
251         onEntry.addAction(new Else());
252         
253         target.setOnEntry(onEntry);
254 
255         String actualValue = " <onentry>\n  <else/>\n </onentry>\n";
256 
257         StringBuffer returnValue = new StringBuffer();
258         SCXMLSerializer.serializeOnEntry(returnValue, target, " ");
259         
260         assertEquals(actualValue, returnValue.toString());
261     }
262     
263     public void testSerializeOnExitSizeZero() {
264         TransitionTarget target = new State();
265         target.setOnExit(new OnExit());
266 
267         String actualValue = "";
268 
269         StringBuffer returnValue = new StringBuffer();
270         SCXMLSerializer.serializeOnExit(returnValue, target, " ");
271         
272         assertEquals(actualValue, returnValue.toString());
273     }
274 
275     public void testSerializeOnExit() {
276         TransitionTarget target = new State();
277         
278         OnExit onExit = new OnExit();
279         onExit.addAction(new Else());
280         
281         target.setOnExit(onExit);
282 
283         String actualValue = " <onexit>\n  <else/>\n </onexit>\n";
284 
285         StringBuffer returnValue = new StringBuffer();
286         SCXMLSerializer.serializeOnExit(returnValue, target, " ");
287         
288         assertEquals(actualValue, returnValue.toString());
289     }
290 
291 }