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
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
77 }
78
79 EasyMock.verify(engine);
80 }
81 }