From a9869992269db615f8eea368e3dfa1e3d7146fe9 Mon Sep 17 00:00:00 2001 From: Dmitry Savvinov Date: Tue, 3 Oct 2017 15:02:48 +0300 Subject: [PATCH] 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 --- .../kotlin/cfg/AbstractPseudocodeTest.java | 41 +++++++++++++++---- .../kotlin/generators/tests/GenerateTests.kt | 4 ++ 2 files changed, 38 insertions(+), 7 deletions(-) diff --git a/compiler/tests/org/jetbrains/kotlin/cfg/AbstractPseudocodeTest.java b/compiler/tests/org/jetbrains/kotlin/cfg/AbstractPseudocodeTest.java index 48a1cee9f94..88e280e6098 100644 --- a/compiler/tests/org/jetbrains/kotlin/cfg/AbstractPseudocodeTest.java +++ b/compiler/tests/org/jetbrains/kotlin/cfg/AbstractPseudocodeTest.java @@ -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 data = LinkedHashMultimap.create(); - AnalysisResult analysisResult = KotlinTestUtils.analyzeFile(jetFile, getEnvironment()); + AnalysisResult analysisResult = KotlinTestUtils.analyzeFile(jetFile, environment); List 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()); diff --git a/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt b/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt index 062198d02ff..1a64dfc8b6c 100755 --- a/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt +++ b/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt @@ -447,15 +447,19 @@ fun main(args: Array) { testClass { model("cfg") + model("cfgWithStdLib", testMethod = "doTestWithStdLib") } testClass { model("cfg-variables") + model("cfgVariablesWithStdLib", testMethod = "doTestWithStdLib") } testClass { model("cfg") + model("cfgWithStdLib", testMethod = "doTestWithStdLib") model("cfg-variables") + model("cfgVariablesWithStdLib", testMethod = "doTestWithStdLib") } testClass {