diff options
author | Kevin Jin <kjin@google.com> | 2013-07-11 13:58:38 -0700 |
---|---|---|
committer | Kevin Jin <kjin@google.com> | 2013-07-11 15:00:24 -0700 |
commit | df778b5b087c324e1078c6ba692d0aff4f940ac9 (patch) | |
tree | 22455abb2c1557d10ea232e9dd0d0acb91d167a8 | |
parent | ffd0f7a9a89c3c19bc5846b23237d96ed8accbfd (diff) | |
download | droiddriver-df778b5b087c324e1078c6ba692d0aff4f940ac9.tar.gz |
add @UseUiAutomation as an explicit version of @MinSdkVersion(18)
Change-Id: Iedc9e44e7636237488136632d8c440bc72d8ff17
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 { +} |