xref: /aosp_15_r20/tools/metalava/metalava/src/test/java/com/android/tools/metalava/NormalizeOutputAnnotationTest.kt (revision 115816f9299ab6ddd6b9673b81f34e707f6bacab)
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