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.SetMultimap;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import kotlin.jvm.functions.Function3;
|
||||
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.InstructionImpl;
|
||||
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.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.resolve.BindingContext;
|
||||
import org.jetbrains.kotlin.test.ConfigurationKind;
|
||||
import org.jetbrains.kotlin.test.InTextDirectivesUtils;
|
||||
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.IOException;
|
||||
@@ -44,18 +52,33 @@ import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public abstract class AbstractPseudocodeTest extends KotlinTestWithEnvironment {
|
||||
@Override
|
||||
protected KotlinCoreEnvironment createEnvironment() {
|
||||
return createEnvironmentWithMockJdk(ConfigurationKind.JDK_ONLY);
|
||||
public abstract class AbstractPseudocodeTest extends KotlinTestWithEnvironmentManagement {
|
||||
protected void doTestWithStdLib(String fileName) throws Exception {
|
||||
doTestWithEnvironment(fileName, createEnvironmentWithMockJdk(ConfigurationKind.NO_KOTLIN_REFLECT));
|
||||
}
|
||||
|
||||
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);
|
||||
KtFile jetFile = KotlinTestUtils.loadJetFile(getProject(), file);
|
||||
updateEnvironmentWithLanguageVersionDirective(file, environment);
|
||||
KtFile jetFile = KotlinTestUtils.loadJetFile(environment.getProject(), file);
|
||||
|
||||
SetMultimap<KtElement, Pseudocode> data = LinkedHashMultimap.create();
|
||||
AnalysisResult analysisResult = KotlinTestUtils.analyzeFile(jetFile, getEnvironment());
|
||||
AnalysisResult analysisResult = KotlinTestUtils.analyzeFile(jetFile, environment);
|
||||
List<KtDeclaration> declarations = jetFile.getDeclarations();
|
||||
BindingContext bindingContext = analysisResult.getBindingContext();
|
||||
for (KtDeclaration declaration : declarations) {
|
||||
@@ -118,6 +141,10 @@ public abstract class AbstractPseudocodeTest extends KotlinTestWithEnvironment {
|
||||
label = (((KtPropertyAccessor) correspondingElement).isGetter() ? "get" : "set") + "_" + propertyName;
|
||||
}
|
||||
|
||||
if (pseudocode.isInlined()) {
|
||||
label = "inlined " + label;
|
||||
}
|
||||
|
||||
instructionDump.append("== ").append(label).append(" ==\n");
|
||||
|
||||
instructionDump.append(correspondingElement.getText());
|
||||
|
||||
@@ -447,15 +447,19 @@ fun main(args: Array<String>) {
|
||||
|
||||
testClass<AbstractControlFlowTest> {
|
||||
model("cfg")
|
||||
model("cfgWithStdLib", testMethod = "doTestWithStdLib")
|
||||
}
|
||||
|
||||
testClass<AbstractDataFlowTest> {
|
||||
model("cfg-variables")
|
||||
model("cfgVariablesWithStdLib", testMethod = "doTestWithStdLib")
|
||||
}
|
||||
|
||||
testClass<AbstractPseudoValueTest> {
|
||||
model("cfg")
|
||||
model("cfgWithStdLib", testMethod = "doTestWithStdLib")
|
||||
model("cfg-variables")
|
||||
model("cfgVariablesWithStdLib", testMethod = "doTestWithStdLib")
|
||||
}
|
||||
|
||||
testClass<AbstractAnnotationParameterTest> {
|
||||
|
||||
Reference in New Issue
Block a user