19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.test.suitebuilder; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.InstrumentationTestCase; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.Smoke; 21fedb4b745693afba9627f8971346d5151101fb88Paul Duffinimport android.test.suitebuilder.annotation.Suppress; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.internal.util.Predicate; 23fedb4b745693afba9627f8971346d5151101fb88Paul Duffinimport java.lang.annotation.Annotation; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} Not needed for 1.0 SDK. 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class TestPredicates { 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 30fedb4b745693afba9627f8971346d5151101fb88Paul Duffin static final Predicate<TestMethod> REJECT_INSTRUMENTATION = 31fedb4b745693afba9627f8971346d5151101fb88Paul Duffin not(new AssignableFrom(InstrumentationTestCase.class)); 32fedb4b745693afba9627f8971346d5151101fb88Paul Duffin 33fedb4b745693afba9627f8971346d5151101fb88Paul Duffin static final Predicate<TestMethod> SELECT_SMOKE = hasAnnotation(Smoke.class); 34fedb4b745693afba9627f8971346d5151101fb88Paul Duffin 35fedb4b745693afba9627f8971346d5151101fb88Paul Duffin static final Predicate<TestMethod> REJECT_SUPPRESSED = not(hasAnnotation(Suppress.class)); 36fedb4b745693afba9627f8971346d5151101fb88Paul Duffin 37fedb4b745693afba9627f8971346d5151101fb88Paul Duffin /** 38fedb4b745693afba9627f8971346d5151101fb88Paul Duffin * Return a predicate that checks to see if a {@link TestMethod} has an instance of the supplied 39fedb4b745693afba9627f8971346d5151101fb88Paul Duffin * annotation class, either on the method or on the containing class. 40fedb4b745693afba9627f8971346d5151101fb88Paul Duffin */ 41fedb4b745693afba9627f8971346d5151101fb88Paul Duffin public static Predicate<TestMethod> hasAnnotation(Class<? extends Annotation> annotationClass) { 42fedb4b745693afba9627f8971346d5151101fb88Paul Duffin return new HasAnnotation(annotationClass); 43fedb4b745693afba9627f8971346d5151101fb88Paul Duffin } 44fedb4b745693afba9627f8971346d5151101fb88Paul Duffin 45fedb4b745693afba9627f8971346d5151101fb88Paul Duffin private static class HasAnnotation implements Predicate<TestMethod> { 46fedb4b745693afba9627f8971346d5151101fb88Paul Duffin 47fedb4b745693afba9627f8971346d5151101fb88Paul Duffin private final Class<? extends Annotation> annotationClass; 48fedb4b745693afba9627f8971346d5151101fb88Paul Duffin 49fedb4b745693afba9627f8971346d5151101fb88Paul Duffin private HasAnnotation(Class<? extends Annotation> annotationClass) { 50fedb4b745693afba9627f8971346d5151101fb88Paul Duffin this.annotationClass = annotationClass; 51fedb4b745693afba9627f8971346d5151101fb88Paul Duffin } 52fedb4b745693afba9627f8971346d5151101fb88Paul Duffin 53fedb4b745693afba9627f8971346d5151101fb88Paul Duffin @Override 54fedb4b745693afba9627f8971346d5151101fb88Paul Duffin public boolean apply(TestMethod testMethod) { 55fedb4b745693afba9627f8971346d5151101fb88Paul Duffin return testMethod.getAnnotation(annotationClass) != null || 56fedb4b745693afba9627f8971346d5151101fb88Paul Duffin testMethod.getEnclosingClass().getAnnotation(annotationClass) != null; 57fedb4b745693afba9627f8971346d5151101fb88Paul Duffin } 58fedb4b745693afba9627f8971346d5151101fb88Paul Duffin } 59fedb4b745693afba9627f8971346d5151101fb88Paul Duffin 60fedb4b745693afba9627f8971346d5151101fb88Paul Duffin /** 61fedb4b745693afba9627f8971346d5151101fb88Paul Duffin * Returns a Predicate that evaluates to true iff the given Predicate 62fedb4b745693afba9627f8971346d5151101fb88Paul Duffin * evaluates to false. 63fedb4b745693afba9627f8971346d5151101fb88Paul Duffin */ 64fedb4b745693afba9627f8971346d5151101fb88Paul Duffin public static <T> Predicate<T> not(Predicate<? super T> predicate) { 65fedb4b745693afba9627f8971346d5151101fb88Paul Duffin return new NotPredicate<T>(predicate); 66fedb4b745693afba9627f8971346d5151101fb88Paul Duffin } 67fedb4b745693afba9627f8971346d5151101fb88Paul Duffin 68fedb4b745693afba9627f8971346d5151101fb88Paul Duffin private static class NotPredicate<T> implements Predicate<T> { 69fedb4b745693afba9627f8971346d5151101fb88Paul Duffin private final Predicate<? super T> predicate; 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 71fedb4b745693afba9627f8971346d5151101fb88Paul Duffin private NotPredicate(Predicate<? super T> predicate) { 72fedb4b745693afba9627f8971346d5151101fb88Paul Duffin this.predicate = predicate; 73fedb4b745693afba9627f8971346d5151101fb88Paul Duffin } 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 75fedb4b745693afba9627f8971346d5151101fb88Paul Duffin public boolean apply(T t) { 76fedb4b745693afba9627f8971346d5151101fb88Paul Duffin return !predicate.apply(t); 77fedb4b745693afba9627f8971346d5151101fb88Paul Duffin } 78fedb4b745693afba9627f8971346d5151101fb88Paul Duffin } 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 80