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 
17 package android.permission.cts
18 
19 import android.os.Build
20 import androidx.test.filters.SdkSuppress
21 import androidx.test.platform.app.InstrumentationRegistry
22 import com.google.common.truth.Truth.assertThat
23 import java.util.concurrent.CompletableFuture
24 import java.util.concurrent.TimeUnit
25 import org.junit.Test
26 
27 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.S, codeName = "S")
28 class PlatformPermissionGroupMappingTest {
29     private val instrumentation = InstrumentationRegistry.getInstrumentation()
30     private val context = instrumentation.context
31     private val packageManager = context.packageManager
32 
33     @Test
platformPermissionHasPermissionGroupnull34     fun platformPermissionHasPermissionGroup() {
35         val future = CompletableFuture<String>()
36         packageManager.getGroupOfPlatformPermission(
37             android.Manifest.permission.READ_CALENDAR,
38             context.mainExecutor
39         ) {
40             future.complete(it)
41         }
42         val permissionGroupName = future.get(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)
43         assertThat(permissionGroupName).isEqualTo(android.Manifest.permission_group.CALENDAR)
44     }
45 
46     @Test
platformPermissionGroupHasPermissionnull47     fun platformPermissionGroupHasPermission() {
48         val future = CompletableFuture<List<String>>()
49         packageManager.getPlatformPermissionsForGroup(
50             android.Manifest.permission_group.CALENDAR,
51             context.mainExecutor
52         ) {
53             future.complete(it)
54         }
55         val permissionNames = future.get(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)
56         assertThat(permissionNames).contains(android.Manifest.permission.READ_CALENDAR)
57     }
58 
59     companion object {
60         private const val TIMEOUT_MILLIS = 15 * 1000L
61     }
62 }
63