TelephonyTestUtils.java revision aeb892fb006035636dd0959ad4e4f9cb106ac565
1aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan/* 2aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * Copyright (C) 2015 The Android Open Source Project 3aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * 4aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * Licensed under the Apache License, Version 2.0 (the "License"); 5aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * you may not use this file except in compliance with the License. 6aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * You may obtain a copy of the License at 7aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * 8aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * http://www.apache.org/licenses/LICENSE-2.0 9aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * 10aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * Unless required by applicable law or agreed to in writing, software 11aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * distributed under the License is distributed on an "AS IS" BASIS, 12aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * See the License for the specific language governing permissions and 14aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * limitations under the License. 15aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan */ 16aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan 17aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajanpackage com.android.internal.telephony; 18aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan 19aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajanimport android.telephony.SmsCbMessage; 20aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan 21aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajanimport com.android.internal.telephony.cdma.SmsMessage; 22aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan 23aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajanimport java.lang.reflect.Constructor; 24aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajanimport java.lang.reflect.InvocationTargetException; 25aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajanimport java.lang.reflect.Method; 26aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajanimport junit.framework.Assert; 27aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan 28aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan/** 29aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * This class provides reflection for classes/methods that are not accessible from tests. 30aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * Convention for helper function naming is: classNameFunctionName() 31aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan */ 32aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajanpublic class TelephonyTestUtils { 33aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan 34aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan /** 35aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * This function calls constructor that takes in params. 36aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * This function does not work if any of the parameter passed in is null because 37aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * params[i].getClass() fails. In that case it needs to be handled by the caller (it knows the 38aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * param types so getClass() is not needed) 39aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan */ 40aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan public static Object createNewInstance(String className, Object... params) { 41aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan try { 42aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan Class clazz = Class.forName(className); 43aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan int numParam = params.length; 44aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan Class<?>[] paramType = new Class[numParam]; 45aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan for (int i = 0; i < numParam; i++) { 46aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan paramType[i] = params[i].getClass(); 47aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan } 48aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan Constructor constructor = clazz.getDeclaredConstructor(paramType); 49aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan constructor.setAccessible(true); 50aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan 51aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan return constructor.newInstance(params); 52aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan } catch (Exception e) { 53aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan Assert.fail(e.toString()); 54aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan return null; 55aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan } 56aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan } 57aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan 58aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan /** 59aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * This function does not work if any of the parameter passed in is null because 60aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * params[i].getClass() fails. In that case it needs to be handled by the caller (it knows the 61aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * param types so getClass() is not needed) 62aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan */ 63aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan public static Object invokeStaticMethod(Class<?> clazz, String method, Object... params) { 64aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan try { 65aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan int numParam = params.length; 66aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan Class<?>[] paramType = new Class[numParam]; 67aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan for (int i = 0; i < numParam; i++) { 68aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan paramType[i] = params[i].getClass(); 69aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan } 70aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan Method methodReflection = clazz.getDeclaredMethod(method, paramType); 71aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan methodReflection.setAccessible(true); 72aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan return methodReflection.invoke(null, params); 73aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan } catch (Exception e) { 74aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan Assert.fail(e.toString()); 75aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan return null; 76aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan } 77aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan } 78aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan 79aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan /** 80aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * This is needed when the test expects the method in source being called to throw an exception. 81aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * Throwable will be an instanceof the expected exception. 82aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * This function does not work if any of the parameter passed in is null because 83aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * params[i].getClass() fails. In that case it needs to be handled by the caller (it knows the 84aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * param types so getClass() is not needed) 85aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan */ 86aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan public static Object invokeStaticMethodThrowsException(Class<?> clazz, String method, 87aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan Object... params) throws Throwable { 88aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan try { 89aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan int numParam = params.length; 90aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan Class<?>[] paramType = new Class[numParam]; 91aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan for (int i = 0; i < numParam; i++) { 92aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan paramType[i] = params[i].getClass(); 93aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan } 94aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan Method methodReflection = clazz.getDeclaredMethod(method, paramType); 95aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan methodReflection.setAccessible(true); 96aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan return methodReflection.invoke(null, params); 97aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan } catch (InvocationTargetException e) { 98aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan throw e.getTargetException(); 99aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan } catch (Exception e) { 100aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan Assert.fail(e.toString()); 101aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan return null; 102aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan } 103aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan } 104aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan 105aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan /** 106aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * This function does not work if any of the parameter passed in is null because 107aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * params[i].getClass() fails. In that case it needs to be handled by the caller (it knows the 108aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * param types so getClass() is not needed) 109aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan */ 110aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan public static Object invokeNonStaticMethod(Class<?> clazz, Object caller, String method, 111aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan Object... params) { 112aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan try { 113aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan int numParam = params.length; 114aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan Class<?>[] paramType = new Class[numParam]; 115aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan for (int i = 0; i < numParam; i++) { 116aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan paramType[i] = params[i].getClass(); 117aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan } 118aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan Method methodReflection = clazz.getDeclaredMethod(method, paramType); 119aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan methodReflection.setAccessible(true); 120aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan return methodReflection.invoke(caller, params); 121aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan } catch (Exception e) { 122aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan Assert.fail(e.toString()); 123aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan return null; 124aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan } 125aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan } 126aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan 127aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan /** 128aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * This is needed when the test expects the method in source being called to throw an exception. 129aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * Throwable will be an instanceof the expected exception. 130aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * This function does not work if any of the parameter passed in is null because 131aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * params[i].getClass() fails. In that case it needs to be handled by the caller (it knows the 132aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan * param types so getClass() is not needed) 133aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan */ 134aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan public static Object invokeNonStaticMethodThrowsException(Class<?> clazz, Object caller, 135aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan String method, Object... params) 136aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan throws Throwable { 137aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan try { 138aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan int numParam = params.length; 139aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan Class<?>[] paramType = new Class[numParam]; 140aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan for (int i = 0; i < numParam; i++) { 141aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan paramType[i] = params[i].getClass(); 142aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan } 143aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan Method methodReflection = clazz.getDeclaredMethod(method, paramType); 144aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan methodReflection.setAccessible(true); 145aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan return methodReflection.invoke(caller, params); 146aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan } catch (InvocationTargetException e) { 147aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan throw e.getTargetException(); 148aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan } catch (Exception e) { 149aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan Assert.fail(e.toString()); 150aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan return null; 151aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan } 152aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan } 153aeb892fb006035636dd0959ad4e4f9cb106ac565Amit Mahajan} 154