1
1
package permissions.dispatcher
2
2
3
- import org.intellij.lang.annotations.Language
4
- import org.junit.Test
5
-
6
3
import com.android.tools.lint.checks.infrastructure.TestFiles.java
7
4
import com.android.tools.lint.checks.infrastructure.TestFiles.kt
8
5
import com.android.tools.lint.checks.infrastructure.TestLintTask.lint
6
+ import org.intellij.lang.annotations.Language
7
+ import org.junit.Test
9
8
import permissions.dispatcher.Utils.onNeedsPermission
10
9
import permissions.dispatcher.Utils.onRationaleAnnotation
11
10
import permissions.dispatcher.Utils.runtimePermission
12
11
13
12
class CallOnRequestPermissionsResultDetectorKtTest {
14
-
15
13
@Test
16
14
@Throws(Exception ::class )
17
15
fun callOnRequestPermissionsResultDetectorNoErrorForKotlin () {
@@ -20,7 +18,7 @@ class CallOnRequestPermissionsResultDetectorKtTest {
20
18
21
19
@RuntimePermissions
22
20
class Foo : android.app.Activity {
23
- fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
21
+ override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
24
22
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
25
23
onRequestPermissionsResult(requestCode, grantResults)
26
24
}
@@ -54,6 +52,94 @@ class CallOnRequestPermissionsResultDetectorKtTest {
54
52
.expectClean()
55
53
}
56
54
55
+ @Test
56
+ @Throws(Exception ::class )
57
+ fun callOnRequestPermissionsResultDetectorNoErrorWithNamedMethodReference () {
58
+ @Language(" kotlin" ) val foo = """
59
+ package permissions.dispatcher
60
+
61
+ @RuntimePermissions
62
+ class Foo : android.app.Activity {
63
+ override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) =
64
+ onRequestPermissionsResult(requestCode, grantResults)
65
+
66
+ @NeedsPermission("Camera")
67
+ fun showCamera() {
68
+ }
69
+
70
+ @OnShowRationale("Camera")
71
+ fun someMethod() {
72
+ }
73
+ }
74
+ """ .trimMargin()
75
+
76
+ @Language(" kotlin" ) val generatedClass = """
77
+ package permissions.dispatcher
78
+
79
+ fun Foo.onRequestPermissionsResult(requestCode: Int, grantResults: IntArray) {
80
+ }
81
+ """ .trimMargin()
82
+
83
+ lint()
84
+ .files(
85
+ java(runtimePermission),
86
+ java(onNeedsPermission),
87
+ java(onRationaleAnnotation),
88
+ kt(generatedClass),
89
+ kt(foo))
90
+ .issues(CallOnRequestPermissionsResultDetector .ISSUE )
91
+ .run ()
92
+ .expectClean()
93
+ }
94
+
95
+ @Test
96
+ @Throws(Exception ::class )
97
+ fun callOnRequestPermissionsResultDetectorErrorWithWrongMethod () {
98
+ @Language(" kotlin" ) val foo = """
99
+ package permissions.dispatcher
100
+
101
+ @RuntimePermissions
102
+ class Foo : android.app.Activity {
103
+ override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) =
104
+ hoge(requestCode, grantResults)
105
+
106
+ @NeedsPermission("Camera")
107
+ fun showCamera() {
108
+ }
109
+
110
+ @OnShowRationale("Camera")
111
+ fun someMethod() {
112
+ }
113
+ }
114
+ """ .trimMargin()
115
+
116
+ @Language(" kotlin" ) val generatedClass = """
117
+ package permissions.dispatcher
118
+
119
+ fun Foo.hoge(requestCode: Int, grantResults: IntArray) {
120
+ }
121
+ """ .trimMargin()
122
+
123
+ val expectedText = """
124
+ |src/permissions/dispatcher/Foo.kt:5: Error: Generated onRequestPermissionsResult method not called [NeedOnRequestPermissionsResult]
125
+ | override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) =
126
+ | ^
127
+ |1 errors, 0 warnings
128
+ """ .trimMargin()
129
+
130
+ lint()
131
+ .files(
132
+ java(runtimePermission),
133
+ java(onNeedsPermission),
134
+ java(onRationaleAnnotation),
135
+ kt(foo))
136
+ .issues(CallOnRequestPermissionsResultDetector .ISSUE )
137
+ .run ()
138
+ .expect(expectedText)
139
+ .expectErrorCount(1 )
140
+ .expectWarningCount(0 )
141
+ }
142
+
57
143
@Test
58
144
@Throws(Exception ::class )
59
145
fun callOnRequestPermissionsResultDetector () {
0 commit comments