1 /*
2  * Copyright (C) 2023 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.android.adservices.shared.testing.annotations;
17 
18 import static java.lang.annotation.ElementType.METHOD;
19 import static java.lang.annotation.ElementType.TYPE;
20 import static java.lang.annotation.RetentionPolicy.RUNTIME;
21 
22 import com.android.adservices.shared.testing.AndroidSdk.Range;
23 
24 import java.lang.annotation.Retention;
25 import java.lang.annotation.Target;
26 
27 /**
28  * Used by {@link AbstractSdkLevelSupportedRule SdkLevelSupportedRule} to only run a test if the
29  * Android SDK level of the device is in the given {@link Range}.
30  *
31  * <p>The range can be open. For example, a test annotated with {@code RequiresSdkRange(atLeast=12)}
32  * would be the equivalent at {@code RequiresSdkRangeAtLeastS}, while a test annotated with just
33  * {@code RequiresSdkRange} would run on any SDK version.
34  */
35 @Retention(RUNTIME)
36 @Target({METHOD, TYPE})
37 public @interface RequiresSdkRange {
38 
39     /**
40      * Minimum device SDK to run the test (i.e., test will be skipped if device's SDK is LESS THAN
41      * that).
42      */
atLeast()43     int atLeast() default Range.NO_MIN;
44 
45     /**
46      * Maximum device SDK to run the test (i.e., test will be skipped if device's SDK is MORE THAN
47      * that).
48      */
atMost()49     int atMost() default Range.NO_MAX;
50 
51     /** Reason why the test should be skipped. */
reason()52     String reason() default "";
53 }
54