From 4fb0453cea16d23e46372408b67230b6c0849bc6 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 23 Feb 2016 19:11:20 +0300 Subject: [PATCH] Introduce multi-file test framework to codegen tests Currently still only single-file tests are supported; this will be fixed in subsequent commits --- .../codegen/AbstractBytecodeListingTest.kt | 3 +-- .../codegen/AbstractBytecodeTextTest.java | 1 + .../codegen/AbstractScriptCodegenTest.java | 2 ++ .../kotlin/codegen/CodegenTestCase.java | 24 +++++++++++++++---- ...bstractDefaultArgumentsReflectionTest.java | 2 +- .../AbstractBlackBoxCodegenTest.java | 11 +++++---- .../AbstractAnnotationProcessorBoxTest.kt | 10 ++------ 7 files changed, 33 insertions(+), 20 deletions(-) diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/AbstractBytecodeListingTest.kt b/compiler/tests/org/jetbrains/kotlin/codegen/AbstractBytecodeListingTest.kt index c72e8ca6bc3..997feca86bc 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/AbstractBytecodeListingTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/codegen/AbstractBytecodeListingTest.kt @@ -22,8 +22,7 @@ import org.jetbrains.org.objectweb.asm.* import java.io.File abstract class AbstractBytecodeListingTest : CodegenTestCase() { - - fun doTest(filename: String) { + override fun doTest(filename: String) { createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.ALL) loadFileByFullPath(filename) val ktFile = File(filename) diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/AbstractBytecodeTextTest.java b/compiler/tests/org/jetbrains/kotlin/codegen/AbstractBytecodeTextTest.java index 62f7543ea79..360176b705e 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/AbstractBytecodeTextTest.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/AbstractBytecodeTextTest.java @@ -34,6 +34,7 @@ public abstract class AbstractBytecodeTextTest extends CodegenTestCase { private static final Pattern AT_OUTPUT_FILE_PATTERN = Pattern.compile("^\\s*//\\s*@(.*):$"); private static final Pattern EXPECTED_OCCURRENCES_PATTERN = Pattern.compile("^\\s*//\\s*(\\d+)\\s*(.*)$"); + @Override public void doTest(@NotNull String filename) throws Exception { createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.ALL); loadFileByFullPath(filename); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/AbstractScriptCodegenTest.java b/compiler/tests/org/jetbrains/kotlin/codegen/AbstractScriptCodegenTest.java index 2a6c39add68..75257a2a7a4 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/AbstractScriptCodegenTest.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/AbstractScriptCodegenTest.java @@ -32,10 +32,12 @@ public abstract class AbstractScriptCodegenTest extends CodegenTestCase { createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_ONLY); } + @Override protected void doTest(@NotNull String filename) { loadFileByFullPath(filename); try { + //noinspection ConstantConditions FqName fqName = myFiles.getPsiFile().getScript().getFqName(); Class scriptClass = generateClass(fqName.asString()); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/CodegenTestCase.java b/compiler/tests/org/jetbrains/kotlin/codegen/CodegenTestCase.java index 3aff216b0f1..03263629a13 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/CodegenTestCase.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/CodegenTestCase.java @@ -19,11 +19,11 @@ package org.jetbrains.kotlin.codegen; import com.google.common.collect.Lists; import com.intellij.openapi.util.io.FileUtil; import com.intellij.testFramework.TestDataFile; -import com.intellij.testFramework.UsefulTestCase; import com.intellij.util.SmartList; import kotlin.text.Charsets; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.backend.common.output.OutputFile; +import org.jetbrains.kotlin.checkers.KotlinMultiFileTestWithJava; import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles; import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment; import org.jetbrains.kotlin.cli.jvm.config.JvmContentRootsKt; @@ -60,10 +60,8 @@ import static org.jetbrains.kotlin.codegen.CodegenTestUtil.*; import static org.jetbrains.kotlin.test.KotlinTestUtils.compilerConfigurationForTests; import static org.jetbrains.kotlin.test.KotlinTestUtils.getAnnotationsJar; -public abstract class CodegenTestCase extends UsefulTestCase { - - public static final String DEFAULT_TEST_FILE_NAME = "a_test"; - public static final String DEFAULT_TEST_FILE_CLASS_NAME = "A_testKt"; +public abstract class CodegenTestCase extends KotlinMultiFileTestWithJava { + private static final String DEFAULT_TEST_FILE_NAME = "a_test"; protected KotlinCoreEnvironment myEnvironment; protected CodegenTestFiles myFiles; @@ -327,4 +325,20 @@ public abstract class CodegenTestCase extends UsefulTestCase { throw ExceptionUtilsKt.rethrow(e); } } + + @Override + protected Void createTestModule(@NotNull String name) { + // TODO: support multi-module codegen tests + throw new UnsupportedOperationException("Multi-module codegen tests are not yet supported"); + } + + @Override + protected File createTestFile(Void module, String fileName, String text, Map directives) { + return new File(fileName); + } + + @Override + protected void doMultiFileTest(File file, Map modules, List files) throws Exception { + throw new UnsupportedOperationException("Multi-file test cases are not supported in this test"); + } } diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/defaultConstructor/AbstractDefaultArgumentsReflectionTest.java b/compiler/tests/org/jetbrains/kotlin/codegen/defaultConstructor/AbstractDefaultArgumentsReflectionTest.java index a4fe7b1b929..fa035ec3997 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/defaultConstructor/AbstractDefaultArgumentsReflectionTest.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/defaultConstructor/AbstractDefaultArgumentsReflectionTest.java @@ -28,13 +28,13 @@ import java.util.List; import static org.jetbrains.kotlin.test.InTextDirectivesUtils.findListWithPrefixes; public abstract class AbstractDefaultArgumentsReflectionTest extends CodegenTestCase { - @Override public void setUp() throws Exception { super.setUp(); createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_ONLY); } + @Override protected void doTest(String path) throws IOException { loadFileByFullPath(path); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/generated/AbstractBlackBoxCodegenTest.java b/compiler/tests/org/jetbrains/kotlin/codegen/generated/AbstractBlackBoxCodegenTest.java index 8eaf0df9f04..f60965eef0e 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/generated/AbstractBlackBoxCodegenTest.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/generated/AbstractBlackBoxCodegenTest.java @@ -19,11 +19,12 @@ package org.jetbrains.kotlin.codegen.generated; import com.intellij.openapi.util.io.FileUtil; import com.intellij.util.ArrayUtil; import com.intellij.util.Processor; -import kotlin.text.Charsets; import kotlin.io.FilesKt; +import kotlin.text.Charsets; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.cli.common.output.outputUtils.OutputUtilsKt; import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles; +import org.jetbrains.kotlin.cli.jvm.compiler.JvmPackagePartProvider; import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment; import org.jetbrains.kotlin.cli.jvm.config.JvmContentRootsKt; import org.jetbrains.kotlin.codegen.CodegenTestCase; @@ -32,7 +33,6 @@ import org.jetbrains.kotlin.codegen.GenerationUtils; import org.jetbrains.kotlin.config.CompilerConfiguration; import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil; import org.jetbrains.kotlin.psi.KtFile; -import org.jetbrains.kotlin.cli.jvm.compiler.JvmPackagePartProvider; import org.jetbrains.kotlin.test.ConfigurationKind; import org.jetbrains.kotlin.test.InTextDirectivesUtils; import org.jetbrains.kotlin.test.KotlinTestUtils; @@ -44,13 +44,16 @@ import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Map; import static org.jetbrains.kotlin.codegen.CodegenTestUtil.compileJava; public abstract class AbstractBlackBoxCodegenTest extends CodegenTestCase { - public void doTest(@NotNull String filename) { + @Override + protected void doMultiFileTest(File file, Map modules, List files) throws Exception { + assert files.size() == 1 : "Multi-file test cases are not supported yet in this test"; createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_ONLY); - blackBoxFileByFullPath(filename); + blackBoxFileByFullPath(file.getPath()); } public void doTestAgainstJava(@NotNull String filename) { diff --git a/plugins/annotation-collector/test/org/jetbrains/kotlin/annotation/AbstractAnnotationProcessorBoxTest.kt b/plugins/annotation-collector/test/org/jetbrains/kotlin/annotation/AbstractAnnotationProcessorBoxTest.kt index d2b38f820af..05eba6850b4 100644 --- a/plugins/annotation-collector/test/org/jetbrains/kotlin/annotation/AbstractAnnotationProcessorBoxTest.kt +++ b/plugins/annotation-collector/test/org/jetbrains/kotlin/annotation/AbstractAnnotationProcessorBoxTest.kt @@ -21,20 +21,15 @@ import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.codegen.CodegenTestCase import org.jetbrains.kotlin.codegen.CodegenTestUtil import org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension -import org.jetbrains.kotlin.codegen.generated.AbstractBlackBoxCodegenTest -import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.diagnostics.DiagnosticSink import org.jetbrains.kotlin.test.ConfigurationKind import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.TestJdkKind import java.io.File import java.io.StringWriter -import java.io.Writer -import org.junit.Assert.* abstract class AbstractAnnotationProcessorBoxTest : CodegenTestCase() { - - fun doTest(path: String) { + override fun doTest(path: String) { val testName = getTestName(true) val fileName = path + testName + ".kt" val supportInheritedAnnotations = testName.startsWith("inherited") @@ -76,5 +71,4 @@ abstract class AbstractAnnotationProcessorBoxTest : CodegenTestCase() { override val annotationFilterList = listOf() } - -} \ No newline at end of file +}