1 46 47 package org.codehaus.groovy.classgen; 48 49 import org.codehaus.groovy.ast.ClassNode; 50 import org.codehaus.groovy.ast.ConstructorNode; 51 import org.codehaus.groovy.ast.MethodNode; 52 import org.codehaus.groovy.ast.Parameter; 53 import org.codehaus.groovy.ast.expr.ConstantExpression; 54 import org.codehaus.groovy.ast.stmt.BlockStatement; 55 import org.codehaus.groovy.ast.stmt.ReturnStatement; 56 import org.codehaus.groovy.ast.stmt.Statement; 57 import org.codehaus.groovy.runtime.InvokerHelper; 58 59 64 public class MethodTest extends TestSupport { 65 66 public void testMethods() throws Exception { 67 ClassNode classNode = new ClassNode("Foo", ACC_PUBLIC, "java.lang.Object"); 68 classNode.addConstructor(new ConstructorNode(ACC_PUBLIC, null)); 69 70 Statement statementA = new ReturnStatement(new ConstantExpression("calledA")); 71 Statement statementB = new ReturnStatement(new ConstantExpression("calledB")); 72 Statement emptyStatement = new BlockStatement(); 73 74 classNode.addMethod(new MethodNode("a", ACC_PUBLIC, "java.lang.Object", Parameter.EMPTY_ARRAY, statementA)); 75 classNode.addMethod(new MethodNode("b", ACC_PUBLIC, null, Parameter.EMPTY_ARRAY, statementB)); 76 77 classNode.addMethod(new MethodNode("noReturnMethodA", ACC_PUBLIC, null, Parameter.EMPTY_ARRAY, emptyStatement)); 78 classNode.addMethod(new MethodNode("noReturnMethodB", ACC_PUBLIC, "java.lang.Object", Parameter.EMPTY_ARRAY, emptyStatement)); 79 80 classNode.addMethod(new MethodNode("c", ACC_PUBLIC, "void", Parameter.EMPTY_ARRAY, emptyStatement)); 81 82 Class fooClass = loadClass(classNode); 83 assertTrue("Loaded a new class", fooClass != null); 84 85 Object bean = fooClass.newInstance(); 86 assertTrue("Created instance of class: " + bean, bean != null); 87 88 assertCallMethod(bean, "a", "calledA"); 89 assertCallMethod(bean, "b", "calledB"); 90 assertCallMethod(bean, "noReturnMethodA", null); 91 assertCallMethod(bean, "noReturnMethodB", null); 92 assertCallMethod(bean, "c", null); 93 } 94 95 protected void assertCallMethod(Object object, String method, Object expected) { 96 Object value = InvokerHelper.invokeMethod(object, method, new Object [0]); 97 assertEquals("Result of calling method: " + method + " on: " + object + " with empty list", expected, value); 98 99 value = InvokerHelper.invokeMethod(object, method, null); 100 assertEquals("Result of calling method: " + method + " on: " + object + " with null", expected, value); 101 } 102 } 103 | Popular Tags |