📄 invokemethodtest.java
字号:
/* * $Id: InvokeMethodTest.java,v 1.32 2006/03/03 00:39:20 blackdrag Exp $ * * Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved. * * Redistribution and use of this software and associated documentation * ("Software"), with or without modification, are permitted provided that the * following conditions are met: * 1. Redistributions of source code must retain copyright statements and * notices. Redistributions must also contain a copy of this document. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name "groovy" must not be used to endorse or promote products * derived from this Software without prior written permission of The Codehaus. * For written permission, please contact info@codehaus.org. * 4. Products derived from this Software may not be called "groovy" nor may * "groovy" appear in their names without prior written permission of The * Codehaus. "groovy" is a registered trademark of The Codehaus. * 5. Due credit should be given to The Codehaus - http://groovy.codehaus.org/ * * THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE CODEHAUS OR ITS CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. * */package org.codehaus.groovy.runtime;import groovy.lang.GString;import groovy.lang.GroovyRuntimeException;import groovy.lang.IntRange;import groovy.util.GroovyTestCase;import java.math.BigDecimal;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Arrays;import java.util.Collection;import java.util.Date;import java.util.List;import junit.framework.AssertionFailedError;/** * Tests method invocation * * @author <a href="mailto:james@coredevelopers.net">James Strachan</a> * @version $Revision: 1.32 $ */public class InvokeMethodTest extends GroovyTestCase { protected Invoker invoker = InvokerHelper.getInstance(); // Method invocation tests //------------------------------------------------------------------------- public void testInvokeMethodNoParams() throws Throwable { Object value = invoke(this, "mockCallWithNoParams", null); assertEquals("return value", "NoParams", value); value = invoke(this, "mockCallWithNoParams", new Object[0]); assertEquals("return value", "NoParams", value); } public void testInvokeMethodOneParam() throws Throwable { Object value = invoke(this, "mockCallWithOneParam", "abc"); assertEquals("return value", "OneParam", value); } public void testInvokeMethodOneParamWhichIsNull() throws Throwable { Object value = invoke(this, "mockCallWithOneNullParam", new Object[] { null }); assertEquals("return value", "OneParamWithNull", value); value = invoke(this, "mockCallWithOneNullParam", null); assertEquals("return value", "OneParamWithNull", value); } public void testInvokeOverloadedMethodWithOneParamWhichIsNull() throws Throwable { Object value = invoke(this, "mockOverloadedMethod", new Object[] { null }); assertEquals("return value", "Object", value); } public void testInvokeMethodOneCollectionParameter() throws Throwable { Object[] foo = { "a", "b", "c" }; Object value = invoke(this, "mockCallWithOneCollectionParam", new Object[] { foo }); assertEquals("return value", new Integer(3), value); List list = new ArrayList(); list.add("a"); list.add("b"); value = invoke(this, "mockCallWithOneCollectionParam", list); assertEquals("return value", new Integer(2), value); } public void testInvokePrintlnMethod() throws Throwable { Object value = invoke(System.out, "println", "testing System.out.println..."); assertEquals("return value", null, value); } public void testMethodChooserNull() throws Throwable { assertMethodChooser("Object", new Object[] { null }); } public void testMethodChooserNoParams() throws Throwable { assertMethodChooser("void", null); } public void testMethodChooserObject() throws Throwable { assertMethodChooser("Object", new Object()); assertMethodChooser("Object", new Date()); } public void testMethodChooserString_FAILS() throws Throwable { if (notYetImplemented()) return; assertMethodChooser("String", "foo"); assertMethodChooser("String", new StringBuffer()); assertMethodChooser("String", new Character('a')); } public void testMethodChooserNumber() throws Throwable { assertMethodChooser("Number", new Integer(2)); assertMethodChooser("Number", new Double(2)); } public void testMethodChooserTwoParams() throws Throwable { List list = new ArrayList(); list.add("foo"); list.add("bar"); assertMethodChooser("Object,Object", list.toArray()); Object[] blah = { "a", "b" }; assertMethodChooser("Object,Object", blah); } public void testInstanceofWorksForArray() { Class type = Object[].class; Object value = new Object[1]; assertTrue("instanceof works for array", type.isInstance(value)); } public void testMethodChooserTwoParamsWithSecondAnObjectArray() throws Throwable { Object[] blah = { "a", new Object[] { "b" } }; assertMethodChooser("Object,Object[]", blah); } public void testCollectionMethods() throws Throwable { Object list = InvokerHelper.createList(new Object[] { "a", "b" }); Object value = invoke(list, "size", null); assertEquals("size of collection", new Integer(2), value); value = invoke(list, "contains", "a"); assertEquals("contains method", Boolean.TRUE, value); } public void testNewMethods() throws Throwable { Object value = invoke("hello", "size", null); assertEquals("size of string", new Integer(5), value); } public void testStaticMethod() throws Throwable { Object value = invoke(DummyBean.class, "dummyStaticMethod", "abc"); assertEquals("size of string", "ABC", value); } public void testBaseClassMethod() throws Throwable { Object object = new DummyBean(); Object value = invoke(object, "toString", null); assertEquals("toString", object.toString(), value); } //SPG modified to reflect DefaultGroovyMethod name change and expected result from //Integer/Integer division. public void testDivideNumbers() throws Throwable { assertMethodCall(new Double(10), "div", new Double(2), new Double(5)); assertMethodCall(new Double(10), "div", new Integer(2), new Double(5)); assertMethodCall(new Integer(10), "div", new Double(2), new Double(5)); assertMethodCall(new Integer(10), "div", new Integer(2), new java.math.BigDecimal("5")); } public void testBaseFailMethod() throws Throwable { Object value; try { value = invoke(this, "fail", "hello"); } catch (AssertionFailedError e) { // worked } } public void testToArrayOnList() throws Throwable { List object = new ArrayList(); object.add("Hello"); Object[] value = (Object[]) invoke(object, "toArray", null); assertArrayEquals(object.toArray(), value); assertEquals(1, value.length); assertEquals("Hello", value[0]); value = (Object[]) invoke(object, "toArray", new Object[0]); assertArrayEquals(object.toArray(), value); } public void testInvalidOverloading() throws Throwable { try { invoke(this, "badOverload", new Object[] { "a", "b" }); fail("Should fail as an unambiguous method is invoked"); } catch (GroovyRuntimeException e) { System.out.println("Caught: " + e); } } public void testPlusWithNull() throws Throwable { String param = "called with: "; Object value = invoke(param, "plus", new Object[] { null }); assertEquals("called with null", param + null, value); } public void testCallIntMethodWithInteger() throws Throwable {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -