aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Jin <kjin@google.com>2013-07-11 13:58:38 -0700
committerKevin Jin <kjin@google.com>2013-07-11 15:00:24 -0700
commitdf778b5b087c324e1078c6ba692d0aff4f940ac9 (patch)
tree22455abb2c1557d10ea232e9dd0d0acb91d167a8
parentffd0f7a9a89c3c19bc5846b23237d96ed8accbfd (diff)
downloaddroiddriver-df778b5b087c324e1078c6ba692d0aff4f940ac9.tar.gz
add @UseUiAutomation as an explicit version of @MinSdkVersion(18)
Change-Id: Iedc9e44e7636237488136632d8c440bc72d8ff17
-rw-r--r--samples/testapp/tests/src/com/google/android/apps/common/testing/ui/testapp/sendactivity/UseUiAutomation.java4
-rw-r--r--src/com/google/android/droiddriver/runner/MinSdkVersion.java10
-rw-r--r--src/com/google/android/droiddriver/runner/TestRunner.java32
-rw-r--r--src/com/google/android/droiddriver/runner/UseUiAutomation.java41
4 files changed, 72 insertions, 15 deletions
diff --git a/samples/testapp/tests/src/com/google/android/apps/common/testing/ui/testapp/sendactivity/UseUiAutomation.java b/samples/testapp/tests/src/com/google/android/apps/common/testing/ui/testapp/sendactivity/UseUiAutomation.java
index 7110fa4..9849510 100644
--- a/samples/testapp/tests/src/com/google/android/apps/common/testing/ui/testapp/sendactivity/UseUiAutomation.java
+++ b/samples/testapp/tests/src/com/google/android/apps/common/testing/ui/testapp/sendactivity/UseUiAutomation.java
@@ -4,11 +4,9 @@ import com.google.android.apps.common.testing.ui.testapp.AbstractSendActivityTes
import com.google.android.droiddriver.DroidDriver;
import com.google.android.droiddriver.DroidDriverBuilder;
import com.google.android.droiddriver.DroidDriverBuilder.Implementation;
-import com.google.android.droiddriver.runner.MinSdkVersion;
// Optional annotation to show filtering tests by build version.
-// SDK Version 18 corresponds to JB-mr2 (Android 4.3).
-@MinSdkVersion(18)
+@com.google.android.droiddriver.runner.UseUiAutomation
public class UseUiAutomation extends AbstractSendActivityTest {
@Override
protected DroidDriver getDriver() {
diff --git a/src/com/google/android/droiddriver/runner/MinSdkVersion.java b/src/com/google/android/droiddriver/runner/MinSdkVersion.java
index c673aad..79efe9e 100644
--- a/src/com/google/android/droiddriver/runner/MinSdkVersion.java
+++ b/src/com/google/android/droiddriver/runner/MinSdkVersion.java
@@ -19,14 +19,20 @@ package com.google.android.droiddriver.runner;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.TYPE;
+import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
- * This optional annotation indicates to {@link TestRunner} that it should
- * filter out tests that require a version higher than the current device.
+ * This annotation indicates that its target needs a minimum SDK version
+ * specified as its value.
+ * <p>
+ * As any annotations, it is useful only if it is processed by tools.
+ * {@link TestRunner} filters out tests with this annotation if the current
+ * device has a lower SDK version.
*/
+@Inherited
@Target({TYPE, METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MinSdkVersion {
diff --git a/src/com/google/android/droiddriver/runner/TestRunner.java b/src/com/google/android/droiddriver/runner/TestRunner.java
index 3f34cb0..1588f8a 100644
--- a/src/com/google/android/droiddriver/runner/TestRunner.java
+++ b/src/com/google/android/droiddriver/runner/TestRunner.java
@@ -34,6 +34,7 @@ import junit.framework.AssertionFailedError;
import junit.framework.Test;
import junit.framework.TestListener;
+import java.lang.annotation.Annotation;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
@@ -102,18 +103,29 @@ public class TestRunner extends InstrumentationTestRunner {
requirements.add(new Predicate<TestMethod>() {
@Override
public boolean apply(TestMethod arg0) {
- MinSdkVersion annotation = arg0.getAnnotation(MinSdkVersion.class);
- if (annotation == null) {
- annotation = arg0.getEnclosingClass().getAnnotation(MinSdkVersion.class);
+ MinSdkVersion minSdkVersion = getAnnotation(arg0, MinSdkVersion.class);
+ if (minSdkVersion != null && minSdkVersion.value() > Build.VERSION.SDK_INT) {
+ Logs.logfmt(Log.INFO, "filtered %s#%s: MinSdkVersion=%d", arg0.getEnclosingClassname(),
+ arg0.getName(), minSdkVersion.value());
+ return false;
+ }
+
+ UseUiAutomation useUiAutomation = getAnnotation(arg0, UseUiAutomation.class);
+ if (useUiAutomation != null && Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2) {
+ Logs.logfmt(Log.INFO,
+ "filtered %s#%s: Has @UseUiAutomation, but ro.build.version.sdk=%d",
+ arg0.getEnclosingClassname(), arg0.getName(), Build.VERSION.SDK_INT);
+ return false;
}
- boolean result = annotation == null || annotation.value() <= Build.VERSION.SDK_INT;
- if (!result) {
- String msg =
- String.format("filtered %s#%s: MinSdkVersion=%d", arg0.getEnclosingClassname(),
- arg0.getName(), annotation.value());
- Logs.log(Log.INFO, msg);
+ return true;
+ }
+
+ private <T extends Annotation> T getAnnotation(TestMethod testMethod, Class<T> clazz) {
+ T annotation = testMethod.getAnnotation(clazz);
+ if (annotation == null) {
+ annotation = testMethod.getEnclosingClass().getAnnotation(clazz);
}
- return result;
+ return annotation;
}
});
return requirements;
diff --git a/src/com/google/android/droiddriver/runner/UseUiAutomation.java b/src/com/google/android/droiddriver/runner/UseUiAutomation.java
new file mode 100644
index 0000000..36da45a
--- /dev/null
+++ b/src/com/google/android/droiddriver/runner/UseUiAutomation.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2013 DroidDriver committers
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.android.droiddriver.runner;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * This annotation indicates that its target needs
+ * {@link android.app.UiAutomation}. It is effectively equivalent to
+ * {@code @MinSdkVersion(Build.VERSION_CODES.JELLY_BEAN_MR2)}, just more
+ * explicit.
+ * <p>
+ * As any annotations, it is useful only if it is processed by tools.
+ * {@link TestRunner} filters out tests with this annotation if the current
+ * device has SDK version below 18 (JELLY_BEAN_MR2).
+ */
+@Inherited
+@Target({TYPE, METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface UseUiAutomation {
+}