Skip to content

Commit d18c095

Browse files
committed
Added test for Android non-KMP
1 parent bc4234b commit d18c095

File tree

49 files changed

+1883
-375
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+1883
-375
lines changed
Lines changed: 351 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,351 @@
1+
/*
2+
* Copyright 2023-2025 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.
3+
*/
4+
5+
package kotlinx.rpc
6+
7+
import kotlinx.rpc.base.GrpcBaseTest
8+
import org.gradle.testkit.runner.TaskOutcome
9+
import org.junit.jupiter.api.TestFactory
10+
import org.junit.jupiter.api.TestInstance
11+
import kotlin.io.path.Path
12+
13+
@TestInstance(TestInstance.Lifecycle.PER_METHOD)
14+
class GrpcAndroidProjectTest : GrpcBaseTest() {
15+
override val type: Type = Type.Android
16+
17+
@TestFactory
18+
fun `Minimal gRPC Configuration`() = minimalGrpcConfiguration()
19+
20+
@TestFactory
21+
fun `Minimal gRPC Configuration Library`() = minimalGrpcConfiguration()
22+
23+
@TestFactory
24+
fun `Minimal gRPC Configuration Dynamic Feature`() = minimalGrpcConfiguration()
25+
26+
private fun minimalGrpcConfiguration() = runGrpcTest {
27+
fun runForSetOnlyMain(sourceSet: SSets, vararg extraTasks: SSetsAndroid) {
28+
val result = runForSet(sourceSet)
29+
30+
result.assertTaskExecuted(
31+
sourceSet = sourceSet,
32+
protoFiles = listOf(
33+
Path("some.proto"),
34+
Path("ok", "ok.proto"),
35+
),
36+
importProtoFiles = emptyList(),
37+
generatedFiles = listOf(
38+
Path("Some.kt"),
39+
Path(RPC_INTERNAL, "Some.kt"),
40+
Path("ok", "Ok.kt"),
41+
Path("ok", RPC_INTERNAL, "Ok.kt"),
42+
),
43+
notExecuted = SSetsAndroid.Default.entries - extraTasks.toSet() - sourceSet,
44+
)
45+
}
46+
47+
fun runForSetOnlyTest(sourceSet: SSets, vararg extraTasks: SSetsAndroid) {
48+
val result = runForSet(sourceSet)
49+
50+
result.assertTaskExecuted(
51+
sourceSet = sourceSet,
52+
protoFiles = emptyList(),
53+
importProtoFiles = listOf(
54+
Path("some.proto"),
55+
Path("ok", "ok.proto"),
56+
),
57+
generatedFiles = emptyList(),
58+
notExecuted = SSetsAndroid.Default.entries - extraTasks.toSet() - sourceSet,
59+
)
60+
}
61+
62+
runForSetOnlyMain(SSetsAndroid.Default.debug)
63+
runForSetOnlyMain(SSetsAndroid.Default.release)
64+
runForSetOnlyTest(SSetsAndroid.Default.testDebug, SSetsAndroid.Default.debug)
65+
runForSetOnlyTest(SSetsAndroid.Default.testRelease, SSetsAndroid.Default.release)
66+
runForSetOnlyTest(SSetsAndroid.Default.androidTestDebug, SSetsAndroid.Default.debug)
67+
}
68+
69+
@TestFactory
70+
fun `Minimal gRPC Configuration Test`() = runGrpcTest {
71+
fun runForSetOnlyMain(sourceSet: SSets, vararg extraTasks: SSetsAndroid) {
72+
val result = runForSet(sourceSet)
73+
74+
result.assertTaskExecuted(
75+
sourceSet = sourceSet,
76+
protoFiles = listOf(
77+
Path("some.proto"),
78+
Path("ok", "ok.proto"),
79+
),
80+
importProtoFiles = emptyList(),
81+
generatedFiles = listOf(
82+
Path("Some.kt"),
83+
Path(RPC_INTERNAL, "Some.kt"),
84+
Path("ok", "Ok.kt"),
85+
Path("ok", RPC_INTERNAL, "Ok.kt"),
86+
),
87+
notExecuted = SSetsAndroid.Test.entries - extraTasks.toSet() - sourceSet,
88+
)
89+
}
90+
91+
runForSetOnlyMain(SSetsAndroid.Test.debug)
92+
93+
SSetsAndroid.Default.entries.forEach {
94+
if (it != SSetsAndroid.Default.debug) {
95+
runNonExistentTasksForSourceSet(it)
96+
}
97+
}
98+
}
99+
100+
@TestFactory
101+
fun `Test-Only Sources`() = runGrpcTest {
102+
fun runForSetOnlyMain(sourceSet: SSets, vararg extraTasks: SSetsAndroid) {
103+
val result = runForSet(sourceSet)
104+
105+
result.assertTaskExecuted(
106+
sourceSet = sourceSet,
107+
protoFiles = emptyList(),
108+
importProtoFiles = emptyList(),
109+
generatedFiles = emptyList(),
110+
notExecuted = SSetsAndroid.Default.entries - extraTasks.toSet() - sourceSet,
111+
)
112+
}
113+
114+
fun runForSetOnlyTest(sourceSet: SSets, vararg extraTasks: SSetsAndroid) {
115+
val result = runForSet(sourceSet)
116+
117+
result.assertTaskExecuted(
118+
sourceSet = sourceSet,
119+
protoFiles = listOf(
120+
Path("some.proto"),
121+
Path("ok", "ok.proto"),
122+
),
123+
importProtoFiles = emptyList(),
124+
generatedFiles = listOf(
125+
Path("Some.kt"),
126+
Path(RPC_INTERNAL, "Some.kt"),
127+
Path("ok", "Ok.kt"),
128+
Path("ok", RPC_INTERNAL, "Ok.kt"),
129+
),
130+
notExecuted = SSetsAndroid.Default.entries - extraTasks.toSet() - sourceSet,
131+
)
132+
}
133+
134+
runForSetOnlyMain(SSetsAndroid.Default.debug)
135+
runForSetOnlyMain(SSetsAndroid.Default.release)
136+
runForSetOnlyTest(SSetsAndroid.Default.testDebug, SSetsAndroid.Default.debug)
137+
runForSetOnlyTest(SSetsAndroid.Default.testRelease, SSetsAndroid.Default.release)
138+
runForSetOnlyTest(SSetsAndroid.Default.androidTestDebug, SSetsAndroid.Default.debug)
139+
}
140+
141+
@TestFactory
142+
fun `All Default Source Sets`() = runGrpcTest {
143+
runAndCheckFiles(
144+
SSetsAndroid.Default.debug,
145+
extended = listOf(SSetsAndroid.Default.main),
146+
)
147+
runAndCheckFiles(
148+
SSetsAndroid.Default.release,
149+
extended = listOf(SSetsAndroid.Default.main)
150+
)
151+
runAndCheckFiles(
152+
SSetsAndroid.Default.testDebug,
153+
SSetsAndroid.Default.debug, SSetsAndroid.Default.main,
154+
extended = listOf(
155+
SSetsAndroid.Default.test,
156+
SSetsAndroid.Default.testFixtures,
157+
SSetsAndroid.Default.testFixturesDebug,
158+
)
159+
)
160+
runAndCheckFiles(
161+
SSetsAndroid.Default.testRelease,
162+
SSetsAndroid.Default.release, SSetsAndroid.Default.main,
163+
extended = listOf(
164+
SSetsAndroid.Default.test,
165+
SSetsAndroid.Default.testFixtures,
166+
SSetsAndroid.Default.testFixturesRelease,
167+
)
168+
)
169+
runAndCheckFiles(
170+
SSetsAndroid.Default.androidTestDebug,
171+
SSetsAndroid.Default.debug, SSetsAndroid.Default.main,
172+
extended = listOf(
173+
SSetsAndroid.Default.androidTest,
174+
SSetsAndroid.Default.testFixtures,
175+
SSetsAndroid.Default.testFixturesDebug,
176+
)
177+
)
178+
}
179+
180+
@TestFactory
181+
fun `No gRPC`() = runGrpcTest {
182+
SSetsAndroid.Default.entries.forEach {
183+
runNonExistentTasksForSourceSet(it)
184+
}
185+
}
186+
187+
@TestFactory
188+
fun `Proto Tasks Are Cached Properly`() = runGrpcTest {
189+
val firstRunDebug = runForSet(SSetsAndroid.Default.debug)
190+
191+
firstRunDebug.assertOutcomes(
192+
sourceSet = SSetsAndroid.Default.debug,
193+
generate = TaskOutcome.SUCCESS,
194+
bufYaml = TaskOutcome.SUCCESS,
195+
bufGenYaml = TaskOutcome.SUCCESS,
196+
protoFiles = TaskOutcome.SUCCESS,
197+
protoFilesImports = TaskOutcome.NO_SOURCE,
198+
)
199+
200+
// didn't run
201+
firstRunDebug.assertOutcomes(SSetsAndroid.Default.release)
202+
firstRunDebug.assertOutcomes(SSetsAndroid.Default.androidTestDebug)
203+
firstRunDebug.assertOutcomes(SSetsAndroid.Default.testDebug)
204+
firstRunDebug.assertOutcomes(SSetsAndroid.Default.testRelease)
205+
206+
val secondRunDebug = runForSet(SSetsAndroid.Default.debug)
207+
208+
secondRunDebug.assertOutcomes(
209+
sourceSet = SSetsAndroid.Default.debug,
210+
generate = TaskOutcome.UP_TO_DATE,
211+
bufYaml = TaskOutcome.UP_TO_DATE,
212+
bufGenYaml = TaskOutcome.UP_TO_DATE,
213+
protoFiles = TaskOutcome.UP_TO_DATE,
214+
protoFilesImports = TaskOutcome.NO_SOURCE,
215+
)
216+
217+
cleanProtoBuildDir()
218+
219+
val thirdRunDebug = runForSet(SSetsAndroid.Default.debug)
220+
221+
thirdRunDebug.assertOutcomes(
222+
sourceSet = SSetsAndroid.Default.debug,
223+
generate = TaskOutcome.SUCCESS,
224+
bufYaml = TaskOutcome.SUCCESS,
225+
bufGenYaml = TaskOutcome.SUCCESS,
226+
protoFiles = TaskOutcome.SUCCESS,
227+
protoFilesImports = TaskOutcome.NO_SOURCE,
228+
)
229+
230+
SSetsAndroid.Default.debug.sourceDir()
231+
.resolve("debug.proto")
232+
.replace("content = 1", "content = 2")
233+
234+
val fourthRunDebug = runForSet(SSetsAndroid.Default.debug)
235+
236+
fourthRunDebug.assertOutcomes(
237+
sourceSet = SSetsAndroid.Default.debug,
238+
generate = TaskOutcome.SUCCESS,
239+
bufYaml = TaskOutcome.UP_TO_DATE,
240+
bufGenYaml = TaskOutcome.UP_TO_DATE,
241+
protoFiles = TaskOutcome.SUCCESS,
242+
protoFilesImports = TaskOutcome.NO_SOURCE,
243+
)
244+
245+
val firstRunTestDebug = runForSet(SSetsAndroid.Default.testDebug)
246+
247+
firstRunTestDebug.assertOutcomes(
248+
sourceSet = SSetsAndroid.Default.debug,
249+
generate = TaskOutcome.UP_TO_DATE,
250+
bufYaml = TaskOutcome.UP_TO_DATE,
251+
bufGenYaml = TaskOutcome.UP_TO_DATE,
252+
protoFiles = TaskOutcome.UP_TO_DATE,
253+
protoFilesImports = TaskOutcome.NO_SOURCE,
254+
)
255+
256+
firstRunTestDebug.assertOutcomes(
257+
sourceSet = SSetsAndroid.Default.testDebug,
258+
generate = TaskOutcome.SUCCESS,
259+
bufYaml = TaskOutcome.SUCCESS,
260+
bufGenYaml = TaskOutcome.SUCCESS,
261+
protoFiles = TaskOutcome.SUCCESS,
262+
protoFilesImports = TaskOutcome.SUCCESS,
263+
)
264+
265+
// didn't run
266+
firstRunDebug.assertOutcomes(SSetsAndroid.Default.release)
267+
firstRunDebug.assertOutcomes(SSetsAndroid.Default.androidTestDebug)
268+
firstRunDebug.assertOutcomes(SSetsAndroid.Default.testRelease)
269+
270+
val firstRunAndroidTestDebug = runForSet(SSetsAndroid.Default.androidTestDebug)
271+
272+
firstRunAndroidTestDebug.assertOutcomes(
273+
sourceSet = SSetsAndroid.Default.debug,
274+
generate = TaskOutcome.UP_TO_DATE,
275+
bufYaml = TaskOutcome.UP_TO_DATE,
276+
bufGenYaml = TaskOutcome.UP_TO_DATE,
277+
protoFiles = TaskOutcome.UP_TO_DATE,
278+
protoFilesImports = TaskOutcome.NO_SOURCE,
279+
)
280+
281+
firstRunAndroidTestDebug.assertOutcomes(
282+
sourceSet = SSetsAndroid.Default.androidTestDebug,
283+
generate = TaskOutcome.SUCCESS,
284+
bufYaml = TaskOutcome.SUCCESS,
285+
bufGenYaml = TaskOutcome.SUCCESS,
286+
protoFiles = TaskOutcome.SUCCESS,
287+
protoFilesImports = TaskOutcome.SUCCESS,
288+
)
289+
290+
// didn't run
291+
firstRunDebug.assertOutcomes(SSetsAndroid.Default.release)
292+
firstRunDebug.assertOutcomes(SSetsAndroid.Default.testDebug)
293+
firstRunDebug.assertOutcomes(SSetsAndroid.Default.testRelease)
294+
295+
SSetsAndroid.Default.testDebug.sourceDir()
296+
.resolve("testDebug.proto")
297+
.replace("content = 1", "content = 2")
298+
299+
val fifthRunDebug = runForSet(SSetsAndroid.Default.debug)
300+
301+
fifthRunDebug.assertOutcomes(
302+
sourceSet = SSetsAndroid.Default.debug,
303+
generate = TaskOutcome.UP_TO_DATE,
304+
bufYaml = TaskOutcome.UP_TO_DATE,
305+
bufGenYaml = TaskOutcome.UP_TO_DATE,
306+
protoFiles = TaskOutcome.UP_TO_DATE,
307+
protoFilesImports = TaskOutcome.NO_SOURCE,
308+
)
309+
310+
// didn't run
311+
firstRunDebug.assertOutcomes(SSetsAndroid.Default.release)
312+
firstRunDebug.assertOutcomes(SSetsAndroid.Default.androidTestDebug)
313+
firstRunDebug.assertOutcomes(SSetsAndroid.Default.testDebug)
314+
firstRunDebug.assertOutcomes(SSetsAndroid.Default.testRelease)
315+
316+
val secondRunTestDebug = runForSet(SSetsAndroid.Default.testDebug)
317+
318+
secondRunTestDebug.assertOutcomes(
319+
sourceSet = SSetsAndroid.Default.debug,
320+
generate = TaskOutcome.UP_TO_DATE,
321+
bufYaml = TaskOutcome.UP_TO_DATE,
322+
bufGenYaml = TaskOutcome.UP_TO_DATE,
323+
protoFiles = TaskOutcome.UP_TO_DATE,
324+
protoFilesImports = TaskOutcome.NO_SOURCE,
325+
)
326+
327+
secondRunTestDebug.assertOutcomes(
328+
sourceSet = SSetsAndroid.Default.testDebug,
329+
generate = TaskOutcome.SUCCESS,
330+
bufYaml = TaskOutcome.UP_TO_DATE,
331+
bufGenYaml = TaskOutcome.UP_TO_DATE,
332+
protoFiles = TaskOutcome.SUCCESS,
333+
protoFilesImports = TaskOutcome.UP_TO_DATE,
334+
)
335+
336+
// didn't run
337+
firstRunDebug.assertOutcomes(SSetsAndroid.Default.release)
338+
firstRunDebug.assertOutcomes(SSetsAndroid.Default.androidTestDebug)
339+
firstRunDebug.assertOutcomes(SSetsAndroid.Default.testRelease)
340+
}
341+
342+
@TestFactory
343+
fun `Buf Tasks Default`() = runGrpcTest {
344+
runGradle("test_tasks", "--no-configuration-cache")
345+
}
346+
347+
@TestFactory
348+
fun `Buf Tasks Extended`() = runGrpcTest {
349+
runGradle("test_tasks", "--no-configuration-cache")
350+
}
351+
}

