From aa36e2ef5b7481511322cc0159b5833094b3204e Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Wed, 26 Jul 2023 17:47:56 +0200 Subject: [PATCH] [LL FIR] add script tests for AbstractNonLocalDeclarationAnchorTest ^KT-60728 --- .../classWithMembersScript.kts | 15 +++++++ .../classWithMembersScript.txt | 16 +++++++ .../classWithMembersWithPackage.kts | 17 +++++++ .../classWithMembersWithPackage.txt | 18 ++++++++ .../nonLocalDeclarationAnchors/statements.kts | 26 +++++++++++ .../nonLocalDeclarationAnchors/statements.txt | 27 ++++++++++++ ... AbstractNonLocalDeclarationAnchorTest.kt} | 13 ++++-- ...onLocalDeclarationAnchorTestGenerated.java | 44 +++++++++++++++++++ ...nLocalDeclarationAnchorTestGenerated.java} | 4 +- .../tests/analysis/api/firLowLevel.kt | 8 +++- 10 files changed, 181 insertions(+), 7 deletions(-) create mode 100644 analysis/low-level-api-fir/testdata/nonLocalDeclarationAnchors/classWithMembersScript.kts create mode 100644 analysis/low-level-api-fir/testdata/nonLocalDeclarationAnchors/classWithMembersScript.txt create mode 100644 analysis/low-level-api-fir/testdata/nonLocalDeclarationAnchors/classWithMembersWithPackage.kts create mode 100644 analysis/low-level-api-fir/testdata/nonLocalDeclarationAnchors/classWithMembersWithPackage.txt create mode 100644 analysis/low-level-api-fir/testdata/nonLocalDeclarationAnchors/statements.kts create mode 100644 analysis/low-level-api-fir/testdata/nonLocalDeclarationAnchors/statements.txt rename analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/{AbstractFirNonLocalDeclarationAnchorTest.kt => AbstractNonLocalDeclarationAnchorTest.kt} (84%) create mode 100644 analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/ScriptNonLocalDeclarationAnchorTestGenerated.java rename analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/{FirNonLocalDeclarationAnchorTestGenerated.java => SourceNonLocalDeclarationAnchorTestGenerated.java} (93%) diff --git a/analysis/low-level-api-fir/testdata/nonLocalDeclarationAnchors/classWithMembersScript.kts b/analysis/low-level-api-fir/testdata/nonLocalDeclarationAnchors/classWithMembersScript.kts new file mode 100644 index 00000000000..17c23cab2de --- /dev/null +++ b/analysis/low-level-api-fir/testdata/nonLocalDeclarationAnchors/classWithMembersScript.kts @@ -0,0 +1,15 @@ +class A constructor(a: Int) { + fun boo() { + fun bar() { + + } + } + + val i: Int = 42 + + init { + fun foo() { + + } + } +} \ No newline at end of file diff --git a/analysis/low-level-api-fir/testdata/nonLocalDeclarationAnchors/classWithMembersScript.txt b/analysis/low-level-api-fir/testdata/nonLocalDeclarationAnchors/classWithMembersScript.txt new file mode 100644 index 00000000000..4a0838c69d4 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/nonLocalDeclarationAnchors/classWithMembersScript.txt @@ -0,0 +1,16 @@ +/* anchor --> *//* anchor --> */class A /* anchor --> */constructor(/* anchor --> */a: Int/* <-- */)/* <-- */ { + /* anchor --> */fun boo() { + fun bar() { + + } + }/* <-- */ + + /* anchor --> */val i: Int = 42/* <-- */ + + /* anchor --> */init { + fun foo() { + + } + }/* <-- */ +}/* <-- */ +/* <-- */ diff --git a/analysis/low-level-api-fir/testdata/nonLocalDeclarationAnchors/classWithMembersWithPackage.kts b/analysis/low-level-api-fir/testdata/nonLocalDeclarationAnchors/classWithMembersWithPackage.kts new file mode 100644 index 00000000000..9e1ed549da9 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/nonLocalDeclarationAnchors/classWithMembersWithPackage.kts @@ -0,0 +1,17 @@ +package one + +class A constructor(a: Int) { + fun boo() { + fun bar() { + + } + } + + val i: Int = 42 + + init { + fun foo() { + + } + } +} \ No newline at end of file diff --git a/analysis/low-level-api-fir/testdata/nonLocalDeclarationAnchors/classWithMembersWithPackage.txt b/analysis/low-level-api-fir/testdata/nonLocalDeclarationAnchors/classWithMembersWithPackage.txt new file mode 100644 index 00000000000..53191411dd9 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/nonLocalDeclarationAnchors/classWithMembersWithPackage.txt @@ -0,0 +1,18 @@ +package one/* anchor --> */ + +/* anchor --> */class A /* anchor --> */constructor(/* anchor --> */a: Int/* <-- */)/* <-- */ { + /* anchor --> */fun boo() { + fun bar() { + + } + }/* <-- */ + + /* anchor --> */val i: Int = 42/* <-- */ + + /* anchor --> */init { + fun foo() { + + } + }/* <-- */ +}/* <-- */ +/* <-- */ diff --git a/analysis/low-level-api-fir/testdata/nonLocalDeclarationAnchors/statements.kts b/analysis/low-level-api-fir/testdata/nonLocalDeclarationAnchors/statements.kts new file mode 100644 index 00000000000..135d869f0d1 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/nonLocalDeclarationAnchors/statements.kts @@ -0,0 +1,26 @@ +class Builder { + var version: String = "" + + fun execute() { + println(version) + } +} + +fun build(action: Builder.() -> Unit) = Builder().apply(action) + +build { + version = "123" + class A { + fun doo() { + + } + } + + execute() +} + +val builder = build { + version = "321" +} + +builder.execute() \ No newline at end of file diff --git a/analysis/low-level-api-fir/testdata/nonLocalDeclarationAnchors/statements.txt b/analysis/low-level-api-fir/testdata/nonLocalDeclarationAnchors/statements.txt new file mode 100644 index 00000000000..45571840c2c --- /dev/null +++ b/analysis/low-level-api-fir/testdata/nonLocalDeclarationAnchors/statements.txt @@ -0,0 +1,27 @@ +/* anchor --> *//* anchor --> */class Builder { + /* anchor --> */var version: String = ""/* <-- */ + + /* anchor --> */fun execute() { + println(version) + }/* <-- */ +}/* <-- */ + +fun build(/* anchor --> */action: Builder.() -> Unit/* <-- */) = Builder().apply(action) + +build { + version = "123" + class A { + fun doo() { + + } + } + + execute() +} + +val builder = build { + version = "321" +} + +builder.execute() +/* <-- */ diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractFirNonLocalDeclarationAnchorTest.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractNonLocalDeclarationAnchorTest.kt similarity index 84% rename from analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractFirNonLocalDeclarationAnchorTest.kt rename to analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractNonLocalDeclarationAnchorTest.kt index 835695799ad..83587b375a2 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractFirNonLocalDeclarationAnchorTest.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractNonLocalDeclarationAnchorTest.kt @@ -11,6 +11,7 @@ import com.intellij.psi.PsiElementVisitor import com.intellij.psi.impl.source.tree.LeafPsiElement import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.getNonLocalContainingOrThisDeclaration import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLevelApiSingleFileTest +import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirScriptTestConfigurator import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirSourceTestConfigurator import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator import org.jetbrains.kotlin.psi.KtDeclaration @@ -22,9 +23,7 @@ import org.jetbrains.kotlin.test.services.TestModuleStructure import org.jetbrains.kotlin.test.services.TestServices import org.jetbrains.kotlin.test.services.assertions -abstract class AbstractFirNonLocalDeclarationAnchorTest : AbstractLowLevelApiSingleFileTest() { - override val configurator: AnalysisApiTestConfigurator = AnalysisApiFirSourceTestConfigurator(analyseInDependentSession = false) - +abstract class AbstractNonLocalDeclarationAnchorTest : AbstractLowLevelApiSingleFileTest() { override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) { val anchors = hashSetOf() ktFile.forEachDescendantOfType { @@ -65,3 +64,11 @@ abstract class AbstractFirNonLocalDeclarationAnchorTest : AbstractLowLevelApiSin } } } + +abstract class AbstractSourceNonLocalDeclarationAnchorTest : AbstractNonLocalDeclarationAnchorTest() { + override val configurator: AnalysisApiTestConfigurator = AnalysisApiFirSourceTestConfigurator(analyseInDependentSession = false) +} + +abstract class AbstractScriptNonLocalDeclarationAnchorTest : AbstractNonLocalDeclarationAnchorTest() { + override val configurator: AnalysisApiTestConfigurator get() = AnalysisApiFirScriptTestConfigurator +} diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/ScriptNonLocalDeclarationAnchorTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/ScriptNonLocalDeclarationAnchorTestGenerated.java new file mode 100644 index 00000000000..5a91caf7383 --- /dev/null +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/ScriptNonLocalDeclarationAnchorTestGenerated.java @@ -0,0 +1,44 @@ +/* + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.analysis.low.level.api.fir; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.util.KtTestUtil; +import org.jetbrains.kotlin.test.TestMetadata; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.io.File; +import java.util.regex.Pattern; + +/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.analysis.api.GenerateAnalysisApiTestsKt}. DO NOT MODIFY MANUALLY */ +@SuppressWarnings("all") +@TestMetadata("analysis/low-level-api-fir/testdata/nonLocalDeclarationAnchors") +@TestDataPath("$PROJECT_ROOT") +public class ScriptNonLocalDeclarationAnchorTestGenerated extends AbstractScriptNonLocalDeclarationAnchorTest { + @Test + public void testAllFilesPresentInNonLocalDeclarationAnchors() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/low-level-api-fir/testdata/nonLocalDeclarationAnchors"), Pattern.compile("^(.+)\\.(kts)$"), null, true); + } + + @Test + @TestMetadata("classWithMembersScript.kts") + public void testClassWithMembersScript() throws Exception { + runTest("analysis/low-level-api-fir/testdata/nonLocalDeclarationAnchors/classWithMembersScript.kts"); + } + + @Test + @TestMetadata("classWithMembersWithPackage.kts") + public void testClassWithMembersWithPackage() throws Exception { + runTest("analysis/low-level-api-fir/testdata/nonLocalDeclarationAnchors/classWithMembersWithPackage.kts"); + } + + @Test + @TestMetadata("statements.kts") + public void testStatements() throws Exception { + runTest("analysis/low-level-api-fir/testdata/nonLocalDeclarationAnchors/statements.kts"); + } +} diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirNonLocalDeclarationAnchorTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceNonLocalDeclarationAnchorTestGenerated.java similarity index 93% rename from analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirNonLocalDeclarationAnchorTestGenerated.java rename to analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceNonLocalDeclarationAnchorTestGenerated.java index 25d5eeab7e8..8be7bfb635f 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirNonLocalDeclarationAnchorTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceNonLocalDeclarationAnchorTestGenerated.java @@ -18,10 +18,10 @@ import java.util.regex.Pattern; @SuppressWarnings("all") @TestMetadata("analysis/low-level-api-fir/testdata/nonLocalDeclarationAnchors") @TestDataPath("$PROJECT_ROOT") -public class FirNonLocalDeclarationAnchorTestGenerated extends AbstractFirNonLocalDeclarationAnchorTest { +public class SourceNonLocalDeclarationAnchorTestGenerated extends AbstractSourceNonLocalDeclarationAnchorTest { @Test public void testAllFilesPresentInNonLocalDeclarationAnchors() throws Exception { - KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/low-level-api-fir/testdata/nonLocalDeclarationAnchors"), Pattern.compile("^(.+)\\.kt$"), null, true); + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/low-level-api-fir/testdata/nonLocalDeclarationAnchors"), Pattern.compile("^(.+)\\.(kt)$"), null, true); } @Test diff --git a/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/firLowLevel.kt b/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/firLowLevel.kt index d3fe4943e5f..1b9124f2e76 100644 --- a/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/firLowLevel.kt +++ b/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/firLowLevel.kt @@ -123,8 +123,12 @@ internal fun TestGroupSuite.generateFirLowLevelApiTests() { model("fileBasedDeclarationProvider", pattern = TestGeneratorUtil.KT_OR_KTS) } - testClass { - model("nonLocalDeclarationAnchors") + testClass { + model("nonLocalDeclarationAnchors", pattern = TestGeneratorUtil.KT) + } + + testClass { + model("nonLocalDeclarationAnchors", pattern = TestGeneratorUtil.KTS) } testClass {