blob: c3ca8422619aff769be0d5d31d6d5131d2e2d3bf [file] [log] [blame]
/*
* Copyright 2018 The Bazel Authors. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.bazel.kotlin.builder.tasks.jvm;
import io.bazel.kotlin.builder.Dep;
import io.bazel.kotlin.builder.KotlinBuilderJvmTestTask;
import io.bazel.kotlin.builder.KotlinBuilderResource;
import io.bazel.kotlin.model.AnnotationProcessor;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import java.util.function.Consumer;
import java.util.stream.Collectors;
import static io.bazel.kotlin.builder.KotlinBuilderJvmTestTask.KOTLIN_ANNOTATIONS;
import static io.bazel.kotlin.builder.KotlinBuilderJvmTestTask.KOTLIN_STDLIB;
@RunWith(JUnit4.class)
public class KotlinBuilderJvmKaptTest {
private static final Dep AUTO_VALUE =
Dep.importJar(
"autovalue",
"external/io_bazel_rules_kotlin_com_google_auto_value_auto_value"
+ "/jar/io_bazel_rules_kotlin_com_google_auto_value_auto_value.jar");
private static final AnnotationProcessor AUTO_VALUE_ANNOTATION_PROCESSOR =
AnnotationProcessor.newBuilder()
.setLabel("autovalue")
.setProcessorClass("com.google.auto.value.processor.AutoValueProcessor")
.addAllClasspath(
Dep.classpathOf(AUTO_VALUE, KOTLIN_ANNOTATIONS).collect(Collectors.toList()))
.build();
@Rule public KotlinBuilderJvmTestTask ctx = new KotlinBuilderJvmTestTask();
private static final Consumer<KotlinBuilderJvmTestTask> ADD_AUTO_VALUE_PLUGIN =
(c) -> {
c.addAnnotationProcessors(AUTO_VALUE_ANNOTATION_PROCESSOR);
c.addDirectDependencies(AUTO_VALUE, KOTLIN_STDLIB);
};
@Test
public void testKaptKt() {
ctx.runCompileTask(
ADD_AUTO_VALUE_PLUGIN,
c ->
c.addSource(
"TestKtValue.kt",
"package autovalue\n"
+ "\n"
+ "import com.google.auto.value.AutoValue\n"
+ "\n"
+ "@AutoValue\n"
+ "abstract class TestKtValue {\n"
+ " abstract fun name(): String\n"
+ " fun builder(): Builder = AutoValue_TestKtValue.Builder()\n"
+ "\n"
+ " @AutoValue.Builder\n"
+ " abstract class Builder {\n"
+ " abstract fun setName(name: String): Builder\n"
+ " abstract fun build(): TestKtValue\n"
+ " }\n"
+ "}"));
ctx.assertFilesExist(
KotlinBuilderResource.DirectoryType.CLASSES,
"autovalue/TestKtValue.class",
"autovalue/AutoValue_TestKtValue.class");
ctx.assertFilesExist(
KotlinBuilderResource.DirectoryType.SOURCE_GEN, "autovalue/AutoValue_TestKtValue.java");
}
@Test
public void testMixedKaptBiReferences() {
ctx.runCompileTask(
ADD_AUTO_VALUE_PLUGIN,
ctx -> {
ctx.addSource(
"TestKtValue.kt",
"package autovalue.a\n"
+ "\n"
+ "import com.google.auto.value.AutoValue\n"
+ "import autovalue.b.TestAutoValue\n"
+ "\n"
+ "@AutoValue\n"
+ "abstract class TestKtValue {\n"
+ " abstract fun name(): String\n"
+ " fun builder(): Builder = AutoValue_TestKtValue.Builder()\n"
+ "\n"
+ " @AutoValue.Builder\n"
+ " abstract class Builder {\n"
+ " abstract fun setName(name: String): Builder\n"
+ " abstract fun build(): TestKtValue\n"
+ " }\n"
+ "}");
ctx.addSource(
"TestAutoValue.java",
"package autovalue.b;\n"
+ "\n"
+ "import com.google.auto.value.AutoValue;\n"
+ "import autovalue.a.TestKtValue;\n"
+ "\n"
+ "@AutoValue\n"
+ "public abstract class TestAutoValue {\n"
+ " abstract String name();\n"
+ "\n"
+ "\n"
+ " static Builder builder() {\n"
+ " return new AutoValue_TestAutoValue.Builder();\n"
+ " }\n"
+ "\n"
+ " @AutoValue.Builder\n"
+ " abstract static class Builder {\n"
+ " abstract Builder setName(String name);\n"
+ " abstract TestAutoValue build();\n"
+ " }\n"
+ "\n"
+ "}");
});
ctx.assertFilesExist(
KotlinBuilderResource.DirectoryType.SOURCE_GEN,
"autovalue/a/AutoValue_TestKtValue.java",
"autovalue/b/AutoValue_TestAutoValue.java");
ctx.assertFilesExist(
KotlinBuilderResource.DirectoryType.CLASSES,
"autovalue/a/AutoValue_TestKtValue.class",
"autovalue/b/AutoValue_TestAutoValue.class");
}
}