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 17 package com.android.tools.metalava 18 19 import com.android.tools.metalava.model.text.FileFormat 20 import com.android.tools.metalava.testing.KnownSourceFiles 21 import com.android.tools.metalava.testing.java 22 import org.junit.Test 23 24 class NormalizeOutputAnnotationTest : DriverTest() { 25 @Test Normalize nested permission annotations (java)null26 fun `Normalize nested permission annotations (java)`() { 27 check( 28 sourceFiles = 29 arrayOf( 30 java( 31 """ 32 package test.pkg; 33 34 import android.annotation.RequiresPermission; 35 36 public final class PermissionsTest { 37 @RequiresPermission(Manifest.permission.MY_PERMISSION) 38 public void myMethod() { 39 } 40 @RequiresPermission(anyOf={Manifest.permission.MY_PERMISSION,Manifest.permission.MY_PERMISSION2}) 41 public void myMethod2() { 42 } 43 44 @RequiresPermission.Read(@RequiresPermission(Manifest.permission.MY_READ_PERMISSION)) 45 @RequiresPermission.Write(@RequiresPermission(Manifest.permission.MY_WRITE_PERMISSION)) 46 public static final String CONTENT_URI = ""; 47 } 48 """ 49 ) 50 .indented(), 51 java( 52 """ 53 package test.pkg; 54 55 public class Manifest { 56 public static final class permission { 57 public static final String MY_PERMISSION = "android.permission.MY_PERMISSION_STRING"; 58 public static final String MY_PERMISSION2 = "android.permission.MY_PERMISSION_STRING2"; 59 public static final String MY_READ_PERMISSION = "android.permission.MY_READ_PERMISSION_STRING"; 60 public static final String MY_WRITE_PERMISSION = "android.permission.MY_WRITE_PERMISSION_STRING"; 61 } 62 } 63 """ 64 ) 65 .indented(), 66 requiresPermissionSource, 67 // Hide android.annotation classes. 68 KnownSourceFiles.androidAnnotationHide, 69 ), 70 format = FileFormat.V4, 71 api = 72 """ 73 // Signature format: 4.0 74 package test.pkg { 75 public class Manifest { 76 ctor public Manifest(); 77 } 78 public static final class Manifest.permission { 79 ctor public Manifest.permission(); 80 field public static final String MY_PERMISSION = "android.permission.MY_PERMISSION_STRING"; 81 field public static final String MY_PERMISSION2 = "android.permission.MY_PERMISSION_STRING2"; 82 field public static final String MY_READ_PERMISSION = "android.permission.MY_READ_PERMISSION_STRING"; 83 field public static final String MY_WRITE_PERMISSION = "android.permission.MY_WRITE_PERMISSION_STRING"; 84 } 85 public final class PermissionsTest { 86 ctor public PermissionsTest(); 87 method @RequiresPermission(test.pkg.Manifest.permission.MY_PERMISSION) public void myMethod(); 88 method @RequiresPermission(anyOf={test.pkg.Manifest.permission.MY_PERMISSION, test.pkg.Manifest.permission.MY_PERMISSION2}) public void myMethod2(); 89 field @RequiresPermission.Read(@androidx.annotation.RequiresPermission(test.pkg.Manifest.permission.MY_READ_PERMISSION)) @RequiresPermission.Write(@androidx.annotation.RequiresPermission(test.pkg.Manifest.permission.MY_WRITE_PERMISSION)) public static final String CONTENT_URI = ""; 90 } 91 } 92 """ 93 .trimIndent(), 94 ) 95 } 96 } 97