package com.android.tests.basic;
import android.test.ActivityInstrumentationTestCase2;
import android.test.suitebuilder.annotation.MediumTest;
import android.widget.TextView;
import java.lang.reflect.Method;
public class MainTest extends ActivityInstrumentationTestCase2<Main> {
private Main mainActivity;
private TextView mTextView;
/**
* Creates an {@link ActivityInstrumentationTestCase2} that tests the {@link Main} activity.
*/
public MainTest() {
super(Main.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
mainActivity = getActivity();
// ensure a valid handle to the activity has been returned
assertNotNull(mainActivity);
mTextView = (TextView) mainActivity.findViewById(R.id.dateText);
}
/**
* The name 'test preconditions' is a convention to signal that if this
* test doesn't pass, the test case was not set up properly and it might
* explain any and all failures in other tests. This is not guaranteed
* to run before other tests, as junit uses reflection to find the tests.
*/
@MediumTest
public void testPreconditions() {
assertNotNull(mTextView);
}
public void testNonObfuscatedMethod1() {
// check we can call the method since it shouldn't be obfuscated.
mainActivity.setUpTextView1();
// then test we can actually find the lib method
String className = "com.android.tests.basic.StringGetter";
String methodName = "getString";
searchMethod(className, methodName, true /*shouldExist*/);
}
public void testNonObfuscatedMethod2() {
// check we can call the method since it shouldn't be obfuscated.
mainActivity.setUpTextView2();
// then test we cannot find the lib method since it should be
// obfuscated by the app.
String className = "com.android.tests.basic.StringGetter";
String methodName = "getString2";
searchMethod(className, methodName, false /*shouldExist*/);
}
/**
* use reflection to get a method that should be obfuscated
*/
public void testConsumerProguardRules() {
String className = "com.android.tests.basic.StringGetter";
String methodName = "getStringInternal";
searchMethod(className, methodName, false /*shouldExist*/);
}
public void testLib2ObfuscatedClass() {
// in this case the whole class has been obfuscated.
String className = "com.android.tests.basic.StringProvider";
try {
Class<?> theClass = Class.forName(className);
fail("Found " + className);
} catch (ClassNotFoundException e) {
// expected
}
}
private void searchMethod(String className, String methodName, boolean shouldExist) {
try {
Class<?> theClass = Class.forName(className);
Method method = theClass.getDeclaredMethod(methodName, int.class);
if (!shouldExist) {
fail("Found " + className + "." + methodName);
}
} catch (ClassNotFoundException e) {
fail("Did not find " + className);
} catch (NoSuchMethodException e) {
if (shouldExist) {
fail("Did not find " + className + "." + methodName);
}
}
}
}