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;
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.BooleanExpression;
55 import org.codehaus.groovy.ast.expr.ConstantExpression;
56 import org.codehaus.groovy.ast.expr.GStringExpression;
57 import org.codehaus.groovy.ast.expr.MethodCallExpression;
58 import org.codehaus.groovy.ast.expr.VariableExpression;
59 import org.codehaus.groovy.ast.stmt.AssertStatement;
60 import org.codehaus.groovy.ast.stmt.BlockStatement;
61 import org.codehaus.groovy.ast.stmt.ExpressionStatement;
62 import org.codehaus.groovy.runtime.InvokerHelper;
63 import org.codehaus.groovy.runtime.InvokerInvocationException;
64 import org.codehaus.groovy.syntax.Token;
65
66 /***
67 *
68 * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
69 * @version $Revision: 1.12 $
70 */
71 public class GStringTest extends TestSupport {
72
73 public void testConstructor() throws Exception {
74 ClassNode classNode = new ClassNode("Foo", ACC_PUBLIC, ClassHelper.OBJECT_TYPE);
75
76
77
78
79 GStringExpression compositeStringExpr = new GStringExpression( "hello ${user}!" );
80 compositeStringExpr.addString(new ConstantExpression("Hello "));
81 compositeStringExpr.addValue(new VariableExpression("user"));
82 compositeStringExpr.addString(new ConstantExpression("!"));
83 BlockStatement block = new BlockStatement();
84 block.addStatement(
85 new ExpressionStatement(
86 new BinaryExpression(
87 new VariableExpression("user"),
88 Token.newSymbol("=", -1, -1),
89 new ConstantExpression("World"))));
90 block.addStatement(
91 new ExpressionStatement(
92 new BinaryExpression(new VariableExpression("str"), Token.newSymbol( "=", -1, -1), compositeStringExpr)));
93 block.addStatement(
94 new ExpressionStatement(
95 new MethodCallExpression(VariableExpression.THIS_EXPRESSION, "println", new VariableExpression("str"))));
96
97 block.addStatement(
98 new ExpressionStatement(
99 new BinaryExpression(
100 new VariableExpression("text"),
101 Token.newSymbol( "=", -1, -1),
102 new MethodCallExpression(new VariableExpression("str"), "toString", ConstantExpression.NULL))));
103
104 block.addStatement(
105 new AssertStatement(
106 new BooleanExpression(
107 new BinaryExpression(
108 new VariableExpression("text"),
109 Token.newSymbol( "==", -1, -1),
110 new ConstantExpression("Hello World!")))));
111 classNode.addMethod(new MethodNode("stringDemo", ACC_PUBLIC, ClassHelper.VOID_TYPE, Parameter.EMPTY_ARRAY, block));
112
113 Class fooClass = loadClass(classNode);
114 assertTrue("Loaded a new class", fooClass != null);
115
116 Object bean = fooClass.newInstance();
117 assertTrue("Managed to create bean", bean != null);
118
119 System.out.println("################ Now about to invoke method");
120
121
122
123 try {
124 InvokerHelper.invokeMethod(bean, "stringDemo", null);
125 }
126 catch (InvokerInvocationException e) {
127 System.out.println("Caught: " + e.getCause());
128 e.getCause().printStackTrace();
129 fail("Should not have thrown an exception");
130 }
131 System.out.println("################ Done");
132 }
133 }