001 package org.springframework.richclient.script;
002
003 import java.io.Reader;
004
005 import javax.script.ScriptContext;
006 import javax.script.ScriptEngine;
007 import javax.script.ScriptException;
008 import javax.script.SimpleBindings;
009 import javax.swing.JComponent;
010
011 import junit.framework.TestCase;
012
013 import org.easymock.EasyMock;
014 import org.springframework.core.io.ByteArrayResource;
015
016 public class ScriptedViewTests extends TestCase {
017 public void testScriptIsMandatory() throws Exception {
018 ScriptedView scriptedView = new ScriptedView();
019
020 try {
021 scriptedView.afterPropertiesSet();
022 fail("Must throw exception");
023 }
024 catch (IllegalArgumentException e) {
025 // test passes
026 }
027 }
028
029 public void testHappyPath() throws Exception {
030 final ScriptEngine engine = EasyMock.createMock(ScriptEngine.class);
031
032 ScriptedView scriptedView = new ScriptedView() {
033 @Override
034 protected ScriptEngine createScriptEngine() {
035 return engine;
036 }
037 };
038
039 EasyMock.expect(engine.createBindings()).andReturn(new SimpleBindings());
040 engine.setContext((ScriptContext) EasyMock.anyObject());
041 EasyMock.expect(engine.eval((Reader) EasyMock.anyObject())).andReturn(null);
042 EasyMock.replay(engine);
043
044 scriptedView.setEngineName("test-engine");
045 scriptedView.setScript(new ByteArrayResource("test".getBytes(), "test script"));
046
047 JComponent control = scriptedView.createControl();
048 System.out.println(control);
049
050 EasyMock.verify(engine);
051 }
052
053 public void testScriptThrowsException() throws Exception {
054 final ScriptEngine engine = EasyMock.createMock(ScriptEngine.class);
055
056 ScriptedView scriptedView = new ScriptedView() {
057 @Override
058 protected ScriptEngine createScriptEngine() {
059 return engine;
060 }
061 };
062
063 EasyMock.expect(engine.createBindings()).andReturn(new SimpleBindings());
064 engine.setContext((ScriptContext) EasyMock.anyObject());
065 EasyMock.expect(engine.eval((Reader) EasyMock.anyObject())).andThrow(new ScriptException("test exception"));
066 EasyMock.replay(engine);
067
068 scriptedView.setEngineName("test-engine");
069 scriptedView.setScript(new ByteArrayResource("test".getBytes(), "test script"));
070
071 try {
072 scriptedView.createControl();
073 fail("must throw ScriptExecutionException");
074 }
075 catch (ScriptExecutionException e) {
076 // test passes
077 }
078
079 EasyMock.verify(engine);
080 }
081 }