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.ConstructorNode;
52 import org.codehaus.groovy.ast.FieldNode;
53 import org.codehaus.groovy.ast.MethodNode;
54 import org.codehaus.groovy.ast.Parameter;
55 import org.codehaus.groovy.ast.PropertyNode;
56 import org.codehaus.groovy.ast.expr.BinaryExpression;
57 import org.codehaus.groovy.ast.expr.BooleanExpression;
58 import org.codehaus.groovy.ast.expr.ConstantExpression;
59 import org.codehaus.groovy.ast.expr.FieldExpression;
60 import org.codehaus.groovy.ast.stmt.ExpressionStatement;
61 import org.codehaus.groovy.ast.stmt.IfStatement;
62 import org.codehaus.groovy.ast.stmt.Statement;
63 import org.codehaus.groovy.runtime.InvokerHelper;
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.8 $
70 */
71 public class IfElseTest extends TestSupport {
72
73 public void testLoop() throws Exception {
74 ClassNode classNode = new ClassNode("Foo", ACC_PUBLIC, ClassHelper.OBJECT_TYPE);
75 classNode.addConstructor(new ConstructorNode(ACC_PUBLIC, null));
76 classNode.addProperty(new PropertyNode("bar", ACC_PUBLIC, ClassHelper.STRING_TYPE, classNode, null, null, null));
77
78 classNode.addProperty(new PropertyNode("result", ACC_PUBLIC, ClassHelper.STRING_TYPE, classNode, null, null, null));
79
80 BooleanExpression expression =
81 new BooleanExpression(
82 new BinaryExpression(
83 new FieldExpression(
84 new FieldNode("bar", ACC_PRIVATE, ClassHelper.STRING_TYPE, classNode, ConstantExpression.NULL)),
85 Token.newSymbol("==", 0, 0),
86 new ConstantExpression("abc")));
87
88 Statement trueStatement =
89 new ExpressionStatement(
90 new BinaryExpression(
91 new FieldExpression(
92 new FieldNode("result", ACC_PRIVATE, ClassHelper.STRING_TYPE, classNode, ConstantExpression.NULL)),
93 Token.newSymbol("=", 0, 0),
94 new ConstantExpression("worked")));
95
96 Statement falseStatement = createPrintlnStatement(new ConstantExpression("false"));
97
98 IfStatement statement = new IfStatement(expression, trueStatement, falseStatement);
99 classNode.addMethod(new MethodNode("ifDemo", ACC_PUBLIC, ClassHelper.VOID_TYPE, Parameter.EMPTY_ARRAY, ClassNode.EMPTY_ARRAY, statement));
100
101 Class fooClass = loadClass(classNode);
102 assertTrue("Loaded a new class", fooClass != null);
103
104 Object bean = fooClass.newInstance();
105 assertTrue("Managed to create bean", bean != null);
106
107 assertSetProperty(bean, "bar", "abc");
108
109 System.out.println("################ Now about to invoke method");
110
111 Object[] array = {
112 };
113
114 InvokerHelper.invokeMethod(bean, "ifDemo", array);
115
116 System.out.println("################ Done");
117
118 assertGetProperty(bean, "result", "worked");
119 }
120 }