1   /*
2    * $Id: GroovyShellTest.java,v 1.6 2004/04/19 07:29:46 cpoirier Exp $version
3    * Nov 23, 2003 9:02:55 PM $user Exp $
4    * 
5    * Copyright 2003 (C) Sam Pullara. All Rights Reserved.
6    * 
7    * Redistribution and use of this software and associated documentation
8    * ("Software"), with or without modification, are permitted provided that the
9    * following conditions are met: 1. Redistributions of source code must retain
10   * copyright statements and notices. Redistributions must also contain a copy
11   * of this document. 2. Redistributions in binary form must reproduce the above
12   * copyright notice, this list of conditions and the following disclaimer in
13   * the documentation and/or other materials provided with the distribution. 3.
14   * The name "groovy" must not be used to endorse or promote products derived
15   * from this Software without prior written permission of The Codehaus. For
16   * written permission, please contact info@codehaus.org. 4. Products derived
17   * from this Software may not be called "groovy" nor may "groovy" appear in
18   * their names without prior written permission of The Codehaus. "groovy" is a
19   * registered trademark of The Codehaus. 5. Due credit should be given to The
20   * Codehaus - http://groovy.codehaus.org/
21   * 
22   * THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS ``AS IS'' AND ANY
23   * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
24   * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
25   * DISCLAIMED. IN NO EVENT SHALL THE CODEHAUS OR ITS CONTRIBUTORS BE LIABLE FOR
26   * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
28   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
32   * DAMAGE.
33   *  
34   */
35  package groovy.lang;
36  
37  import groovy.util.GroovyTestCase;
38  
39  import java.io.ByteArrayInputStream;
40  import java.util.HashMap;
41  import java.util.Map;
42  
43  import org.codehaus.groovy.control.CompilerConfiguration;
44  
45  import junit.framework.Test;
46  import junit.framework.TestSuite;
47  import junit.textui.TestRunner;
48  
49  /***
50   * @author sam
51   * 
52   * To change the template for this generated type comment go to Window -
53   * Preferences - Java - Code Generation - Code and Comments
54   */
55  public class GroovyShellTest extends GroovyTestCase {
56  
57      private String script1 = "test = 1";
58  
59      public static void main(String[] args) {
60          TestRunner.run(suite());
61      }
62      
63      public static Test suite() {
64          return new TestSuite(GroovyShellTest.class);
65      }
66  
67      public void testExecuteScript() {
68          GroovyShell shell = new GroovyShell();
69          try {
70              Object result = shell.evaluate(new ByteArrayInputStream(script1.getBytes()), "Test.groovy");
71              assertEquals(new Integer(1), result);
72          }
73          catch (Exception e) {
74              assertTrue(false);
75          }
76      }
77  
78      private static class PropertyHolder {
79          private Map map = new HashMap();
80          public void set(String key, Object value) {
81              map.put(key, value);
82          }
83          public Object get(String key) {
84              return map.get(key);
85          }
86      }
87  
88      private String script2 = "test.prop = 2\nreturn test.prop";
89  
90      public void testExecuteScriptWithContext() {
91          Binding context = new Binding();
92          context.setVariable("test", new PropertyHolder());
93          GroovyShell shell = new GroovyShell(context);
94          try {
95              Object result = shell.evaluate(new ByteArrayInputStream(script2.getBytes()), "Test.groovy");
96              assertEquals(new Integer(2), result);
97          }
98          catch (Exception e) {
99              fail(e.toString());
100         }
101     }
102     
103     public void testScriptWithDerivedBaseClass() throws Exception {
104         Binding context = new Binding();
105         CompilerConfiguration config = new CompilerConfiguration();
106         config.setScriptBaseClass(DerivedScript.class.getName());
107         GroovyShell shell = new GroovyShell(context, config);
108         Object result = shell.evaluate("x = 'abc'; doSomething(cheese)");
109         assertEquals("I like Cheddar", result);
110         assertEquals("abc", context.getVariable("x"));
111     }
112 }