/****************************************************************************** * Copyright (c) 2006, 2010 VMware Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Apache License v2.0 which accompanies this distribution. * The Eclipse Public License is available at * http://www.eclipse.org/legal/epl-v10.html and the Apache License v2.0 * is available at http://www.opensource.org/licenses/apache2.0.php. * You may elect to redistribute this code under either of these licenses. * * Contributors: * VMware Inc. *****************************************************************************/ package org.eclipse.gemini.blueprint; import java.lang.reflect.Field; import java.lang.reflect.Method; import org.springframework.util.ObjectUtils; import org.springframework.util.ReflectionUtils; import org.springframework.util.ReflectionUtils.FieldCallback; import org.springframework.util.ReflectionUtils.FieldFilter; /** * Util classes for test cases. * * @author Costin Leau * */ public abstract class TestUtils { public static Object getFieldValue(final Object object, final String fieldName) { final Object[] fld = new Object[1]; ReflectionUtils.doWithFields(object.getClass(), new FieldCallback() { public void doWith(Field field) throws IllegalArgumentException, IllegalAccessException { field.setAccessible(true); fld[0] = field.get(object); } }, new FieldFilter() { public boolean matches(Field field) { return fld[0] == null && fieldName.equals(field.getName()); } }); return fld[0]; } private static Object invokeMethod(final Object target, final Class<?> targetClass, String methodName, Object[] args) { Class<?>[] types = null; if (ObjectUtils.isEmpty(args)) { types = new Class[0]; } else { types = new Class[args.length]; for (int objectIndex = 0; objectIndex < args.length; objectIndex++) { types[objectIndex] = args[objectIndex].getClass(); } } Method method = ReflectionUtils.findMethod(targetClass, methodName, types); ReflectionUtils.makeAccessible(method); return ReflectionUtils.invokeMethod(method, target, args); } public static Object invokeMethod(final Object target, String methodName, Object[] args) { return invokeMethod(target, target.getClass(), methodName, args); } public static Object invokeStaticMethod(final Class<?> target, String methodName, Object[] args) { return invokeMethod(null, target, methodName, args); } }