Effects: support cfg tests with stdlib
- Add method "doTestWithStdLib" which launches test with stdlib - Change GenerateTests.kt to generate cfg tests with stdlib from folders 'cfgWithStdLib' and 'cfgVariablesWithStdLib' ========== Introduction of Effect System: 14/18
This commit is contained in:
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.cfg;
|
|||||||
import com.google.common.collect.LinkedHashMultimap;
|
import com.google.common.collect.LinkedHashMultimap;
|
||||||
import com.google.common.collect.SetMultimap;
|
import com.google.common.collect.SetMultimap;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
|
import com.intellij.openapi.util.io.FileUtil;
|
||||||
import com.intellij.openapi.util.text.StringUtil;
|
import com.intellij.openapi.util.text.StringUtil;
|
||||||
import kotlin.jvm.functions.Function3;
|
import kotlin.jvm.functions.Function3;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
@@ -31,12 +32,19 @@ import org.jetbrains.kotlin.cfg.pseudocode.PseudocodeUtil;
|
|||||||
import org.jetbrains.kotlin.cfg.pseudocode.instructions.Instruction;
|
import org.jetbrains.kotlin.cfg.pseudocode.instructions.Instruction;
|
||||||
import org.jetbrains.kotlin.cfg.pseudocode.instructions.InstructionImpl;
|
import org.jetbrains.kotlin.cfg.pseudocode.instructions.InstructionImpl;
|
||||||
import org.jetbrains.kotlin.cfg.pseudocode.instructions.special.LocalFunctionDeclarationInstruction;
|
import org.jetbrains.kotlin.cfg.pseudocode.instructions.special.LocalFunctionDeclarationInstruction;
|
||||||
|
import org.jetbrains.kotlin.checkers.BaseDiagnosticsTest;
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
|
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
|
||||||
|
import org.jetbrains.kotlin.codegen.CodegenTestCase;
|
||||||
|
import org.jetbrains.kotlin.config.ApiVersion;
|
||||||
|
import org.jetbrains.kotlin.config.CommonConfigurationKeysKt;
|
||||||
|
import org.jetbrains.kotlin.config.LanguageVersion;
|
||||||
|
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl;
|
||||||
import org.jetbrains.kotlin.psi.*;
|
import org.jetbrains.kotlin.psi.*;
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext;
|
import org.jetbrains.kotlin.resolve.BindingContext;
|
||||||
import org.jetbrains.kotlin.test.ConfigurationKind;
|
import org.jetbrains.kotlin.test.ConfigurationKind;
|
||||||
|
import org.jetbrains.kotlin.test.InTextDirectivesUtils;
|
||||||
import org.jetbrains.kotlin.test.KotlinTestUtils;
|
import org.jetbrains.kotlin.test.KotlinTestUtils;
|
||||||
import org.jetbrains.kotlin.test.KotlinTestWithEnvironment;
|
import org.jetbrains.kotlin.test.KotlinTestWithEnvironmentManagement;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -44,18 +52,33 @@ import java.util.Collection;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public abstract class AbstractPseudocodeTest extends KotlinTestWithEnvironment {
|
public abstract class AbstractPseudocodeTest extends KotlinTestWithEnvironmentManagement {
|
||||||
@Override
|
protected void doTestWithStdLib(String fileName) throws Exception {
|
||||||
protected KotlinCoreEnvironment createEnvironment() {
|
doTestWithEnvironment(fileName, createEnvironmentWithMockJdk(ConfigurationKind.NO_KOTLIN_REFLECT));
|
||||||
return createEnvironmentWithMockJdk(ConfigurationKind.JDK_ONLY);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void doTest(String fileName) throws Exception {
|
protected void doTest(String fileName) throws Exception {
|
||||||
|
doTestWithEnvironment(fileName, createEnvironmentWithMockJdk(ConfigurationKind.JDK_ONLY));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateEnvironmentWithLanguageVersionDirective(File file, KotlinCoreEnvironment environment) throws IOException {
|
||||||
|
String version = InTextDirectivesUtils.findStringWithPrefixes(FileUtil.loadFile(file, true), "// LANGUAGE_VERSION:");
|
||||||
|
if (version != null) {
|
||||||
|
LanguageVersion explicitVersion = LanguageVersion.fromVersionString(version);
|
||||||
|
CommonConfigurationKeysKt.setLanguageVersionSettings(
|
||||||
|
environment.getConfiguration(),
|
||||||
|
new LanguageVersionSettingsImpl(explicitVersion, ApiVersion.createByLanguageVersion(explicitVersion))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void doTestWithEnvironment(String fileName, KotlinCoreEnvironment environment) throws Exception {
|
||||||
File file = new File(fileName);
|
File file = new File(fileName);
|
||||||
KtFile jetFile = KotlinTestUtils.loadJetFile(getProject(), file);
|
updateEnvironmentWithLanguageVersionDirective(file, environment);
|
||||||
|
KtFile jetFile = KotlinTestUtils.loadJetFile(environment.getProject(), file);
|
||||||
|
|
||||||
SetMultimap<KtElement, Pseudocode> data = LinkedHashMultimap.create();
|
SetMultimap<KtElement, Pseudocode> data = LinkedHashMultimap.create();
|
||||||
AnalysisResult analysisResult = KotlinTestUtils.analyzeFile(jetFile, getEnvironment());
|
AnalysisResult analysisResult = KotlinTestUtils.analyzeFile(jetFile, environment);
|
||||||
List<KtDeclaration> declarations = jetFile.getDeclarations();
|
List<KtDeclaration> declarations = jetFile.getDeclarations();
|
||||||
BindingContext bindingContext = analysisResult.getBindingContext();
|
BindingContext bindingContext = analysisResult.getBindingContext();
|
||||||
for (KtDeclaration declaration : declarations) {
|
for (KtDeclaration declaration : declarations) {
|
||||||
@@ -118,6 +141,10 @@ public abstract class AbstractPseudocodeTest extends KotlinTestWithEnvironment {
|
|||||||
label = (((KtPropertyAccessor) correspondingElement).isGetter() ? "get" : "set") + "_" + propertyName;
|
label = (((KtPropertyAccessor) correspondingElement).isGetter() ? "get" : "set") + "_" + propertyName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pseudocode.isInlined()) {
|
||||||
|
label = "inlined " + label;
|
||||||
|
}
|
||||||
|
|
||||||
instructionDump.append("== ").append(label).append(" ==\n");
|
instructionDump.append("== ").append(label).append(" ==\n");
|
||||||
|
|
||||||
instructionDump.append(correspondingElement.getText());
|
instructionDump.append(correspondingElement.getText());
|
||||||
|
|||||||
@@ -447,15 +447,19 @@ fun main(args: Array<String>) {
|
|||||||
|
|
||||||
testClass<AbstractControlFlowTest> {
|
testClass<AbstractControlFlowTest> {
|
||||||
model("cfg")
|
model("cfg")
|
||||||
|
model("cfgWithStdLib", testMethod = "doTestWithStdLib")
|
||||||
}
|
}
|
||||||
|
|
||||||
testClass<AbstractDataFlowTest> {
|
testClass<AbstractDataFlowTest> {
|
||||||
model("cfg-variables")
|
model("cfg-variables")
|
||||||
|
model("cfgVariablesWithStdLib", testMethod = "doTestWithStdLib")
|
||||||
}
|
}
|
||||||
|
|
||||||
testClass<AbstractPseudoValueTest> {
|
testClass<AbstractPseudoValueTest> {
|
||||||
model("cfg")
|
model("cfg")
|
||||||
|
model("cfgWithStdLib", testMethod = "doTestWithStdLib")
|
||||||
model("cfg-variables")
|
model("cfg-variables")
|
||||||
|
model("cfgVariablesWithStdLib", testMethod = "doTestWithStdLib")
|
||||||
}
|
}
|
||||||
|
|
||||||
testClass<AbstractAnnotationParameterTest> {
|
testClass<AbstractAnnotationParameterTest> {
|
||||||
|
|||||||
Reference in New Issue
Block a user