001: /*
002: $Id: GStringTest.java 4099 2006-10-10 18:06:52Z blackdrag $
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
008: that the following conditions are met:
009:
010: 1. Redistributions of source code must retain copyright
011: statements and notices. Redistributions must also contain a
012: copy of this document.
013:
014: 2. Redistributions in binary form must reproduce the
015: above copyright notice, this list of conditions and the
016: following disclaimer in the documentation and/or other
017: materials provided with the distribution.
018:
019: 3. The name "groovy" must not be used to endorse or promote
020: products derived from this Software without prior written
021: permission of The Codehaus. For written permission,
022: please contact info@codehaus.org.
023:
024: 4. Products derived from this Software may not be called "groovy"
025: nor may "groovy" appear in their names without prior written
026: permission of The Codehaus. "groovy" is a registered
027: trademark of The Codehaus.
028:
029: 5. Due credit should be given to The Codehaus -
030: http://groovy.codehaus.org/
031:
032: THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
033: ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
034: NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
035: FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
036: THE CODEHAUS OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
037: INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
038: (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
039: SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
040: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
041: STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
042: ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
043: OF THE POSSIBILITY OF SUCH DAMAGE.
044:
045: */
046:
047: package org.codehaus.groovy.classgen;
048:
049: import org.codehaus.groovy.ast.ClassHelper;
050: import org.codehaus.groovy.ast.ClassNode;
051: import org.codehaus.groovy.ast.MethodNode;
052: import org.codehaus.groovy.ast.Parameter;
053: import org.codehaus.groovy.ast.expr.BinaryExpression;
054: import org.codehaus.groovy.ast.expr.DeclarationExpression;
055: import org.codehaus.groovy.ast.expr.BooleanExpression;
056: import org.codehaus.groovy.ast.expr.ConstantExpression;
057: import org.codehaus.groovy.ast.expr.GStringExpression;
058: import org.codehaus.groovy.ast.expr.MethodCallExpression;
059: import org.codehaus.groovy.ast.expr.VariableExpression;
060: import org.codehaus.groovy.ast.stmt.AssertStatement;
061: import org.codehaus.groovy.ast.stmt.BlockStatement;
062: import org.codehaus.groovy.ast.stmt.ExpressionStatement;
063: import org.codehaus.groovy.runtime.InvokerHelper;
064: import org.codehaus.groovy.runtime.InvokerInvocationException;
065: import org.codehaus.groovy.syntax.Token;
066:
067: /**
068: *
069: * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
070: * @version $Revision: 4099 $
071: */
072: public class GStringTest extends TestSupport {
073:
074: public void testConstructor() throws Exception {
075: ClassNode classNode = new ClassNode("Foo", ACC_PUBLIC,
076: ClassHelper.OBJECT_TYPE);
077:
078: //Statement printStatement = createPrintlnStatement(new VariableExpression("str"));
079:
080: // simulate "Hello ${user}!"
081: GStringExpression compositeStringExpr = new GStringExpression(
082: "hello ${user}!");
083: compositeStringExpr.addString(new ConstantExpression("Hello "));
084: compositeStringExpr.addValue(new VariableExpression("user"));
085: compositeStringExpr.addString(new ConstantExpression("!"));
086: BlockStatement block = new BlockStatement();
087: block.addStatement(new ExpressionStatement(
088: new DeclarationExpression(
089: new VariableExpression("user"), Token
090: .newSymbol("=", -1, -1),
091: new ConstantExpression("World"))));
092: block.addStatement(new ExpressionStatement(
093: new DeclarationExpression(
094: new VariableExpression("str"), Token.newSymbol(
095: "=", -1, -1), compositeStringExpr)));
096: block.addStatement(new ExpressionStatement(
097: new MethodCallExpression(
098: VariableExpression.THIS_EXPRESSION, "println",
099: new VariableExpression("str"))));
100:
101: block.addStatement(new ExpressionStatement(
102: new DeclarationExpression(
103: new VariableExpression("text"), Token
104: .newSymbol("=", -1, -1),
105: new MethodCallExpression(
106: new VariableExpression("str"),
107: "toString",
108: MethodCallExpression.NO_ARGUMENTS))));
109:
110: block.addStatement(new AssertStatement(new BooleanExpression(
111: new BinaryExpression(new VariableExpression("text"),
112: Token.newSymbol("==", -1, -1),
113: new ConstantExpression("Hello World!")))));
114: classNode.addMethod(new MethodNode("stringDemo", ACC_PUBLIC,
115: ClassHelper.VOID_TYPE, Parameter.EMPTY_ARRAY,
116: ClassNode.EMPTY_ARRAY, block));
117:
118: Class fooClass = loadClass(classNode);
119: assertTrue("Loaded a new class", fooClass != null);
120:
121: Object bean = fooClass.newInstance();
122: assertTrue("Managed to create bean", bean != null);
123:
124: System.out
125: .println("################ Now about to invoke method");
126:
127: //Object[] array = { new Integer(1234), "abc", "def" };
128:
129: try {
130: InvokerHelper.invokeMethod(bean, "stringDemo", null);
131: } catch (InvokerInvocationException e) {
132: System.out.println("Caught: " + e.getCause());
133: e.getCause().printStackTrace();
134: fail("Should not have thrown an exception");
135: }
136: System.out.println("################ Done");
137: }
138: }
|