Skip to content

Commit d8f685b

Browse files
yigittschuchortdev
authored andcommitted
add test w/ generated code references
1 parent 5af5b77 commit d8f685b

File tree

2 files changed

+52
-1
lines changed

2 files changed

+52
-1
lines changed

ksp/src/test/kotlin/com/tschuchort/compiletesting/AbstractSymbolProcessor.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@ import org.jetbrains.kotlin.ksp.processing.Resolver
55
import org.jetbrains.kotlin.ksp.processing.SymbolProcessor
66

77
internal open class AbstractSymbolProcessor : SymbolProcessor {
8+
protected lateinit var codeGenerator: CodeGenerator
89
override fun finish() {
910
}
1011

1112
override fun init(options: Map<String, String>, kotlinVersion: KotlinVersion, codeGenerator: CodeGenerator) {
13+
this.codeGenerator = codeGenerator
1214
}
1315

1416
override fun process(resolver: Resolver) {

ksp/src/test/kotlin/com/tschuchort/compiletesting/KspTest.kt

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ package com.tschuchort.compiletesting
33
import com.nhaarman.mockitokotlin2.any
44
import com.nhaarman.mockitokotlin2.inOrder
55
import com.nhaarman.mockitokotlin2.mock
6-
import com.nhaarman.mockitokotlin2.verify
76
import com.tschuchort.compiletesting.KotlinCompilation.ExitCode
87
import org.assertj.core.api.Assertions.assertThat
98
import org.jetbrains.kotlin.ksp.processing.Resolver
109
import org.jetbrains.kotlin.ksp.processing.SymbolProcessor
10+
import org.jetbrains.kotlin.ksp.symbol.KSClassDeclaration
1111
import org.junit.Rule
1212
import org.junit.Test
1313
import org.junit.runner.RunWith
@@ -48,6 +48,55 @@ class KspTest {
4848
}
4949
}
5050

51+
@Test
52+
fun processorGeneratedCodeIsVisible() {
53+
val annotation = SourceFile.kotlin(
54+
"TestAnnotation.kt", """
55+
package foo.bar
56+
annotation class TestAnnotation
57+
""".trimIndent()
58+
)
59+
val targetClass = SourceFile.kotlin(
60+
"AppCode.kt", """
61+
package foo.bar
62+
import foo.bar.generated.AppCode_Gen
63+
@TestAnnotation
64+
class AppCode {
65+
init {
66+
// access generated code
67+
AppCode_Gen()
68+
}
69+
}
70+
""".trimIndent()
71+
)
72+
val processor = object : AbstractSymbolProcessor() {
73+
override fun process(resolver: Resolver) {
74+
val symbols = resolver.getSymbolsWithAnnotation("foo.bar.TestAnnotation")
75+
assertThat(symbols).isNotEmpty()
76+
val klass = symbols.first()
77+
check(klass is KSClassDeclaration)
78+
val qName = klass.qualifiedName ?: error("should've found qualified name")
79+
val genPackage = "${qName.getQualifier()}.generated"
80+
val genClassName = "${qName.getShortName()}_Gen"
81+
val outFile = codeGenerator.createNewFile(
82+
packageName = genPackage,
83+
fileName = genClassName
84+
)
85+
outFile.writeText(
86+
"""
87+
package $genPackage
88+
class $genClassName() {}
89+
""".trimIndent()
90+
)
91+
}
92+
}
93+
val result = KotlinCompilation().apply {
94+
sources = listOf(annotation, targetClass)
95+
symbolProcessor(processorRule.delegateTo(processor))
96+
}.compile()
97+
assertThat(result.exitCode).isEqualTo(ExitCode.OK)
98+
}
99+
51100
companion object {
52101
private val DUMMY_KOTLIN_SRC = SourceFile.kotlin(
53102
"foo.bar.Dummy.kt", """

0 commit comments

Comments
 (0)