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 }