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 }