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:
Alexander Udalov
2016-02-23 19:11:20 +03:00
parent adea547d8a
commit 4fb0453cea
7 changed files with 33 additions and 20 deletions
@@ -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");
}
} }
@@ -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);
@@ -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) {
@@ -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>()
} }
}
}