1   package org.springframework.richclient.script;
2   
3   import java.io.Reader;
4   
5   import javax.script.ScriptContext;
6   import javax.script.ScriptEngine;
7   import javax.script.ScriptException;
8   import javax.script.SimpleBindings;
9   import javax.swing.JComponent;
10  
11  import junit.framework.TestCase;
12  
13  import org.easymock.EasyMock;
14  import org.springframework.core.io.ByteArrayResource;
15  
16  public class ScriptedViewTests extends TestCase {
17      public void testScriptIsMandatory() throws Exception {
18          ScriptedView scriptedView = new ScriptedView();
19  
20          try {
21              scriptedView.afterPropertiesSet();
22              fail("Must throw exception");
23          }
24          catch (IllegalArgumentException e) {
25              // test passes
26          }
27      }
28  
29      public void testHappyPath() throws Exception {
30          final ScriptEngine engine = EasyMock.createMock(ScriptEngine.class);
31  
32          ScriptedView scriptedView = new ScriptedView() {
33              @Override
34              protected ScriptEngine createScriptEngine() {
35                  return engine;
36              }
37          };
38  
39          EasyMock.expect(engine.createBindings()).andReturn(new SimpleBindings());
40          engine.setContext((ScriptContext) EasyMock.anyObject());
41          EasyMock.expect(engine.eval((Reader) EasyMock.anyObject())).andReturn(null);
42          EasyMock.replay(engine);
43  
44          scriptedView.setEngineName("test-engine");
45          scriptedView.setScript(new ByteArrayResource("test".getBytes(), "test script"));
46  
47          JComponent control = scriptedView.createControl();
48          System.out.println(control);
49  
50          EasyMock.verify(engine);
51      }
52  
53      public void testScriptThrowsException() throws Exception {
54          final ScriptEngine engine = EasyMock.createMock(ScriptEngine.class);
55  
56          ScriptedView scriptedView = new ScriptedView() {
57              @Override
58              protected ScriptEngine createScriptEngine() {
59                  return engine;
60              }
61          };
62  
63          EasyMock.expect(engine.createBindings()).andReturn(new SimpleBindings());
64          engine.setContext((ScriptContext) EasyMock.anyObject());
65          EasyMock.expect(engine.eval((Reader) EasyMock.anyObject())).andThrow(new ScriptException("test exception"));
66          EasyMock.replay(engine);
67  
68          scriptedView.setEngineName("test-engine");
69          scriptedView.setScript(new ByteArrayResource("test".getBytes(), "test script"));
70  
71          try {
72              scriptedView.createControl();
73              fail("must throw ScriptExecutionException");
74          }
75          catch (ScriptExecutionException e) {
76              // test passes
77          }
78  
79          EasyMock.verify(engine);
80      }
81  }