1 /*
2  * Copyright (C) 2021 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.bedstead.enterprise.annotations
17 
18 import com.android.bedstead.harrier.annotations.AnnotationPriorityRunPrecedence
19 import com.android.bedstead.harrier.annotations.meta.RequiresBedsteadJUnit4
20 import com.google.auto.value.AutoAnnotation
21 import kotlin.reflect.KClass
22 
23 /**
24  * Mark a test as testing the states where a policy is not allowed to be applied.
25  *
26  *
27  * An example is running with a device owner for a policy only applicable to profile owners.
28  *
29  *
30  * This will generate parameterized runs for all matching states.
31  */
32 @Target(AnnotationTarget.FUNCTION)
33 @Retention(
34     AnnotationRetention.RUNTIME)
35 @RequiresBedsteadJUnit4
36 annotation class CannotSetPolicyTest(
37     /**
38      * The policy being tested.
39      *
40      *
41      * If multiple policies are specified, then they will be merged so that all valid states for
42      * all specified policies are considered as valid.
43      *
44      *
45      * This is used to calculate which states are required to be tested.
46      */
47     val policy: Array<KClass<*>>,
48     /**
49      * If true, then this will run in states where the app is a device admin but is not one which is
50      * allowed to make the call.
51      */
52     val includeDeviceAdminStates: Boolean = true,
53     /**
54      * If true, then this will run in states where the app is not a device admin.
55      */
56     val includeNonDeviceAdminStates: Boolean = true,
57     /**
58      * Priority sets the order that annotations will be resolved.
59      *
60      *
61      * Annotations with a lower priority will be resolved before annotations with a higher
62      * priority.
63      *
64      *
65      * If there is an order requirement between annotations, ensure that the priority of the
66      * annotation which must be resolved first is lower than the one which must be resolved later.
67      *
68      *
69      * Priority can be set to a [AnnotationPriorityRunPrecedence] constant, or to any [int].
70      */
71     val priority: Int = AnnotationPriorityRunPrecedence.PRECEDENCE_NOT_IMPORTANT)
72 
73 @AutoAnnotation
cannotSetPolicyTestnull74 fun cannotSetPolicyTest(
75     policy: Array<Class<*>>,
76     includeDeviceAdminStates: Boolean = true,
77     includeNonDeviceAdminStates: Boolean = true
78 ): CannotSetPolicyTest {
79     return AutoAnnotation_CannotSetPolicyTestKt_cannotSetPolicyTest(policy,
80         includeDeviceAdminStates,
81         includeNonDeviceAdminStates)
82 }