invokemethodtest.java
来自「Groovy动态语言 运行在JVM中的动态语言 可以方便的处理业务逻辑变化大的业」· Java 代码 · 共 459 行 · 第 1/2 页
JAVA
459 行
Object value = invoke(this, "overloadedRemove", new Object[] { new Integer(5)});
assertEquals("called with integer", "int5", value);
}
public void testCallListRemove() throws Throwable {
List list = new ArrayList();
list.add("foo");
list.add("bar");
invoke(list, "remove", new Object[] { new Integer(0)});
assertEquals("Should have just 1 item left: " + list, 1, list.size());
}
public void testCoerceGStringToString() throws Throwable {
GString param = new GString(new Object[] { "James" }) {
public String[] getStrings() {
return new String[] { "Hello " };
}
};
Object value = invoke(this, "methodTakesString", new Object[] { param });
assertEquals("converted GString to string", param.toString(), value);
}
public void testCoerceGStringToStringOnGetBytes() throws Throwable {
GString param = new GString(new Object[] { "US-ASCII" }) {
public String[] getStrings() {
return new String[] { "" };
}
};
Object value = invoke("test", "getBytes", new Object[] { param });
assertEquals("converted GString to string", "test".getBytes("US-ASCII").getClass(), value.getClass());
}
public void testBadBDToDoubleCoerce() throws Throwable {
try {
invoke(Math.class, "floor", new BigDecimal("1.7E309"));
} catch (IllegalArgumentException e) {
assertTrue("Math.floor(1.7E309) should fail because it is out of range for a Double. "
+e,e.getMessage().indexOf("out of range") > 0);
return;
}
fail("Math.floor(1.7E309) should fail because it is out of range for a Double.");
}
public void testClassMethod() throws Throwable {
Class c = String.class;
Object value = invoke(c, "getName", null);
assertEquals("Class.getName()", c.getName(), value);
c = getClass();
value = invoke(c, "getName", null);
assertEquals("Class.getName()", c.getName(), value);
}
public void testProtectedMethod() throws Throwable {
String param = "hello";
Object value = invoke(this, "aProtectedMethod", param);
assertEquals("protected method call", aProtectedMethod(param), value);
}
public void testPrivateMethod() throws Throwable {
String param = "hello";
Object value = invoke(this, "aPrivateMethod", param);
assertEquals("private method call", aPrivateMethod(param), value);
}
public void testStringSubstringMethod() throws Throwable {
String object = "hello";
Object value = invoke(object, "substring", new Integer(2));
assertEquals("substring(2)", object.substring(2), value);
value = invoke(object, "substring", new Object[] { new Integer(1), new Integer(3)});
assertEquals("substring(1,3)", object.substring(1, 3), value);
}
public void testListGetWithRange() throws Throwable {
List list = Arrays.asList(new Object[] { "a", "b", "c" });
Object range = new IntRange(0, 2);
Object value = invoke(list, "getAt", range);
assertTrue("Returned List: " + value, value instanceof List);
List retList = (List) value;
assertEquals("List size", 3, retList.size());
}
public void testSetLenientOnDateFormat() throws Throwable {
SimpleDateFormat a = new SimpleDateFormat( "MM/dd/yyyy" );
Object value = invoke(a, "setLenient", new Object[] { Boolean.FALSE });
assertEquals("void method", null, value);
}
public void testInvokeUnknownMethod() throws Throwable {
try {
Object value = invoke(this, "unknownMethod", "abc");
fail("Should have thrown an exception");
}
catch (GroovyRuntimeException e) {
// worked
}
}
public void testInvokeMethodWithWrongNumberOfParameters() throws Throwable {
try {
Object[] args = { "a", "b" };
invoke(this, "unknownMethod", args);
fail("Should have thrown an exception");
}
catch (GroovyRuntimeException e) {
// worked
}
}
public void testInvokeMethodOnNullObject() throws Throwable {
try {
invoke(null, "mockCallWithNoParams", null);
fail("Should have thrown an exception");
}
catch (NullPointerException e) {
// worked
}
}
// Mock methods used for testing
//-------------------------------------------------------------------------
public Object mockCallWithNoParams() {
return "NoParams";
}
public Object mockCallWithOneParam(Object value) {
assertEquals("Method not passed in the correct value", "abc", value);
return "OneParam";
}
public Object mockCallWithOneNullParam(Object value) {
assertEquals("Method not passed in the correct value", null, value);
return "OneParamWithNull";
}
public Integer mockCallWithOneCollectionParam(Object collection) {
Collection coll = DefaultTypeTransformation.asCollection(collection);
return new Integer(coll.size());
}
public Object mockOverloadedMethod() {
return "void";
}
public Object mockOverloadedMethod(Object object) {
return "Object";
}
public Object mockOverloadedMethod(Number object) {
return "Number";
}
public Object mockOverloadedMethod(String object) {
return "String";
}
public Object mockOverloadedMethod(Object object, Object bar) {
return "Object,Object";
}
public Object mockOverloadedMethod(Object object, Object[] array) {
return "Object,Object[]";
}
public Object badOverload(String a, Object b) {
return "String, Object";
}
public Object badOverload(Object a, String b) {
return "Object, String";
}
public Object methodTakesString(String x) {
return x;
}
public Object overloadedRemove(int idx) {
return "int" + idx;
}
public Object overloadedRemove(Object value) {
return "Object" + value;
}
// Implementation methods
//-------------------------------------------------------------------------
protected Object aProtectedMethod(String param) {
return param + " there!";
}
private Object aPrivateMethod(String param) {
return param + " James!";
}
protected void assertMethodCall(Object object, String method, Object param, Object expected) {
Object value = InvokerHelper.invokeMethod(object, method, new Object[] { param });
assertEquals("result of method: " + method, expected, value);
}
/**
* Asserts that invoking the method chooser finds the right overloaded
* method implementation
*
* @param expected
* is the expected value of the method
* @param arguments
* the argument(s) to the method invocation
*/
protected void assertMethodChooser(Object expected, Object arguments) throws Throwable {
Object value = invoke(this, "mockOverloadedMethod", arguments);
assertEquals("Invoking overloaded method for arguments: " + InvokerHelper.toString(arguments), expected, value);
}
protected Object invoke(Object object, String method, Object args) throws Throwable {
try {
return invoker.invokeMethod(object, method, args);
}
catch (InvokerInvocationException e) {
throw e.getCause();
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?