diff options
author | Brett Chabot <brettchabot@google.com> | 2013-07-01 16:19:08 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2013-07-01 16:19:08 +0000 |
commit | 3bfb06f3c03fd9e58f50fda72eb2c69bd153b690 (patch) | |
tree | ae9b27639f65cd83888ae9683bd672d9364d5d84 | |
parent | 17890df1f996c3f7a340ce1acec53c5eb3dce5a1 (diff) | |
parent | 442abfa0f3e4ef244665ec20082c50d5cc6d4149 (diff) | |
download | testing-3bfb06f3c03fd9e58f50fda72eb2c69bd153b690.tar.gz |
Merge "Support -e package in AndroidJUnitRunner."
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); |