Kapt: Add tests for the command-line 'kapt' tool

This commit is contained in:
Yan Zhulanow
2018-10-31 12:08:28 +09:00
parent 6e5eb0fdd4
commit 69ec958aab
36 changed files with 852 additions and 1 deletions
@@ -0,0 +1,5 @@
# before
-Kapt-verbose=blah
# after
ERROR: Invalid option format, should be -Kapt-verbose=true/false
@@ -0,0 +1,7 @@
# before
-Kapt-option=a:b
# after
-P
plugin:org.jetbrains.kotlin.kapt3:aptMode=compile
-Kapt-option=a:b
@@ -0,0 +1,9 @@
# before
-Kapt-sources
blah
# after
-P
plugin:org.jetbrains.kotlin.kapt3:aptMode=compile
-Kapt-sources
blah
@@ -0,0 +1,7 @@
# before
-help-kotlinc
# after
-P
plugin:org.jetbrains.kotlin.kapt3:aptMode=compile
-help-kotlinc
@@ -0,0 +1,42 @@
# before
-Kapt-sources=output/sources
-Kapt-classes=output/classes
-Kapt-stubs=output/stubs
-Kapt-classpath=out/production/apt
-Kapt-processors=test.Foo
-Kapt-option:foo=true
-Kapt-option:bar=abc
-Kapt-javac-option:-Xmaxerrs=500
-Kapt-verbose=true
-Kapt-use-light-analysis=false
-Kapt-correct-error-types=true
-Kapt-map-diagnostic-locations=false
-Kapt-mode=apt
# after
-P
plugin:org.jetbrains.kotlin.kapt3:sources=output/sources
-P
plugin:org.jetbrains.kotlin.kapt3:classes=output/classes
-P
plugin:org.jetbrains.kotlin.kapt3:stubs=output/stubs
-P
plugin:org.jetbrains.kotlin.kapt3:apclasspath=out/production/apt
-P
plugin:org.jetbrains.kotlin.kapt3:processors=test.Foo
-P
plugin:org.jetbrains.kotlin.kapt3:apOption=foo=true
-P
plugin:org.jetbrains.kotlin.kapt3:apOption=bar=abc
-P
plugin:org.jetbrains.kotlin.kapt3:javacOption=-Xmaxerrs=500
-P
plugin:org.jetbrains.kotlin.kapt3:verbose=true
-P
plugin:org.jetbrains.kotlin.kapt3:useLightAnalysis=false
-P
plugin:org.jetbrains.kotlin.kapt3:correctErrorTypes=true
-P
plugin:org.jetbrains.kotlin.kapt3:mapDiagnosticLocations=false
-P
plugin:org.jetbrains.kotlin.kapt3:aptMode=apt
@@ -0,0 +1,3 @@
-cp %KOTLIN_STDLIB%
-d output/ap
ap/Processor.kt
@@ -0,0 +1,30 @@
# copy
../simple/ap
ap
# copy
../simple/Test.kt
Test.kt
# mkdir
output/ap
output/stubs
output/classes
output/javaClasses
output/sources
# kotlinc
@apKotlincArgs.txt
# kapt
@kaptArgs.txt
# javac
@javacArgs.txt
# java
-cp output/classes:output/javaClasses:output/ap:%KOTLIN_STDLIB%
test.TestKt
# after
Generated class: generated.Test
@@ -0,0 +1,6 @@
-cp output/ap
-d output/javaClasses
-proc:none
output/sources/generated/Function.java
output/sources/generated/Property.java
output/sources/generated/Test.java
@@ -0,0 +1,8 @@
-Kapt-stubs=output/stubs
-Kapt-classes=output/classes
-Kapt-sources=output/sources
-Kapt-classpath=output/ap
-Kapt-processors=apt.SampleApt
-d output/classes
-cp output/ap:%KOTLIN_STDLIB%
Test.kt
@@ -0,0 +1,50 @@
# copy
../correctErrorTypesOn/ap
ap
# copy
../correctErrorTypesOn/Test.kt
Test.kt
# mkdir
output/ap
output/stubs
output/classes
output/javaClasses
output/sources
# kotlinc
-cp %KOTLIN_STDLIB%
-d output/ap
ap/Processor.kt
# kapt
-Kapt-stubs=output/stubs
-Kapt-classes=output/classes
-Kapt-sources=output/sources
-Kapt-classpath=output/ap
-Kapt-processors=apt.SampleApt
-d output/classes
-cp output/ap:%KOTLIN_STDLIB%
Test.kt
# javac
-cp output/ap
-d output/javaClasses
-proc:none
output/sources/generated/Property.java
# java
-cp output/classes:output/javaClasses:output/ap:%KOTLIN_STDLIB%
test.Test
# after
Return code: 1
error: error: NonExistentClass type occurred
Test.kt:4:8: error: unresolved reference: generated
import generated.Property
^
Test.kt:8:28: error: unresolved reference: Property
lateinit var property: Property
^
@@ -0,0 +1,14 @@
package test
import apt.Anno
import generated.Property
object Test {
@field:Anno
lateinit var property: Property
@JvmStatic
fun main(args: Array<String>) {
print(javaClass.getDeclaredField("property").type.toGenericString())
}
}
@@ -0,0 +1,31 @@
package apt
import javax.annotation.processing.*
import javax.lang.model.SourceVersion
import javax.lang.model.element.*
import javax.lang.model.type.DeclaredType
import javax.tools.Diagnostic.Kind.*
annotation class Anno
class SampleApt : AbstractProcessor() {
override fun process(annotations: Set<TypeElement>, roundEnv: RoundEnvironment): Boolean {
for (element in roundEnv.getElementsAnnotatedWith(Anno::class.java).filterIsInstance<VariableElement>()) {
val type = element.asType() as? DeclaredType ?: continue
if (type.toString() == "error.NonExistentClass") {
processingEnv.messager.printMessage(ERROR, "NonExistentClass type occurred")
}
val generatedSimpleName = element.simpleName.toString().capitalize()
processingEnv.filer.createSourceFile("generated.$generatedSimpleName").openWriter().use {
it.write("package generated;\npublic class $generatedSimpleName {}")
}
}
return true
}
override fun getSupportedOptions() = emptySet<String>()
override fun getSupportedSourceVersion() = SourceVersion.RELEASE_8
override fun getSupportedAnnotationTypes() = setOf("apt.Anno")
}
@@ -0,0 +1,35 @@
# mkdir
output/ap
output/stubs
output/classes
output/javaClasses
output/sources
# kotlinc
-cp %KOTLIN_STDLIB%
-d output/ap
ap/Processor.kt
# kapt
-Kapt-stubs=output/stubs
-Kapt-classes=output/classes
-Kapt-sources=output/sources
-Kapt-classpath=output/ap
-Kapt-processors=apt.SampleApt
-Kapt-correct-error-types=true
-d output/classes
-cp output/ap:%KOTLIN_STDLIB%
Test.kt
# javac
-cp output/ap
-d output/javaClasses
-proc:none
output/sources/generated/Property.java
# java
-cp output/classes:output/javaClasses:output/ap:%KOTLIN_STDLIB%
test.Test
# after
public class generated.Property
@@ -0,0 +1,61 @@
# copy
../simple/ap
ap
# copy
../simple/Test.kt
Test.kt
# mkdir
output/ap
output/stubs
output/classes
output/javaClasses
output/sources
# kotlinc
-cp %KOTLIN_STDLIB%
-d output/ap
ap/Processor.kt
# kapt
-Kapt-stubs=output/stubs
-Kapt-classes=output/classes
-Kapt-sources=output/sources
-Kapt-classpath=output/ap
-Kapt-mode=stubs
-d output/classes
-cp output/ap:%KOTLIN_STDLIB%
Test.kt
# kapt
-Kapt-stubs=output/stubs
-Kapt-classes=output/classes
-Kapt-sources=output/sources
-Kapt-classpath=output/ap
-Kapt-mode=apt
-Kapt-processors=apt.SampleApt
-d output/classes
-cp output/ap:%KOTLIN_STDLIB%
Test.kt
# kotlinc
-d output/classes
-cp output/ap:%KOTLIN_STDLIB%
output/sources
Test.kt
# javac
-cp output/ap
-d output/javaClasses
-proc:none
output/sources/generated/Function.java
output/sources/generated/Property.java
output/sources/generated/Test.java
# java
-cp output/classes:output/javaClasses:output/ap:%KOTLIN_STDLIB%
test.TestKt
# after
Generated class: generated.Test
@@ -0,0 +1,19 @@
package test
import apt.Anno
import generated.Test as TestGenerated
@Anno
class Test {
@field:Anno
val property: String = ""
@Anno
fun function() {
}
}
fun main() {
println("Generated class: " + TestGenerated::class.java.name)
}
@@ -0,0 +1,25 @@
package apt
import javax.annotation.processing.*
import javax.lang.model.SourceVersion
import javax.lang.model.element.TypeElement
import javax.tools.Diagnostic.Kind.*
annotation class Anno
class SampleApt : AbstractProcessor() {
override fun process(annotations: Set<TypeElement>, roundEnv: RoundEnvironment): Boolean {
for (element in roundEnv.getElementsAnnotatedWith(Anno::class.java)) {
val generatedSimpleName = element.simpleName.toString().capitalize()
processingEnv.filer.createSourceFile("generated.$generatedSimpleName").openWriter().use {
it.write("package generated;\npublic class $generatedSimpleName {}")
}
}
return true
}
override fun getSupportedOptions() = emptySet<String>()
override fun getSupportedSourceVersion() = SourceVersion.RELEASE_8
override fun getSupportedAnnotationTypes() = setOf("apt.Anno")
}
@@ -0,0 +1,39 @@
# mkdir
output/ap
output/stubs
output/classes
output/javaClasses
output/sources
# kotlinc
-cp %KOTLIN_STDLIB%
-d output/ap
ap/Processor.kt
# copy
ap/META-INF/services/javax.annotation.processing.Processor
output/ap/META-INF/services/javax.annotation.processing.Processor
# kapt
-Kapt-stubs=output/stubs
-Kapt-classes=output/classes
-Kapt-sources=output/sources
-Kapt-classpath=output/ap
-d output/classes
-cp output/ap:%KOTLIN_STDLIB%
Test.kt
# javac
-cp output/ap
-d output/javaClasses
-proc:none
output/sources/generated/Function.java
output/sources/generated/Property.java
output/sources/generated/Test.java
# java
-cp output/classes:output/javaClasses:output/ap:%KOTLIN_STDLIB%
test.TestKt
# after
Generated class: generated.Test
@@ -0,0 +1,44 @@
# copy
../simple/ap
ap
# copy
../simple/Test.kt
Test.kt
# mkdir
output/ap
output/stubs
output/classes
output/javaClasses
output/sources
# kotlinc
-cp %KOTLIN_STDLIB%
-d output/ap
ap/Processor.kt
# kapt
-Kapt-stubs=output/stubs
-Kapt-classes=output/classes
-Kapt-sources=output/sources
-Kapt-classpath=output/ap
-Kapt-processors=apt.SampleApt
-d output/classes
-cp output/ap:%KOTLIN_STDLIB%
Test.kt
# javac
-cp output/ap
-d output/javaClasses
-proc:none
output/sources/generated/Function.java
output/sources/generated/Property.java
output/sources/generated/Test.java
# java
-cp output/classes:output/javaClasses:output/ap:%KOTLIN_STDLIB%
test.TestKt
# after
Generated class: generated.Test