Introduce multi-file test framework to codegen tests
Currently still only single-file tests are supported; this will be fixed in subsequent commits
This commit is contained in:
@@ -22,8 +22,7 @@ import org.jetbrains.org.objectweb.asm.*
|
|||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
abstract class AbstractBytecodeListingTest : CodegenTestCase() {
|
abstract class AbstractBytecodeListingTest : CodegenTestCase() {
|
||||||
|
override fun doTest(filename: String) {
|
||||||
fun doTest(filename: String) {
|
|
||||||
createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.ALL)
|
createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.ALL)
|
||||||
loadFileByFullPath(filename)
|
loadFileByFullPath(filename)
|
||||||
val ktFile = File(filename)
|
val ktFile = File(filename)
|
||||||
|
|||||||
@@ -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 AT_OUTPUT_FILE_PATTERN = Pattern.compile("^\\s*//\\s*@(.*):$");
|
||||||
private static final Pattern EXPECTED_OCCURRENCES_PATTERN = Pattern.compile("^\\s*//\\s*(\\d+)\\s*(.*)$");
|
private static final Pattern EXPECTED_OCCURRENCES_PATTERN = Pattern.compile("^\\s*//\\s*(\\d+)\\s*(.*)$");
|
||||||
|
|
||||||
|
@Override
|
||||||
public void doTest(@NotNull String filename) throws Exception {
|
public void doTest(@NotNull String filename) throws Exception {
|
||||||
createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.ALL);
|
createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.ALL);
|
||||||
loadFileByFullPath(filename);
|
loadFileByFullPath(filename);
|
||||||
|
|||||||
@@ -32,10 +32,12 @@ public abstract class AbstractScriptCodegenTest extends CodegenTestCase {
|
|||||||
createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_ONLY);
|
createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_ONLY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
protected void doTest(@NotNull String filename) {
|
protected void doTest(@NotNull String filename) {
|
||||||
loadFileByFullPath(filename);
|
loadFileByFullPath(filename);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
//noinspection ConstantConditions
|
||||||
FqName fqName = myFiles.getPsiFile().getScript().getFqName();
|
FqName fqName = myFiles.getPsiFile().getScript().getFqName();
|
||||||
Class<?> scriptClass = generateClass(fqName.asString());
|
Class<?> scriptClass = generateClass(fqName.asString());
|
||||||
|
|
||||||
|
|||||||
@@ -19,11 +19,11 @@ package org.jetbrains.kotlin.codegen;
|
|||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.intellij.openapi.util.io.FileUtil;
|
import com.intellij.openapi.util.io.FileUtil;
|
||||||
import com.intellij.testFramework.TestDataFile;
|
import com.intellij.testFramework.TestDataFile;
|
||||||
import com.intellij.testFramework.UsefulTestCase;
|
|
||||||
import com.intellij.util.SmartList;
|
import com.intellij.util.SmartList;
|
||||||
import kotlin.text.Charsets;
|
import kotlin.text.Charsets;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.kotlin.backend.common.output.OutputFile;
|
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.EnvironmentConfigFiles;
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
|
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
|
||||||
import org.jetbrains.kotlin.cli.jvm.config.JvmContentRootsKt;
|
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.compilerConfigurationForTests;
|
||||||
import static org.jetbrains.kotlin.test.KotlinTestUtils.getAnnotationsJar;
|
import static org.jetbrains.kotlin.test.KotlinTestUtils.getAnnotationsJar;
|
||||||
|
|
||||||
public abstract class CodegenTestCase extends UsefulTestCase {
|
public abstract class CodegenTestCase extends KotlinMultiFileTestWithJava<Void, File> {
|
||||||
|
private static final String DEFAULT_TEST_FILE_NAME = "a_test";
|
||||||
public static final String DEFAULT_TEST_FILE_NAME = "a_test";
|
|
||||||
public static final String DEFAULT_TEST_FILE_CLASS_NAME = "A_testKt";
|
|
||||||
|
|
||||||
protected KotlinCoreEnvironment myEnvironment;
|
protected KotlinCoreEnvironment myEnvironment;
|
||||||
protected CodegenTestFiles myFiles;
|
protected CodegenTestFiles myFiles;
|
||||||
@@ -327,4 +325,20 @@ public abstract class CodegenTestCase extends UsefulTestCase {
|
|||||||
throw ExceptionUtilsKt.rethrow(e);
|
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<String, String> directives) {
|
||||||
|
return new File(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void doMultiFileTest(File file, Map<String, ModuleAndDependencies> modules, List<File> files) throws Exception {
|
||||||
|
throw new UnsupportedOperationException("Multi-file test cases are not supported in this test");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -28,13 +28,13 @@ import java.util.List;
|
|||||||
import static org.jetbrains.kotlin.test.InTextDirectivesUtils.findListWithPrefixes;
|
import static org.jetbrains.kotlin.test.InTextDirectivesUtils.findListWithPrefixes;
|
||||||
|
|
||||||
public abstract class AbstractDefaultArgumentsReflectionTest extends CodegenTestCase {
|
public abstract class AbstractDefaultArgumentsReflectionTest extends CodegenTestCase {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
super.setUp();
|
super.setUp();
|
||||||
createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_ONLY);
|
createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_ONLY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
protected void doTest(String path) throws IOException {
|
protected void doTest(String path) throws IOException {
|
||||||
loadFileByFullPath(path);
|
loadFileByFullPath(path);
|
||||||
|
|
||||||
|
|||||||
+7
-4
@@ -19,11 +19,12 @@ package org.jetbrains.kotlin.codegen.generated;
|
|||||||
import com.intellij.openapi.util.io.FileUtil;
|
import com.intellij.openapi.util.io.FileUtil;
|
||||||
import com.intellij.util.ArrayUtil;
|
import com.intellij.util.ArrayUtil;
|
||||||
import com.intellij.util.Processor;
|
import com.intellij.util.Processor;
|
||||||
import kotlin.text.Charsets;
|
|
||||||
import kotlin.io.FilesKt;
|
import kotlin.io.FilesKt;
|
||||||
|
import kotlin.text.Charsets;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.kotlin.cli.common.output.outputUtils.OutputUtilsKt;
|
import org.jetbrains.kotlin.cli.common.output.outputUtils.OutputUtilsKt;
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles;
|
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.compiler.KotlinCoreEnvironment;
|
||||||
import org.jetbrains.kotlin.cli.jvm.config.JvmContentRootsKt;
|
import org.jetbrains.kotlin.cli.jvm.config.JvmContentRootsKt;
|
||||||
import org.jetbrains.kotlin.codegen.CodegenTestCase;
|
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.config.CompilerConfiguration;
|
||||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil;
|
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil;
|
||||||
import org.jetbrains.kotlin.psi.KtFile;
|
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.ConfigurationKind;
|
||||||
import org.jetbrains.kotlin.test.InTextDirectivesUtils;
|
import org.jetbrains.kotlin.test.InTextDirectivesUtils;
|
||||||
import org.jetbrains.kotlin.test.KotlinTestUtils;
|
import org.jetbrains.kotlin.test.KotlinTestUtils;
|
||||||
@@ -44,13 +44,16 @@ import java.lang.reflect.Method;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import static org.jetbrains.kotlin.codegen.CodegenTestUtil.compileJava;
|
import static org.jetbrains.kotlin.codegen.CodegenTestUtil.compileJava;
|
||||||
|
|
||||||
public abstract class AbstractBlackBoxCodegenTest extends CodegenTestCase {
|
public abstract class AbstractBlackBoxCodegenTest extends CodegenTestCase {
|
||||||
public void doTest(@NotNull String filename) {
|
@Override
|
||||||
|
protected void doMultiFileTest(File file, Map<String, ModuleAndDependencies> modules, List<File> files) throws Exception {
|
||||||
|
assert files.size() == 1 : "Multi-file test cases are not supported yet in this test";
|
||||||
createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_ONLY);
|
createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_ONLY);
|
||||||
blackBoxFileByFullPath(filename);
|
blackBoxFileByFullPath(file.getPath());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void doTestAgainstJava(@NotNull String filename) {
|
public void doTestAgainstJava(@NotNull String filename) {
|
||||||
|
|||||||
+2
-8
@@ -21,20 +21,15 @@ import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
|||||||
import org.jetbrains.kotlin.codegen.CodegenTestCase
|
import org.jetbrains.kotlin.codegen.CodegenTestCase
|
||||||
import org.jetbrains.kotlin.codegen.CodegenTestUtil
|
import org.jetbrains.kotlin.codegen.CodegenTestUtil
|
||||||
import org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension
|
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.diagnostics.DiagnosticSink
|
||||||
import org.jetbrains.kotlin.test.ConfigurationKind
|
import org.jetbrains.kotlin.test.ConfigurationKind
|
||||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||||
import org.jetbrains.kotlin.test.TestJdkKind
|
import org.jetbrains.kotlin.test.TestJdkKind
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.StringWriter
|
import java.io.StringWriter
|
||||||
import java.io.Writer
|
|
||||||
import org.junit.Assert.*
|
|
||||||
|
|
||||||
abstract class AbstractAnnotationProcessorBoxTest : CodegenTestCase() {
|
abstract class AbstractAnnotationProcessorBoxTest : CodegenTestCase() {
|
||||||
|
override fun doTest(path: String) {
|
||||||
fun doTest(path: String) {
|
|
||||||
val testName = getTestName(true)
|
val testName = getTestName(true)
|
||||||
val fileName = path + testName + ".kt"
|
val fileName = path + testName + ".kt"
|
||||||
val supportInheritedAnnotations = testName.startsWith("inherited")
|
val supportInheritedAnnotations = testName.startsWith("inherited")
|
||||||
@@ -76,5 +71,4 @@ abstract class AbstractAnnotationProcessorBoxTest : CodegenTestCase() {
|
|||||||
|
|
||||||
override val annotationFilterList = listOf<String>()
|
override val annotationFilterList = listOf<String>()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user