blob: ea3710da486e23d0cf3f8632244ccaf5f771c7e4 [file] [log] [blame]
package com.android.test.hierarchyviewer;
import android.test.ActivityInstrumentationTestCase2;
import android.view.View;
import java.io.ByteArrayOutputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;
import java.util.Map;
public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity> {
private MainActivity mActivity;
private View mTextView;
public MainActivityTest() {
super(MainActivity.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
mActivity = getActivity();
mTextView = mActivity.findViewById(R.id.textView);
}
private byte[] encode(View view) throws ClassNotFoundException, NoSuchMethodException,
IllegalAccessException, InstantiationException, InvocationTargetException {
ByteArrayOutputStream baos = new ByteArrayOutputStream(1024 * 1024);
Object encoder = createEncoder(baos);
invokeMethod(View.class, view, "encode", encoder);
invokeMethod(encoder.getClass(), encoder, "endStream");
return baos.toByteArray();
}
private Object invokeMethod(Class targetClass, Object target, String methodName, Object... params)
throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
Class[] paramClasses = new Class[params.length];
for (int i = 0; i < params.length; i++) {
paramClasses[i] = params[i].getClass();
}
Method method = targetClass.getDeclaredMethod(methodName, paramClasses);
method.setAccessible(true);
return method.invoke(target, params);
}
private Object createEncoder(ByteArrayOutputStream baos) throws ClassNotFoundException,
NoSuchMethodException, IllegalAccessException, InvocationTargetException,
InstantiationException {
Class clazz = Class.forName("android.view.ViewHierarchyEncoder");
Constructor constructor = clazz.getConstructor(ByteArrayOutputStream.class);
return constructor.newInstance(baos);
}
public void testTextView() throws Exception {
byte[] data = encode(mTextView);
assertNotNull(data);
assertTrue(data.length > 0);
ViewDumpParser parser = new ViewDumpParser();
parser.parse(data);
List<Map<Short, Object>> views = parser.getViews();
Map<String, Short> propertyNameTable = parser.getIds();
assertEquals(1, views.size());
assertNotNull(propertyNameTable);
Map<Short, Object> textViewProperties = views.get(0);
assertEquals("android.widget.TextView",
textViewProperties.get(propertyNameTable.get("meta:__name__")));
assertEquals(mActivity.getString(R.string.test),
textViewProperties.get(propertyNameTable.get("text:text")));
}
}