Support directives in write flag tests

This commit is contained in:
Mikhael Bogdanov
2016-06-10 16:28:06 +03:00
parent 5d5734841b
commit 0169f10bf3
2 changed files with 16 additions and 29 deletions
@@ -18,19 +18,17 @@ package org.jetbrains.kotlin.codegen.flags;
import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.io.FileUtil;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.backend.common.output.OutputFile; import org.jetbrains.kotlin.backend.common.output.OutputFile;
import org.jetbrains.kotlin.backend.common.output.OutputFileCollection; import org.jetbrains.kotlin.codegen.CodegenTestCase;
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
import org.jetbrains.kotlin.codegen.GenerationUtils;
import org.jetbrains.kotlin.psi.KtFile;
import org.jetbrains.kotlin.test.ConfigurationKind; import org.jetbrains.kotlin.test.ConfigurationKind;
import org.jetbrains.kotlin.test.KotlinTestUtils; import org.jetbrains.kotlin.test.TestJdkKind;
import org.jetbrains.kotlin.test.testFramework.KtUsefulTestCase;
import org.jetbrains.org.objectweb.asm.*; import org.jetbrains.org.objectweb.asm.*;
import java.io.File; import java.io.File;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import static org.jetbrains.kotlin.test.InTextDirectivesUtils.findListWithPrefixes; import static org.jetbrains.kotlin.test.InTextDirectivesUtils.findListWithPrefixes;
@@ -53,35 +51,20 @@ import static org.jetbrains.kotlin.test.InTextDirectivesUtils.findStringWithPref
* TESTED_OBJECTS: Test, prop$delegate * TESTED_OBJECTS: Test, prop$delegate
* FLAGS: ACC_STATIC, ACC_FINAL, ACC_PRIVATE * FLAGS: ACC_STATIC, ACC_FINAL, ACC_PRIVATE
*/ */
public abstract class AbstractWriteFlagsTest extends KtUsefulTestCase { public abstract class AbstractWriteFlagsTest extends CodegenTestCase {
private KotlinCoreEnvironment environment;
@Override @Override
public void setUp() throws Exception { protected void doMultiFileTest(
super.setUp(); @NotNull File wholeFile, @NotNull List<TestFile> files, @Nullable File javaFilesDir
environment = KotlinTestUtils.createEnvironmentWithMockJdkAndIdeaAnnotations(myTestRootDisposable, ConfigurationKind.JDK_ONLY); ) throws Exception {
} compile(files, null, ConfigurationKind.JDK_ONLY, TestJdkKind.MOCK_JDK, Collections.<String>emptyList());
@Override String fileText = FileUtil.loadFile(wholeFile, true);
protected void tearDown() throws Exception {
environment = null;
super.tearDown();
}
protected void doTest(String path) throws Exception {
File ktFile = new File(path);
assertTrue("Cannot find a file " + ktFile.getAbsolutePath(), ktFile.exists());
String fileText = FileUtil.loadFile(ktFile, true);
KtFile psiFile = KotlinTestUtils.createFile(ktFile.getName(), fileText, environment.getProject());
OutputFileCollection outputFiles = GenerationUtils.compileFile(psiFile, environment);
List<TestedObject> testedObjects = parseExpectedTestedObject(fileText); List<TestedObject> testedObjects = parseExpectedTestedObject(fileText);
for (TestedObject testedObject : testedObjects) { for (TestedObject testedObject : testedObjects) {
String className = null; String className = null;
for (OutputFile outputFile : outputFiles.asList()) { for (OutputFile outputFile : classFileFactory.asList()) {
String filePath = outputFile.getRelativePath(); String filePath = outputFile.getRelativePath();
if (testedObject.isFullContainingClassName && filePath.equals(testedObject.containingClass + ".class") || if (testedObject.isFullContainingClassName && filePath.equals(testedObject.containingClass + ".class") ||
!testedObject.isFullContainingClassName && filePath.startsWith(testedObject.containingClass)) { !testedObject.isFullContainingClassName && filePath.startsWith(testedObject.containingClass)) {
@@ -91,7 +74,7 @@ public abstract class AbstractWriteFlagsTest extends KtUsefulTestCase {
assertNotNull("Couldn't find a class file with name " + testedObject.containingClass, className); assertNotNull("Couldn't find a class file with name " + testedObject.containingClass, className);
OutputFile outputFile = outputFiles.get(className); OutputFile outputFile = classFileFactory.get(className);
assertNotNull(outputFile); assertNotNull(outputFile);
ClassReader cr = new ClassReader(outputFile.asByteArray()); ClassReader cr = new ClassReader(outputFile.asByteArray());
@@ -380,6 +380,10 @@ fun main(args: Array<String>) {
testClass<AbstractJava8WriteSignatureTest>() { testClass<AbstractJava8WriteSignatureTest>() {
model("codegen/java8/writeSignature") model("codegen/java8/writeSignature")
} }
testClass<AbstractWriteFlagsTest>() {
model("codegen/java8/writeFlags")
}
} }
testGroup("idea/tests", "idea/testData") { testGroup("idea/tests", "idea/testData") {