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    }