Support directives in write flag tests
This commit is contained in:
+12
-29
@@ -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") {
|
||||||
|
|||||||
Reference in New Issue
Block a user