1 /*
2  * Copyright 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 @file:Suppress("UnstableApiUsage")
18 
19 package androidx.build.lint
20 
21 import org.junit.Test
22 import org.junit.runner.RunWith
23 import org.junit.runners.JUnit4
24 
25 @RunWith(JUnit4::class)
26 class BanVisibleForTestingParamsTest :
27     AbstractLintDetectorTest(
28         useDetector = BanVisibleForTestingParams(),
29         useIssues = listOf(BanVisibleForTestingParams.ISSUE),
30         stubs = arrayOf(Stubs.VisibleForTesting),
31     ) {
32 
33     @Test
Detection of @VisibleForTesting usage in Java sourcesnull34     fun `Detection of @VisibleForTesting usage in Java sources`() {
35         val input =
36             arrayOf(
37                 javaSample("androidx.VisibleForTestingUsageJava"),
38             )
39 
40         val expected =
41             """
42 src/androidx/VisibleForTestingUsageJava.java:23: Error: Found non-default otherwise value for @VisibleForTesting [UsesNonDefaultVisibleForTesting]
43     @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
44     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
45 src/androidx/VisibleForTestingUsageJava.java:26: Error: Found non-default otherwise value for @VisibleForTesting [UsesNonDefaultVisibleForTesting]
46     @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
47     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
48 src/androidx/VisibleForTestingUsageJava.java:29: Error: Found non-default otherwise value for @VisibleForTesting [UsesNonDefaultVisibleForTesting]
49     @VisibleForTesting(otherwise = VisibleForTesting.PROTECTED)
50     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
51 src/androidx/VisibleForTestingUsageJava.java:32: Error: Found non-default otherwise value for @VisibleForTesting [UsesNonDefaultVisibleForTesting]
52     @VisibleForTesting(otherwise = VisibleForTesting.NONE)
53     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
54 4 errors, 0 warnings
55         """
56                 .trimIndent()
57 
58         val fixDiffs =
59             """
60 Fix for src/androidx/VisibleForTestingUsageJava.java line 23: Remove non-default `otherwise` value:
61 @@ -23 +23
62 -     @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
63 +     @VisibleForTesting
64 Fix for src/androidx/VisibleForTestingUsageJava.java line 26: Remove @VisibleForTesting annotation:
65 @@ -26 +26
66 -     @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
67 Fix for src/androidx/VisibleForTestingUsageJava.java line 29: Remove @VisibleForTesting annotation:
68 @@ -29 +29
69 -     @VisibleForTesting(otherwise = VisibleForTesting.PROTECTED)
70 Fix for src/androidx/VisibleForTestingUsageJava.java line 32: Remove non-default `otherwise` value:
71 @@ -32 +32
72 -     @VisibleForTesting(otherwise = VisibleForTesting.NONE)
73 +     @VisibleForTesting
74         """
75                 .trimIndent()
76 
77         check(*input).expect(expected).expectFixDiffs(fixDiffs)
78     }
79 
80     @Test
Detection of @VisibleForTesting usage in Kotlin sourcesnull81     fun `Detection of @VisibleForTesting usage in Kotlin sources`() {
82         val input =
83             arrayOf(
84                 ktSample("androidx.VisibleForTestingUsageKotlin"),
85             )
86 
87         val expected =
88             """
89 src/androidx/VisibleForTestingUsageKotlin.kt:26: Error: Found non-default otherwise value for @VisibleForTesting [UsesNonDefaultVisibleForTesting]
90     @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) fun testMethodPrivate() {}
91     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
92 src/androidx/VisibleForTestingUsageKotlin.kt:28: Error: Found non-default otherwise value for @VisibleForTesting [UsesNonDefaultVisibleForTesting]
93     @VisibleForTesting(otherwise = VisibleForTesting.Companion.PRIVATE)
94     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
95 src/androidx/VisibleForTestingUsageKotlin.kt:31: Error: Found non-default otherwise value for @VisibleForTesting [UsesNonDefaultVisibleForTesting]
96     @VisibleForTesting(VisibleForTesting.PRIVATE) fun testMethodValuePrivate() {}
97     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
98 src/androidx/VisibleForTestingUsageKotlin.kt:33: Error: Found non-default otherwise value for @VisibleForTesting [UsesNonDefaultVisibleForTesting]
99     @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
100     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
101 src/androidx/VisibleForTestingUsageKotlin.kt:36: Error: Found non-default otherwise value for @VisibleForTesting [UsesNonDefaultVisibleForTesting]
102     @VisibleForTesting(otherwise = VisibleForTesting.PROTECTED) fun testMethodProtected() {}
103     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
104 src/androidx/VisibleForTestingUsageKotlin.kt:38: Error: Found non-default otherwise value for @VisibleForTesting [UsesNonDefaultVisibleForTesting]
105     @VisibleForTesting(otherwise = VisibleForTesting.NONE) fun testMethodPackageNone() {}
106     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
107 src/androidx/VisibleForTestingUsageKotlin.kt:42: Error: Found non-default otherwise value for @VisibleForTesting [UsesNonDefaultVisibleForTesting]
108     @get:VisibleForTesting(NONE) val testPropertyGet = "test"
109     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
110 7 errors, 0 warnings
111         """
112                 .trimIndent()
113 
114         val fixDiffs =
115             """
116 Fix for src/androidx/VisibleForTestingUsageKotlin.kt line 26: Remove non-default `otherwise` value:
117 @@ -26 +26
118 -     @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) fun testMethodPrivate() {}
119 +     @VisibleForTesting fun testMethodPrivate() {}
120 Fix for src/androidx/VisibleForTestingUsageKotlin.kt line 28: Remove non-default `otherwise` value:
121 @@ -28 +28
122 -     @VisibleForTesting(otherwise = VisibleForTesting.Companion.PRIVATE)
123 +     @VisibleForTesting
124 Fix for src/androidx/VisibleForTestingUsageKotlin.kt line 31: Remove non-default `otherwise` value:
125 @@ -31 +31
126 -     @VisibleForTesting(VisibleForTesting.PRIVATE) fun testMethodValuePrivate() {}
127 +     @VisibleForTesting fun testMethodValuePrivate() {}
128 Fix for src/androidx/VisibleForTestingUsageKotlin.kt line 33: Remove @VisibleForTesting annotation:
129 @@ -33 +33
130 -     @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
131 Fix for src/androidx/VisibleForTestingUsageKotlin.kt line 36: Remove @VisibleForTesting annotation:
132 @@ -36 +36
133 -     @VisibleForTesting(otherwise = VisibleForTesting.PROTECTED) fun testMethodProtected() {}
134 +      fun testMethodProtected() {}
135 Fix for src/androidx/VisibleForTestingUsageKotlin.kt line 38: Remove non-default `otherwise` value:
136 @@ -38 +38
137 -     @VisibleForTesting(otherwise = VisibleForTesting.NONE) fun testMethodPackageNone() {}
138 +     @VisibleForTesting fun testMethodPackageNone() {}
139 Fix for src/androidx/VisibleForTestingUsageKotlin.kt line 42: Remove non-default `otherwise` value:
140 @@ -42 +42
141 -     @get:VisibleForTesting(NONE) val testPropertyGet = "test"
142 +     @get:VisibleForTesting val testPropertyGet = "test"
143         """
144                 .trimIndent()
145 
146         check(*input).expect(expected).expectFixDiffs(fixDiffs)
147     }
148 }
149