001: /*
002: * $Id: CacheBSFTest.java 4166 2006-10-25 07:07:33Z paulk $
003: *
004: * Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
005: *
006: * Redistribution and use of this software and associated documentation
007: * ("Software"), with or without modification, are permitted provided that the
008: * following conditions are met: 1. Redistributions of source code must retain
009: * copyright statements and notices. Redistributions must also contain a copy
010: * of this document. 2. Redistributions in binary form must reproduce the above
011: * copyright notice, this list of conditions and the following disclaimer in
012: * the documentation and/or other materials provided with the distribution. 3.
013: * The name "groovy" must not be used to endorse or promote products derived
014: * from this Software without prior written permission of The Codehaus. For
015: * written permission, please contact info@codehaus.org. 4. Products derived
016: * from this Software may not be called "groovy" nor may "groovy" appear in
017: * their names without prior written permission of The Codehaus. "groovy" is a
018: * registered trademark of The Codehaus. 5. Due credit should be given to The
019: * Codehaus - http://groovy.codehaus.org/
020: *
021: * THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS ``AS IS'' AND ANY
022: * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
023: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
024: * DISCLAIMED. IN NO EVENT SHALL THE CODEHAUS OR ITS CONTRIBUTORS BE LIABLE FOR
025: * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
026: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
027: * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
028: * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
029: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
030: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
031: * DAMAGE.
032: *
033: */
034: package org.codehaus.groovy.bsf;
035:
036: import java.util.List;
037: import java.util.Vector;
038:
039: import junit.framework.TestCase;
040:
041: import org.apache.bsf.BSFManager;
042: import org.apache.bsf.BSFEngine;
043: import org.apache.bsf.BSFException;
044: import groovy.lang.GroovyShell;
045:
046: /**
047: * Tests the Caching BSF integration
048: *
049: * @author James Birchfield
050: * @version $Revision: 4166 $
051: */
052: public class CacheBSFTest extends TestCase {
053:
054: protected BSFManager manager;
055: private static final Class CACHING_ENGINE = CachingGroovyEngine.class;
056:
057: protected void setUp() throws Exception {
058: // override standard engine with caching one
059: BSFManager.registerScriptingEngine("groovy", CACHING_ENGINE
060: .getName(), new String[] { "groovy", "gy" });
061: manager = new BSFManager();
062: }
063:
064: public void testVersion() throws Exception {
065: //System.out.println("BSFManager.getVersion() = " + BSFManager.getVersion());
066: BSFEngine bsfEngine = manager.loadScriptingEngine("groovy");
067: assertEquals(CACHING_ENGINE, bsfEngine.getClass());
068: }
069:
070: public void testExec() throws Exception {
071: manager.exec("groovy", "Test1.groovy", 0, 0,
072: "println('testing Exec')");
073: //nothing to really test here...just looking for debug that says it
074: // used cache version
075: manager.exec("groovy", "Test1.groovy", 0, 0,
076: "println('testing Exec')");
077: }
078:
079: public void testCompileErrorWithExec() throws Exception {
080: try {
081: manager.exec("groovy", "dummy", 0, 0, "assert assert");
082: fail("Should have caught compile exception");
083: } catch (BSFException e) {
084: assertTrue(
085: "e.getMessage() should contain CompilationError: "
086: + e.getMessage(), e.getMessage().indexOf(
087: "CompilationError") != -1);
088: }
089: }
090:
091: public void testEval() throws Exception {
092: Object dontcare = manager.eval("groovy", "Test1.groovy", 0, 0,
093: "return [1, 2, 3]");
094: // nothing to really test here...just looking for debug that says it
095: // used cache version
096: Object answer = manager.eval("groovy", "Test.groovy", 0, 0,
097: "return [1, 2, 3]");
098: assertTrue("Should return a list: " + answer,
099: answer instanceof List);
100: List list = (List) answer;
101: assertEquals("List should be of right size", 3, list.size());
102: }
103:
104: public void testCompileErrorWithEval() throws Exception {
105: try {
106: manager.eval("groovy", "dummy", 0, 0, "assert assert");
107: fail("Should have caught compile exception");
108: } catch (BSFException e) {
109: assertTrue(
110: "e.getMessage() should contain CompilationError: "
111: + e.getMessage(), e.getMessage().indexOf(
112: "CompilationError") != -1);
113: }
114: }
115:
116: public void testBuiltInVariable() throws Exception {
117: Object answer = manager.eval("groovy", "Test1.groovy", 0, 0,
118: "assert this.bsf != null\n return this.bsf");
119: assertTrue("Should have an answer", answer != null);
120: }
121:
122: public void testVariables() throws Exception {
123: manager.registerBean("x", new Integer(4));
124: Object dontcare = manager
125: .eval("groovy", "Test1.groovy", 0, 0,
126: "valueOfX = this.bsf.lookupBean('x'); assert valueOfX == 4; valueOfX + 1");
127: // nothing to really test here...just looking for debug that says it
128: // used cache version
129: Object answer = manager
130: .eval("groovy", "Test2.groovy", 0, 0,
131: "valueOfX = this.bsf.lookupBean('x'); assert valueOfX == 4; valueOfX + 1");
132: assertEquals("Incorrect return", new Integer(5), answer);
133: }
134:
135: public void testClassLoaderSet() throws BSFException {
136: CachingGroovyEngine cachingGroovyEngine = new CachingGroovyEngine();
137: manager.setClassLoader(null);
138: cachingGroovyEngine.initialize(manager, "dummy", new Vector());
139: // still working implies classloader set, coverage confirms this
140: assertEquals("hi", manager
141: .eval("groovy", "dummy", 0, 0, "'hi'"));
142: }
143:
144: public void testDeclaredVariables() throws Exception {
145: manager.declareBean("foo", new Integer(5), Integer.class);
146: Object answer = manager.eval("groovy", "Test1.groovy", 0, 0,
147: "valueOfFoo = foo; return valueOfFoo");
148: assertEquals(new Integer(5), answer);
149: manager.declareBean("foo", new Integer(6), Integer.class);
150: answer = manager.eval("groovy", "Test2.groovy", 0, 0,
151: "valueOfFoo = foo; return valueOfFoo");
152: assertEquals(new Integer(6), answer);
153: }
154: }
|