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
abstract class AbstractBytecodeListingTest : CodegenTestCase() {
fun doTest(filename: String) {
override fun doTest(filename: String) {
createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.ALL)
loadFileByFullPath(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 EXPECTED_OCCURRENCES_PATTERN = Pattern.compile("^\\s*//\\s*(\\d+)\\s*(.*)$");
@Override
public void doTest(@NotNull String filename) throws Exception {
createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.ALL);
loadFileByFullPath(filename);
@@ -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());
@@ -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<Void, File> {
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<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;
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);
@@ -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<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);
blackBoxFileByFullPath(filename);
blackBoxFileByFullPath(file.getPath());
}
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.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<String>()
}
}
}