summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrett Chabot <brettchabot@google.com>2013-07-01 16:19:08 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2013-07-01 16:19:08 +0000
commit3bfb06f3c03fd9e58f50fda72eb2c69bd153b690 (patch)
treeae9b27639f65cd83888ae9683bd672d9364d5d84
parent17890df1f996c3f7a340ce1acec53c5eb3dce5a1 (diff)
parent442abfa0f3e4ef244665ec20082c50d5cc6d4149 (diff)
downloadtesting-3bfb06f3c03fd9e58f50fda72eb2c69bd153b690.tar.gz
Merge "Support -e package in AndroidJUnitRunner."
-rw-r--r--androidtestlib/src/com/android/test/runner/AndroidJUnitRunner.java9
-rw-r--r--androidtestlib/src/com/android/test/runner/ClassPathScanner.java13
-rw-r--r--androidtestlib/src/com/android/test/runner/TestRequestBuilder.java34
3 files changed, 44 insertions, 12 deletions
diff --git a/androidtestlib/src/com/android/test/runner/AndroidJUnitRunner.java b/androidtestlib/src/com/android/test/runner/AndroidJUnitRunner.java
index a852574..f3c2aa7 100644
--- a/androidtestlib/src/com/android/test/runner/AndroidJUnitRunner.java
+++ b/androidtestlib/src/com/android/test/runner/AndroidJUnitRunner.java
@@ -76,6 +76,9 @@ import java.util.List;
* -e class com.android.foo.FooTest,com.android.foo.TooTest
* com.android.foo/com.android.test.runner.AndroidJUnitRunner
* <p/>
+ * <b>Running all tests in a java package:</b> adb shell am instrument -w
+ * -e package com.android.foo.bar
+ * com.android.foo/com.android.test.runner.AndroidJUnitRunner
* <b>To debug your tests, set a break point in your code and pass:</b>
* -e debug true
* <p/>
@@ -134,6 +137,7 @@ public class AndroidJUnitRunner extends Instrumentation {
private static final String ARGUMENT_SUITE_ASSIGNMENT = "suiteAssignment";
private static final String ARGUMENT_DEBUG = "debug";
private static final String ARGUMENT_EXTRA_LISTENER = "extraListener";
+ private static final String ARGUMENT_TEST_PACKAGE = "package";
// TODO: consider supporting 'count' from InstrumentationTestRunner
private static final String LOG_TAG = "AndroidJUnitRunner";
@@ -342,6 +346,11 @@ public class AndroidJUnitRunner extends Instrumentation {
}
}
+ String testPackage = arguments.getString(ARGUMENT_TEST_PACKAGE);
+ if (testPackage != null) {
+ builder.addTestPackageFilter(testPackage);
+ }
+
String testSize = arguments.getString(ARGUMENT_TEST_SIZE);
if (testSize != null) {
builder.addTestSizeFilter(testSize);
diff --git a/androidtestlib/src/com/android/test/runner/ClassPathScanner.java b/androidtestlib/src/com/android/test/runner/ClassPathScanner.java
index a8a24db..19ef3fe 100644
--- a/androidtestlib/src/com/android/test/runner/ClassPathScanner.java
+++ b/androidtestlib/src/com/android/test/runner/ClassPathScanner.java
@@ -19,9 +19,12 @@ package com.android.test.runner;
import dalvik.system.DexFile;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.LinkedHashSet;
+import java.util.List;
import java.util.Set;
/**
@@ -65,10 +68,14 @@ class ClassPathScanner {
* A {@link ClassNameFilter} that chains one or more filters together
*/
public static class ChainedClassNameFilter implements ClassNameFilter {
- private final ClassNameFilter[] mFilters;
+ private final List<ClassNameFilter> mFilters = new ArrayList<ClassNameFilter>();
- public ChainedClassNameFilter(ClassNameFilter... filters) {
- mFilters = filters;
+ public void add(ClassNameFilter filter) {
+ mFilters.add(filter);
+ }
+
+ public void addAll(ClassNameFilter... filters) {
+ mFilters.addAll(Arrays.asList(filters));
}
/**
diff --git a/androidtestlib/src/com/android/test/runner/TestRequestBuilder.java b/androidtestlib/src/com/android/test/runner/TestRequestBuilder.java
index 3c3520b..6dd895f 100644
--- a/androidtestlib/src/com/android/test/runner/TestRequestBuilder.java
+++ b/androidtestlib/src/com/android/test/runner/TestRequestBuilder.java
@@ -26,6 +26,7 @@ import android.util.Log;
import com.android.test.runner.ClassPathScanner.ChainedClassNameFilter;
import com.android.test.runner.ClassPathScanner.ExcludePackageNameFilter;
import com.android.test.runner.ClassPathScanner.ExternalClassNameFilter;
+import com.android.test.runner.ClassPathScanner.InclusivePackageNameFilter;
import org.junit.runner.Computer;
import org.junit.runner.Description;
@@ -59,6 +60,7 @@ public class TestRequestBuilder {
private Filter mFilter = new AnnotationExclusionFilter(Suppress.class);
private PrintStream mWriter;
private boolean mSkipExecution = false;
+ private String mTestPackageName = null;
/**
* Filter that only runs tests whose method or class has been annotated with given filter.
@@ -207,6 +209,14 @@ public class TestRequestBuilder {
}
/**
+ * Run only tests within given java package
+ * @param testPackage
+ */
+ public void addTestPackageFilter(String testPackage) {
+ mTestPackageName = testPackage;
+ }
+
+ /**
* Run only tests with given size
* @param testSize
*/
@@ -306,17 +316,23 @@ public class TestRequestBuilder {
Log.i(LOG_TAG, String.format("Scanning classpath to find tests in apks %s",
Arrays.toString(mApkPaths)));
ClassPathScanner scanner = new ClassPathScanner(mApkPaths);
- try {
- // exclude inner classes, and classes from junit and this lib namespace
- return scanner.getClassPathEntries(new ChainedClassNameFilter(
- new ExcludePackageNameFilter("junit"),
+
+ ChainedClassNameFilter filter = new ChainedClassNameFilter();
+ // exclude inner classes
+ filter.add(new ExternalClassNameFilter());
+ if (mTestPackageName != null) {
+ // request to run only a specific java package, honor that
+ filter.add(new InclusivePackageNameFilter(mTestPackageName));
+ } else {
+ // scan all packages, but exclude junit packages
+ filter.addAll(new ExcludePackageNameFilter("junit"),
new ExcludePackageNameFilter("org.junit"),
new ExcludePackageNameFilter("org.hamcrest"),
- new ExcludePackageNameFilter("org.mockito"),
- new ExcludePackageNameFilter("com.android.dx"),
- new ExcludePackageNameFilter("com.google.dexmaker"),
- new ExternalClassNameFilter(),
- new ExcludePackageNameFilter("com.android.test.runner.junit3")));
+ new ExcludePackageNameFilter("com.android.test.runner.junit3"));
+ }
+
+ try {
+ return scanner.getClassPathEntries(filter);
} catch (IOException e) {
mWriter.println("failed to scan classes");
Log.e(LOG_TAG, "Failed to scan classes", e);