gradle-plugin/src/test/kotlin/kotlinx/rpc/GrpcJvmProjectTest.kt

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import kotlin.test.assertEquals
1313

1414
@TestInstance(TestInstance.Lifecycle.PER_METHOD)
1515
class GrpcJvmProjectTest : GrpcBaseTest() {
16-
override val isKmp: Boolean = false
16+
override val type: Type = Type.Jvm
1717

1818
@TestFactory
1919
fun `Minimal gRPC Configuration`() = runGrpcTest {
@@ -32,15 +32,9 @@ class GrpcJvmProjectTest : GrpcBaseTest() {
3232

3333
@TestFactory
3434
fun `No gRPC`() = runGrpcTest {
35-
runNonExistentTask(bufGenerateCommonMain)
36-
runNonExistentTask(bufGenerateCommonTest)
37-
runNonExistentTask(processCommonMainProtoFiles)
38-
runNonExistentTask(processCommonTestProtoFiles)
39-
runNonExistentTask(processCommonTestProtoFilesImports)
40-
runNonExistentTask(generateBufYamlCommonMain)
41-
runNonExistentTask(generateBufYamlCommonTest)
42-
runNonExistentTask(generateBufGenYamlCommonMain)
43-
runNonExistentTask(generateBufGenYamlCommonTest)
35+
SSetsJvm.entries.forEach {
36+
runNonExistentTasksForSourceSet(it)
37+
}
4438
}
4539

4640
@TestFactory

0 commit comments

Comments
 (0)