View Javadoc
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  
18  package org.apache.commons.scxml2.env.javascript;
19  
20  import java.util.AbstractMap;
21  import java.util.HashMap;
22  import java.util.Map;
23  
24  import org.apache.commons.scxml2.Context;
25  import org.junit.Assert;
26  import org.junit.Before;
27  import org.junit.Test;
28  
29  import javax.script.Bindings;
30  import javax.script.SimpleBindings;
31  
32  /**
33   * JUnit 3 test case for the JSBinding implementation that imports
34   * SCXML context variables into a JavaScript bindings. Includes tests
35   * for:
36   * <ul>
37   * <li> constructor
38   * </ul>
39   */
40  public class JSBindingsTest {
41      // TEST CONSTANTS
42  
43      private static final Map.Entry<String,Object> KOALA   = new AbstractMap.SimpleEntry<String,Object>("bear","koala");
44      private static final Map.Entry<String,Object> GRIZZLY = new AbstractMap.SimpleEntry<String,Object>("bear","grizzly");
45      private static final Map.Entry<String,Object> FELIX   = new AbstractMap.SimpleEntry<String,Object>("cat", "felix");
46      private static final Map.Entry<String,Object> ROVER   = new AbstractMap.SimpleEntry<String,Object>("dog", "rover");
47  
48      // TEST VARIABLES
49  
50      // TEST SETUP
51  
52      /**
53       * Creates and initializes an SCXML data model in the context.
54       */
55      @Before
56      public void setUp() throws Exception {
57      }
58  
59      // CLASS METHODS
60  
61      /**
62       * Stand-alone test runtime.
63       */
64      public static void main(String args[]) {
65          String[] testCaseName = {JSBindingsTest.class.getName()};
66          junit.textui.TestRunner.main(testCaseName);
67      }
68  
69      // INSTANCE METHOD TESTS
70  
71      /**
72       * Tests implementation of JSBindings constructor.
73       */    
74      @Test
75      public void testConstructor() {
76          Assert.assertNotNull(new JSBindings(new JSContext(),new SimpleBindings()));
77      }
78  
79      /**
80       * Test implementation of JSBindings constructor with invalid SCXML context.
81       */    
82      @Test
83      public void testInvalidContextConstructor() {
84          try {
85               Assert.assertNotNull(new JSBindings(null,new SimpleBindings()));
86               Assert.fail("JSBindings constructor accepted invalid SCXML context");
87  
88          } catch (IllegalArgumentException x) {
89               // expected, ignore
90          }
91      }
92  
93      /**
94       * Test implementation of JSBindings constructor with invalid Javascript bindings.
95       */    
96      @Test
97      public void testInvalidBindingsConstructor() {
98          try {
99               Assert.assertNotNull(new JSBindings(new JSContext(),null));
100              Assert.fail("JSBindings constructor accepted invalid Javascript bindings");
101 
102         } catch (IllegalArgumentException x) {
103              // expected, ignore
104         }
105     }
106 
107     /**
108      * Tests the <code>containsKey</code> method with items in the SCXML context as well as the
109      * JavaScript Bindings.
110      *
111      */    
112     @Test
113     public void testContainsKey() {
114         Context    context  = new JSContext     ();
115         Bindings   bindings = new SimpleBindings();
116         JSBindings jsx      = new JSBindings    (context,bindings);
117 
118         Assert.assertFalse("Invalid SCXML context",      context.has         ("bear"));
119         Assert.assertFalse("Invalid Javascript bindings",bindings.containsKey("bear"));
120         Assert.assertFalse("Invalid JSbindings",         jsx.containsKey     ("bear"));
121 
122         context.set("bear","koala");
123         Assert.assertTrue ("Invalid SCXML context",      context.has         ("bear"));
124         Assert.assertFalse("Invalid Javascript bindings",bindings.containsKey("bear"));
125         Assert.assertTrue ("Invalid JSbindings",         jsx.containsKey     ("bear"));
126 
127         context.reset();
128         bindings.put ("bear","grizzly");
129         Assert.assertFalse  ("Invalid SCXML context",      context.has         ("bear"));
130         Assert.assertTrue   ("Invalid Javascript bindings",bindings.containsKey("bear"));
131         Assert.assertTrue   ("Invalid JSbindings",         jsx.containsKey     ("bear"));
132 
133         context.set ("bear","koala");
134         bindings.put("bear","grizzly");
135         Assert.assertTrue  ("Invalid SCXML context",      context.has         ("bear"));
136         Assert.assertTrue  ("Invalid Javascript bindings",bindings.containsKey("bear"));
137         Assert.assertTrue  ("Invalid JSbindings",         jsx.containsKey     ("bear"));
138     }
139 
140     /**
141      * Tests the <code>keySet</code> method with items in the SCXML context as well as the
142      * JavaScript Bindings.
143      *
144      */    
145     @Test
146     public void testKeySet() {
147         Context    context  = new JSContext     ();
148         Bindings   bindings = new SimpleBindings();
149         JSBindings jsx      = new JSBindings    (context,bindings);
150 
151         Assert.assertFalse ("Invalid SCXML context",      context.has          ("bear"));
152         Assert.assertFalse ("Invalid Javascript bindings",bindings.containsKey ("bear"));
153         Assert.assertFalse ("Invalid JSbindings",         jsx.keySet().contains("bear"));
154 
155         context.set   ("bear","koala");
156         bindings.clear();
157         Assert.assertTrue    ("Invalid SCXML context",      context.has          ("bear"));
158         Assert.assertFalse   ("Invalid Javascript bindings",bindings.containsKey ("bear"));
159         Assert.assertTrue    ("Invalid JSbindings",         jsx.keySet().contains("bear"));
160 
161         context.reset ();
162         bindings.clear();
163         bindings.put  ("bear","grizzly");
164         Assert.assertFalse   ("Invalid SCXML context",      context.has          ("bear"));
165         Assert.assertTrue    ("Invalid Javascript bindings",bindings.containsKey ("bear"));
166         Assert.assertTrue    ("Invalid JSbindings",         jsx.keySet().contains("bear"));
167 
168         context.reset ();
169         bindings.clear();
170         context.set  ("cat","felix");
171         bindings.put ("dog","rover");
172         Assert.assertFalse  ("Invalid SCXML context",      context.has          ("bear"));
173         Assert.assertFalse  ("Invalid Javascript bindings",bindings.containsKey ("bear"));
174         Assert.assertTrue   ("Invalid SCXML context",      context.has          ("cat"));
175         Assert.assertTrue   ("Invalid Javascript bindings",bindings.containsKey ("dog"));
176         Assert.assertTrue   ("Invalid JSbindings",         jsx.keySet().contains("cat"));
177         Assert.assertTrue   ("Invalid JSbindings",         jsx.keySet().contains("dog"));
178     }
179 
180     /**
181      * Tests the <code>size</code> method with items in the SCXML context as well as the
182      * JavaScript Bindings.
183      *
184      */
185    
186     @Test
187     public void testSize() {
188        Context    context  = new JSContext     ();
189        Bindings   bindings = new SimpleBindings();
190        JSBindings jsx      = new JSBindings    (context,bindings);
191 
192        Assert.assertFalse ("Invalid SCXML context",      context.has          ("bear"));
193        Assert.assertFalse ("Invalid Javascript bindings",bindings.containsKey ("bear"));
194        Assert.assertEquals("Invalid JSbindings",0,jsx.size());
195 
196        context.set   ("bear","koala");
197        bindings.clear();
198        Assert.assertTrue    ("Invalid SCXML context",      context.has          ("bear"));
199        Assert.assertFalse   ("Invalid Javascript bindings",bindings.containsKey ("bear"));
200        Assert.assertEquals  ("Invalid JSbindings",1,jsx.size());
201 
202        context.reset ();
203        bindings.clear();
204        bindings.put  ("bear","grizzly");
205        Assert.assertFalse   ("Invalid SCXML context",      context.has          ("bear"));
206        Assert.assertTrue    ("Invalid Javascript bindings",bindings.containsKey ("bear"));
207        Assert.assertEquals  ("Invalid JSbindings",1,jsx.size());
208 
209        context.reset ();
210        bindings.clear();
211        context.set   ("bear","koala");
212        bindings.put  ("bear","grizzly");
213        Assert.assertTrue    ("Invalid SCXML context",      context.has          ("bear"));
214        Assert.assertTrue    ("Invalid Javascript bindings",bindings.containsKey ("bear"));
215        Assert.assertEquals  ("Invalid JSbindings",1,jsx.size());
216 
217        context.reset ();
218        bindings.clear();
219        context.set  ("cat","felix");
220        bindings.put ("dog","rover");
221        Assert.assertFalse  ("Invalid SCXML context",      context.has          ("bear"));
222        Assert.assertFalse  ("Invalid Javascript bindings",bindings.containsKey ("bear"));
223        Assert.assertTrue   ("Invalid SCXML context",      context.has          ("cat"));
224        Assert.assertTrue   ("Invalid Javascript bindings",bindings.containsKey ("dog"));
225        Assert.assertEquals ("Invalid JSbindings",2,jsx.size());
226     }
227 
228     /**
229      * Tests the <code>containsValue</code> method with items in the SCXML context as well as the
230      * JavaScript Bindings.
231      *
232      */    
233     @Test
234     public void testContainsValue() {
235         Context    context  = new JSContext     ();
236         Bindings   bindings = new SimpleBindings();
237         JSBindings jsx      = new JSBindings    (context,bindings);
238 
239         Assert.assertFalse("Invalid SCXML context",      context.getVars().containsValue("koala"));
240         Assert.assertFalse("Invalid Javascript bindings",bindings.containsValue("koala"));
241         Assert.assertFalse("Invalid JSbindings",         jsx.containsValue     ("koala"));
242 
243         context.reset ();
244         bindings.clear();
245         context.set   ("bear","koala");
246         Assert.assertTrue    ("Invalid SCXML context",      context.getVars().containsValue("koala"));
247         Assert.assertFalse   ("Invalid Javascript bindings",bindings.containsValue("koala"));
248         Assert.assertTrue    ("Invalid JSbindings",         jsx.containsValue     ("koala"));
249 
250         context.reset ();
251         bindings.clear();
252         bindings.put  ("bear","grizzly");
253         Assert.assertFalse   ("Invalid SCXML context",      context.getVars().containsValue("grizzly"));
254         Assert.assertTrue    ("Invalid Javascript bindings",bindings.containsValue("grizzly"));
255         Assert.assertTrue    ("Invalid JSbindings",         jsx.containsValue     ("grizzly"));
256 
257         context.reset ();
258         bindings.clear();
259         context.set   ("bear","koala");
260         bindings.put  ("bear","grizzly");
261         Assert.assertTrue    ("Invalid SCXML context",      context.getVars().containsValue("koala"));
262         Assert.assertTrue    ("Invalid Javascript bindings",bindings.containsValue("grizzly"));
263         Assert.assertTrue    ("Invalid JSbindings",         jsx.containsValue     ("koala"));
264         Assert.assertTrue    ("Invalid JSbindings",         jsx.containsValue     ("grizzly"));
265     }
266 
267     /**
268      * Tests the <code>entrySet</code> method with items in the SCXML context as well as the
269      * JavaScript Bindings.
270      *
271      */    
272     @Test
273     public void testEntrySet() {
274         Context    context  = new JSContext     ();
275         Bindings   bindings = new SimpleBindings();
276         JSBindings jsx      = new JSBindings    (context,bindings);
277 
278         Assert.assertEquals("Invalid SCXML context",      0,context.getVars().entrySet().size());
279         Assert.assertEquals("Invalid Javascript bindings",0,bindings.entrySet().size());
280         Assert.assertEquals("Invalid JSbindings",         0,jsx.entrySet().size());
281 
282         context.reset ();
283         bindings.clear();
284         context.set   ("bear","koala");
285         Assert.assertEquals  ("Invalid SCXML context",      1,context.getVars().entrySet().size());
286         Assert.assertTrue    ("Invalid SCXML context",      context.getVars().entrySet().contains(KOALA));
287         Assert.assertEquals  ("Invalid Javascript bindings",0,bindings.entrySet().size());
288         Assert.assertFalse   ("Invalid Javascript bindings",bindings.entrySet().contains(KOALA));
289         Assert.assertEquals  ("Invalid JSBindings",         1,jsx.entrySet().size());
290         Assert.assertTrue    ("Invalid JSbindings",         jsx.entrySet().contains(KOALA));
291 
292         context.reset ();
293         bindings.clear();
294         bindings.put  ("bear","grizzly");
295         Assert.assertEquals  ("Invalid SCXML context",      0,context.getVars().entrySet().size());
296         Assert.assertFalse   ("Invalid SCXML context",      context.getVars().entrySet().contains(GRIZZLY));
297         Assert.assertEquals  ("Invalid Javascript bindings",1,bindings.entrySet().size());
298         Assert.assertTrue    ("Invalid Javascript bindings",bindings.entrySet().contains(GRIZZLY));
299         Assert.assertEquals  ("Invalid JSBindings",         1,jsx.entrySet().size());
300         Assert.assertTrue    ("Invalid JSbindings",         jsx.entrySet().contains(GRIZZLY));
301 
302         context.reset ();
303         bindings.clear();
304         context.set   ("bear","koala");
305         bindings.put  ("bear","grizzly");
306         Assert.assertEquals  ("Invalid SCXML context",      1,context.getVars().entrySet().size());
307         Assert.assertTrue    ("Invalid SCXML context",      context.getVars().entrySet().contains(KOALA));
308         Assert.assertEquals  ("Invalid Javascript bindings",1,bindings.entrySet().size());
309         Assert.assertTrue    ("Invalid Javascript bindings",bindings.entrySet().contains(GRIZZLY));
310         Assert.assertEquals  ("Invalid JSBindings",         1,jsx.entrySet().size());
311         Assert.assertFalse   ("Invalid JSbindings",         jsx.entrySet().contains(KOALA));
312         Assert.assertTrue    ("Invalid JSbindings",         jsx.entrySet().contains(GRIZZLY));
313 
314         context.reset ();
315         bindings.clear();
316         context.set   ("cat","felix");
317         bindings.put  ("dog","rover");
318         Assert.assertEquals  ("Invalid SCXML context",      1,context.getVars().entrySet().size());
319         Assert.assertTrue    ("Invalid SCXML context",      context.getVars().entrySet().contains(FELIX));
320         Assert.assertEquals  ("Invalid Javascript bindings",1,bindings.entrySet().size());
321         Assert.assertTrue    ("Invalid Javascript bindings",bindings.entrySet().contains(ROVER));
322         Assert.assertEquals  ("Invalid JSBindings",         2,jsx.entrySet().size());
323         Assert.assertTrue    ("Invalid JSbindings",         jsx.entrySet().contains(FELIX));
324         Assert.assertTrue    ("Invalid JSbindings",         jsx.entrySet().contains(ROVER));
325     }
326 
327     /**
328      * Tests the <code>values</code> method with items in the SCXML context as well as the
329      * JavaScript Bindings.
330      *
331      */    
332     @Test
333     public void testValues() {
334         Context    context  = new JSContext     ();
335         Bindings   bindings = new SimpleBindings();
336         JSBindings jsx      = new JSBindings    (context,bindings);
337 
338         Assert.assertEquals("Invalid SCXML context",      0,context.getVars().values().size());
339         Assert.assertEquals("Invalid Javascript bindings",0,bindings.values().size());
340         Assert.assertEquals("Invalid JSbindings",         0,jsx.values().size());
341 
342         context.reset ();
343         bindings.clear();
344         context.set   ("bear","koala");
345         Assert.assertEquals  ("Invalid SCXML context",      1,context.getVars().values().size());
346         Assert.assertTrue    ("Invalid SCXML context",      context.getVars().values().contains(KOALA.getValue()));
347         Assert.assertEquals  ("Invalid Javascript bindings",0,bindings.values().size());
348         Assert.assertFalse   ("Invalid Javascript bindings",bindings.values().contains(KOALA.getValue()));
349         Assert.assertEquals  ("Invalid JSBindings",         1,jsx.values().size());
350         Assert.assertTrue    ("Invalid JSbindings",         jsx.values().contains(KOALA.getValue()));
351 
352         context.reset ();
353         bindings.clear();
354         bindings.put  ("bear","grizzly");
355         Assert.assertEquals  ("Invalid SCXML context",      0,context.getVars().values().size());
356         Assert.assertFalse   ("Invalid SCXML context",      context.getVars().values().contains(GRIZZLY.getValue()));
357         Assert.assertEquals  ("Invalid Javascript bindings",1,bindings.values().size());
358         Assert.assertTrue    ("Invalid Javascript bindings",bindings.values().contains(GRIZZLY.getValue()));
359         Assert.assertEquals  ("Invalid JSBindings",         1,jsx.values().size());
360         Assert.assertTrue    ("Invalid JSbindings",         jsx.values().contains(GRIZZLY.getValue()));
361 
362         context.reset ();
363         bindings.clear();
364         context.set   ("bear","koala");
365         bindings.put  ("bear","grizzly");
366         Assert.assertEquals  ("Invalid SCXML context",      1,context.getVars().values().size());
367         Assert.assertTrue    ("Invalid SCXML context",      context.getVars().values().contains(KOALA.getValue()));
368         Assert.assertEquals  ("Invalid Javascript bindings",1,bindings.values().size());
369         Assert.assertTrue    ("Invalid Javascript bindings",bindings.values().contains(GRIZZLY.getValue()));
370         Assert.assertEquals  ("Invalid JSBindings",         1,jsx.values().size());
371         Assert.assertFalse   ("Invalid JSbindings",         jsx.values().contains(KOALA.getValue()));
372         Assert.assertTrue    ("Invalid JSbindings",         jsx.values().contains(GRIZZLY.getValue()));
373 
374         context.reset ();
375         bindings.clear();
376         context.set   ("cat","felix");
377         bindings.put  ("dog","rover");
378         Assert.assertEquals  ("Invalid SCXML context",      1,context.getVars().values().size());
379         Assert.assertTrue    ("Invalid SCXML context",      context.getVars().values().contains(FELIX.getValue()));
380         Assert.assertEquals  ("Invalid Javascript bindings",1,bindings.values().size());
381         Assert.assertTrue    ("Invalid Javascript bindings",bindings.values().contains(ROVER.getValue()));
382         Assert.assertEquals  ("Invalid JSBindings",         2,jsx.values().size());
383         Assert.assertTrue    ("Invalid JSbindings",         jsx.values().contains(FELIX.getValue()));
384         Assert.assertTrue    ("Invalid JSbindings",         jsx.values().contains(ROVER.getValue()));
385     }
386 
387     /**
388      * Tests the <code>isEmpty</code> method with items in the SCXML context as well as the
389      * JavaScript Bindings.
390      *
391      */    
392     @Test
393     public void testIsEmpty() {
394         Context    context  = new JSContext     ();
395         Bindings   bindings = new SimpleBindings();
396         JSBindings jsx      = new JSBindings    (context,bindings);
397 
398         Assert.assertTrue("Invalid SCXML context",      context.getVars().isEmpty());
399         Assert.assertTrue("Invalid Javascript bindings",bindings.isEmpty());
400         Assert.assertTrue("Invalid JSbindings",         jsx.isEmpty());
401 
402         context.set   ("bear","koala");
403         bindings.clear();
404         Assert.assertFalse   ("Invalid SCXML context",      context.getVars().isEmpty());
405         Assert.assertTrue    ("Invalid Javascript bindings",bindings.isEmpty());
406         Assert.assertFalse   ("Invalid JSbindings",         jsx.isEmpty());
407 
408         context.reset ();
409         bindings.clear();
410         bindings.put  ("bear","grizzly");
411         Assert.assertTrue    ("Invalid SCXML context",      context.getVars().isEmpty());
412         Assert.assertFalse   ("Invalid Javascript bindings",bindings.isEmpty());
413         Assert.assertFalse   ("Invalid JSbindings",         jsx.isEmpty());
414 
415         context.reset ();
416         bindings.clear();
417         context.set   ("bear","koala");
418         bindings.put  ("bear","grizzly");
419         Assert.assertFalse   ("Invalid SCXML context",      context.getVars().isEmpty());
420         Assert.assertFalse   ("Invalid Javascript bindings",bindings.isEmpty());
421         Assert.assertFalse   ("Invalid JSbindings",         jsx.isEmpty());
422 
423         context.reset ();
424         bindings.clear();
425         context.set   ("cat","felix");
426         bindings.put  ("dog","rover");
427         Assert.assertFalse   ("Invalid SCXML context",      context.getVars().isEmpty());
428         Assert.assertFalse   ("Invalid Javascript bindings",bindings.isEmpty());
429         Assert.assertFalse   ("Invalid JSbindings",         jsx.isEmpty());
430     }
431 
432     /**
433      * Tests the <code>get</code> method with items in the SCXML context as well as the
434      * JavaScript Bindings.
435      *
436      */    
437     @Test
438     public void testGet() {
439         Context    context  = new JSContext     ();
440         Bindings   bindings = new SimpleBindings();
441         JSBindings jsx      = new JSBindings    (context,bindings);
442 
443         Assert.assertNull("Invalid SCXML context",      context.get ("bear"));
444         Assert.assertNull("Invalid Javascript bindings",bindings.get("bear"));
445         Assert.assertNull("Invalid JSbindings",         jsx.get     ("bear"));
446 
447         context.reset ();
448         bindings.clear();
449         context.set   ("bear","koala");
450         Assert.assertNotNull ("Invalid SCXML context",        context.get ("bear"));
451         Assert.assertEquals  ("Invalid SCXML context","koala",context.get ("bear"));
452         Assert.assertNull    ("Invalid Javascript bindings",  bindings.get("bear"));
453         Assert.assertNotNull ("Invalid JSbindings",           jsx.get     ("bear"));
454         Assert.assertEquals  ("Invalid JSbindings","koala",   jsx.get     ("bear"));
455 
456         context.reset ();
457         bindings.clear();
458         bindings.put  ("bear","grizzly");
459         Assert.assertNull    ("Invalid SCXML context",                context.get ("bear"));
460         Assert.assertNotNull ("Invalid Javascript bindings",          bindings.get("bear"));
461         Assert.assertEquals  ("Invalid Javascript bindings","grizzly",bindings.get("bear"));
462         Assert.assertNotNull ("Invalid JSbindings",                   jsx.get     ("bear"));
463         Assert.assertEquals  ("Invalid JSbindings","grizzly",         jsx.get     ("bear"));
464 
465         context.reset ();
466         bindings.clear();
467         context.set   ("bear","koala");
468         bindings.put  ("bear","grizzly");
469         Assert.assertNotNull ("Invalid SCXML context",        context.get ("bear"));
470         Assert.assertEquals  ("Invalid SCXML context","koala",context.get ("bear"));
471         Assert.assertNotNull ("Invalid Javascript bindings",          bindings.get("bear"));
472         Assert.assertEquals  ("Invalid Javascript bindings","grizzly",bindings.get("bear"));
473         Assert.assertNotNull ("Invalid JSbindings",                   jsx.get     ("bear"));
474         Assert.assertEquals  ("Invalid JSbindings","grizzly",         jsx.get     ("bear"));
475 
476         context.reset ();
477         bindings.clear();
478         context.set   ("cat","felix");
479         bindings.put  ("dog","rover");
480         Assert.assertNotNull ("Invalid SCXML context",              context.get ("cat"));
481         Assert.assertEquals  ("Invalid SCXML context","felix",      context.get ("cat"));
482         Assert.assertNotNull ("Invalid Javascript bindings",        bindings.get("dog"));
483         Assert.assertEquals  ("Invalid Javascript bindings","rover",bindings.get("dog"));
484         Assert.assertNotNull ("Invalid JSbindings",                 jsx.get     ("cat"));
485         Assert.assertEquals  ("Invalid JSbindings","felix",         jsx.get     ("cat"));
486         Assert.assertNotNull ("Invalid JSbindings",                 jsx.get     ("dog"));
487         Assert.assertEquals  ("Invalid JSbindings","rover",         jsx.get     ("dog"));
488     }
489 
490     /**
491      * Tests the <code>put</code> method with items in the SCXML context as well as the
492      * JavaScript Bindings.
493      *
494      */    
495     @Test
496     public void testPut() {
497         Context    context  = new JSContext     ();
498         Bindings   bindings = new SimpleBindings();
499         JSBindings jsx      = new JSBindings    (context,bindings);
500 
501         Assert.assertNull("Invalid SCXML context",      context.get ("bear"));
502         Assert.assertNull("Invalid Javascript bindings",bindings.get("bear"));
503         Assert.assertNull("Invalid JSbindings",         jsx.get     ("bear"));
504 
505         jsx.put       ("bear","koala");
506         Assert.assertNotNull ("Invalid SCXML context",        context.get ("bear"));
507         Assert.assertEquals  ("Invalid SCXML context","koala",context.get("bear"));
508         Assert.assertNotNull ("Invalid JSbindings",           jsx.get ("bear"));
509         Assert.assertNull    ("Invalid Javascript bindings",  bindings.get("bear"));
510     }
511 
512     /**
513      * Tests the <code>putAll</code> method with items in the SCXML context as well as the
514      * JavaScript Bindings.
515      *
516      */    
517     @Test
518     public void testPutAll() {
519         Context            context  = new JSContext     ();
520         Bindings           bindings = new SimpleBindings();
521         JSBindings         jsx      = new JSBindings    (context,bindings);
522         Map<String,Object> vars     = new HashMap<String, Object>();
523 
524         vars.put("bear","grizzly");
525         vars.put("cat","felix");
526         vars.put("dog","rover");
527 
528         Assert.assertNull("Invalid SCXML context",      context.get ("bear"));
529         Assert.assertNull("Invalid SCXML context",      context.get ("cat"));
530         Assert.assertNull("Invalid SCXML context",      context.get ("dog"));
531 
532         Assert.assertNull("Invalid Javascript bindings",bindings.get("bear"));
533         Assert.assertNull("Invalid Javascript bindings",bindings.get("cat"));
534         Assert.assertNull("Invalid Javascript bindings",bindings.get("dog"));
535 
536         Assert.assertNull("Invalid JSbindings",         jsx.get     ("bear"));
537         Assert.assertNull("Invalid JSbindings",         jsx.get     ("cat"));
538         Assert.assertNull("Invalid JSbindings",         jsx.get     ("dog"));
539 
540         context.set("bear","koala");
541         jsx.putAll (vars);
542 
543         Assert.assertNotNull ("Invalid SCXML context",        context.get ("bear"));
544         Assert.assertNull    ("Invalid SCXML context",        context.get ("cat"));
545         Assert.assertNull    ("Invalid SCXML context",        context.get ("dog"));
546         Assert.assertEquals  ("Invalid SCXML context","koala",context.get ("bear"));
547         Assert.assertEquals  ("Invalid SCXML context",1,      context.getVars().size());
548 
549         Assert.assertNotNull ("Invalid Javascript bindings",          bindings.get("bear"));
550         Assert.assertNotNull ("Invalid Javascript bindings",          bindings.get("cat"));
551         Assert.assertNotNull ("Invalid Javascript bindings",          bindings.get("dog"));
552         Assert.assertEquals  ("Invalid Javascript bindings","grizzly",bindings.get("bear"));
553         Assert.assertEquals  ("Invalid Javascript bindings","felix",  bindings.get("cat"));
554         Assert.assertEquals  ("Invalid Javascript bindings","rover",  bindings.get("dog"));
555         Assert.assertEquals  ("Invalid Javascript bindings",3,        bindings.size());
556     }
557 
558     /**
559      * Tests the <code>remove</code> method with items in the SCXML context as well as the
560      * JavaScript Bindings.
561      *
562      */    
563     @Test
564     public void testRemove() {
565         Context            context  = new JSContext     ();
566         Bindings           bindings = new SimpleBindings();
567         JSBindings         jsx      = new JSBindings    (context,bindings);
568 
569         context.set ("bear","koala");
570         bindings.put("bear","grizzly");
571         bindings.put("cat", "felix");
572         bindings.put("dog", "rover");
573 
574         Assert.assertNotNull("Invalid SCXML context",        context.get("bear"));
575         Assert.assertEquals ("Invalid SCXML context","koala",context.get("bear"));
576         Assert.assertEquals ("Invalid SCXML context",1,      context.getVars().size());
577 
578         Assert.assertNotNull("Invalid Javascript bindings",          bindings.get("bear"));
579         Assert.assertNotNull("Invalid Javascript bindings",          bindings.get("cat"));
580         Assert.assertNotNull("Invalid Javascript bindings",          bindings.get("dog"));
581         Assert.assertEquals ("Invalid Javascript bindings","grizzly",bindings.get("bear"));
582         Assert.assertEquals ("Invalid Javascript bindings","felix",  bindings.get("cat"));
583         Assert.assertEquals ("Invalid Javascript bindings","rover",  bindings.get("dog"));
584         Assert.assertEquals ("Invalid Javascript bindings",3,        bindings.size());
585 
586         jsx.remove("cat");
587 
588         Assert.assertNotNull("Invalid SCXML context",                context.get("bear"));
589         Assert.assertEquals ("Invalid SCXML context","koala",        context.get("bear"));
590         Assert.assertEquals ("Invalid SCXML context",1,              context.getVars().size());
591         Assert.assertNotNull("Invalid Javascript bindings",          bindings.get("bear"));
592         Assert.assertNull   ("Invalid Javascript bindings",          bindings.get("cat"));
593         Assert.assertNotNull("Invalid Javascript bindings",          bindings.get("dog"));
594         Assert.assertEquals ("Invalid Javascript bindings","grizzly",bindings.get("bear"));
595         Assert.assertEquals ("Invalid Javascript bindings","rover",  bindings.get("dog"));
596         Assert.assertEquals ("Invalid Javascript bindings",2,        bindings.size());
597 
598         jsx.remove("dog");
599 
600         Assert.assertNotNull("Invalid SCXML context",               context.get("bear"));
601         Assert.assertEquals ("Invalid SCXML context","koala",        context.get("bear"));
602         Assert.assertEquals ("Invalid SCXML context",1,              context.getVars().size());
603         Assert.assertNotNull("Invalid Javascript bindings",          bindings.get("bear"));
604         Assert.assertNull   ("Invalid Javascript bindings",          bindings.get("cat"));
605         Assert.assertNull   ("Invalid Javascript bindings",          bindings.get("dog"));
606         Assert.assertEquals ("Invalid Javascript bindings","grizzly",bindings.get("bear"));
607         Assert.assertEquals ("Invalid Javascript bindings",1,        bindings.size());
608 
609         jsx.remove("bear");
610 
611         Assert.assertNotNull("Invalid SCXML context",       context.get("bear"));
612         Assert.assertEquals("Invalid SCXML context","koala",context.get("bear"));
613         Assert.assertEquals("Invalid SCXML context",1,      context.getVars().size());
614         Assert.assertNull  ("Invalid Javascript bindings",  bindings.get("bear"));
615         Assert.assertNull  ("Invalid Javascript bindings",  bindings.get("cat"));
616         Assert.assertNull  ("Invalid Javascript bindings",  bindings.get("dog"));
617         Assert.assertEquals("Invalid Javascript bindings",0,bindings.size());
618 
619         jsx.remove("bear");
620 
621         Assert.assertNull  ("Invalid SCXML context",        context.get("bear"));
622         Assert.assertEquals("Invalid SCXML context",0,      context.getVars().size());
623         Assert.assertNull  ("Invalid Javascript bindings",  bindings.get("bear"));
624         Assert.assertNull  ("Invalid Javascript bindings",  bindings.get("cat"));
625         Assert.assertNull  ("Invalid Javascript bindings",  bindings.get("dog"));
626         Assert.assertEquals("Invalid Javascript bindings",0,bindings.size());
627     }
628 
629     /**
630      * Tests the <code>clear</code> method with items in the SCXML context as well as the
631      * JavaScript Bindings.
632      *
633      */    
634     @Test
635     public void testClear() {
636         Context            context  = new JSContext     ();
637         Bindings           bindings = new SimpleBindings();
638         JSBindings         jsx      = new JSBindings    (context,bindings);
639 
640         context.set ("bear","koala");
641         bindings.put("bear","grizzly");
642         bindings.put("cat", "felix");
643         bindings.put("dog", "rover");
644 
645         Assert.assertNotNull("Invalid SCXML context",        context.get("bear"));
646         Assert.assertEquals ("Invalid SCXML context","koala",context.get("bear"));
647         Assert.assertEquals ("Invalid SCXML context",1,      context.getVars().size());
648 
649         Assert.assertNotNull("Invalid Javascript bindings",          bindings.get("bear"));
650         Assert.assertNotNull("Invalid Javascript bindings",          bindings.get("cat"));
651         Assert.assertNotNull("Invalid Javascript bindings",          bindings.get("dog"));
652         Assert.assertEquals ("Invalid Javascript bindings","grizzly",bindings.get("bear"));
653         Assert.assertEquals ("Invalid Javascript bindings","felix",  bindings.get("cat"));
654         Assert.assertEquals ("Invalid Javascript bindings","rover",  bindings.get("dog"));
655         Assert.assertEquals ("Invalid Javascript bindings",3,        bindings.size());
656 
657         jsx.clear();
658 
659         Assert.assertNotNull("Invalid SCXML context",       context.get("bear"));
660         Assert.assertEquals("Invalid SCXML context","koala",context.get("bear"));
661         Assert.assertEquals("Invalid SCXML context",1,      context.getVars().size());
662         Assert.assertNull  ("Invalid Javascript bindings",  bindings.get("bear"));
663         Assert.assertNull  ("Invalid Javascript bindings",  bindings.get("cat"));
664         Assert.assertNull  ("Invalid Javascript bindings",  bindings.get("dog"));
665         Assert.assertEquals("Invalid Javascript bindings",0,bindings.size());
666     }
667 
668 }
669