1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 package org/codehaus/groovy/classgen/package-summary.html">> org.codehaus.groovy.classgen;
48
49 import org.codehaus.groovy.ast.ClassHelper;
50 import org.codehaus.groovy.ast.ClassNode;
51 import org.codehaus.groovy.ast.MethodNode;
52 import org.codehaus.groovy.ast.Parameter;
53 import org.codehaus.groovy.ast.expr.BinaryExpression;
54 import org.codehaus.groovy.ast.expr.DeclarationExpression;
55 import org.codehaus.groovy.ast.expr.BooleanExpression;
56 import org.codehaus.groovy.ast.expr.ConstantExpression;
57 import org.codehaus.groovy.ast.expr.GStringExpression;
58 import org.codehaus.groovy.ast.expr.MethodCallExpression;
59 import org.codehaus.groovy.ast.expr.VariableExpression;
60 import org.codehaus.groovy.ast.stmt.AssertStatement;
61 import org.codehaus.groovy.ast.stmt.BlockStatement;
62 import org.codehaus.groovy.ast.stmt.ExpressionStatement;
63 import org.codehaus.groovy.runtime.InvokerHelper;
64 import org.codehaus.groovy.runtime.InvokerInvocationException;
65 import org.codehaus.groovy.syntax.Token;
66
67 /***
68 *
69 * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
70 * @version $Revision: 1.14 $
71 */
72 public class GStringTest extends TestSupport {
73
74 public void testConstructor() throws Exception {
75 ClassNode classNode = new ClassNode("Foo", ACC_PUBLIC, ClassHelper.OBJECT_TYPE);
76
77
78
79
80 GStringExpression compositeStringExpr = new GStringExpression( "hello ${user}!" );
81 compositeStringExpr.addString(new ConstantExpression("Hello "));
82 compositeStringExpr.addValue(new VariableExpression("user"));
83 compositeStringExpr.addString(new ConstantExpression("!"));
84 BlockStatement block = new BlockStatement();
85 block.addStatement(
86 new ExpressionStatement(
87 new DeclarationExpression(
88 new VariableExpression("user"),
89 Token.newSymbol("=", -1, -1),
90 new ConstantExpression("World"))));
91 block.addStatement(
92 new ExpressionStatement(
93 new DeclarationExpression(new VariableExpression("str"), Token.newSymbol( "=", -1, -1), compositeStringExpr)));
94 block.addStatement(
95 new ExpressionStatement(
96 new MethodCallExpression(VariableExpression.THIS_EXPRESSION, "println", new VariableExpression("str"))));
97
98 block.addStatement(
99 new ExpressionStatement(
100 new DeclarationExpression(
101 new VariableExpression("text"),
102 Token.newSymbol( "=", -1, -1),
103 new MethodCallExpression(new VariableExpression("str"), "toString", ConstantExpression.NULL))));
104
105 block.addStatement(
106 new AssertStatement(
107 new BooleanExpression(
108 new BinaryExpression(
109 new VariableExpression("text"),
110 Token.newSymbol( "==", -1, -1),
111 new ConstantExpression("Hello World!")))));
112 classNode.addMethod(new MethodNode("stringDemo", ACC_PUBLIC, ClassHelper.VOID_TYPE, Parameter.EMPTY_ARRAY, ClassNode.EMPTY_ARRAY, block));
113
114 Class fooClass = loadClass(classNode);
115 assertTrue("Loaded a new class", fooClass != null);
116
117 Object bean = fooClass.newInstance();
118 assertTrue("Managed to create bean", bean != null);
119
120 System.out.println("################ Now about to invoke method");
121
122
123
124 try {
125 InvokerHelper.invokeMethod(bean, "stringDemo", null);
126 }
127 catch (InvokerInvocationException e) {
128 System.out.println("Caught: " + e.getCause());
129 e.getCause().printStackTrace();
130 fail("Should not have thrown an exception");
131 }
132 System.out.println("################ Done");
133 }
134 }