[LL] Add LLFirSession invalidation tests

- This commit moves all session invalidation tests from the IDE which
  are non-cyclic to the Analysis API. Cyclic session invalidation tests
  cannot be moved because the Kotlin test infrastructure doesn't support
  cyclic module dependencies.
- In fact, these new tests cover more cases, because the IDE tests only
  covered global module state and module out-of-block modification
  events. Crucially, global source modification events are now
  supported, which require libraries to be left alone.
- Module out-of-block modification for libraries is technically
  undefined, but the test still checks this behavior. The current
  session invalidation implementation behaves the same for any kind of
  module-level modification event, so it is possible to publish a module
  OOBM event for libraries. If this changes in the future, we can
  disable those tests. But for now, it's good that these tests run,
  because they will alert us to (accidental) changes to this behavior.

^KT-56288 fixed
^KT-65265 fixed
This commit is contained in:
Marco Pennekamp
2024-01-24 23:04:36 +01:00
committed by Space Team
parent 56a08319ec
commit beb40484dd
91 changed files with 1353 additions and 0 deletions
@@ -0,0 +1,10 @@
Module names of invalidated sessions:
A
B
C
D
E
F
G
L1
L2
@@ -0,0 +1,8 @@
Module names of invalidated sessions:
A
B
C
D
E
F
G
@@ -0,0 +1,8 @@
Module names of invalidated sessions:
A
B
C
D
E
F
G
@@ -0,0 +1,22 @@
// MODULE: L1
// MODULE_KIND: LibraryBinary
// FILE: l1.kt
// MODULE: L2
// MODULE_KIND: LibraryBinary
// FILE: l2.kt
// MODULE: G
// MODULE: E
// WILDCARD_MODIFICATION_EVENT
// MODULE: D
// MODULE: B(D, E)
// MODULE: F(L1, B)
// MODULE: C(F, G, L2)
// MODULE: A(B, C)
@@ -0,0 +1,6 @@
Module names of invalidated sessions:
A
B
C
E
F
@@ -0,0 +1,6 @@
Module names of invalidated sessions:
A
B
C
E
F
@@ -0,0 +1,10 @@
Module names of invalidated sessions:
A
B
C
D
E
F
G
L1
L2
@@ -0,0 +1,8 @@
Module names of invalidated sessions:
A
B
C
D
E
F
G
@@ -0,0 +1,8 @@
Module names of invalidated sessions:
A
B
C
D
E
F
G
@@ -0,0 +1,22 @@
// MODULE: L1
// MODULE_KIND: LibraryBinary
// FILE: l1.kt
// MODULE: L2
// MODULE_KIND: LibraryBinary
// FILE: l2.kt
// MODULE: G
// MODULE: F(L1)
// MODULE: E
// MODULE: D
// MODULE: C(F, G, L2)
// MODULE: B(D, E)
// MODULE: A(B, C)
// WILDCARD_MODIFICATION_EVENT
@@ -0,0 +1,2 @@
Module names of invalidated sessions:
A
@@ -0,0 +1,2 @@
Module names of invalidated sessions:
A
@@ -0,0 +1,10 @@
Module names of invalidated sessions:
A
B
C
D
E
F
G
L1
L2
@@ -0,0 +1,8 @@
Module names of invalidated sessions:
A
B
C
D
E
F
G
@@ -0,0 +1,8 @@
Module names of invalidated sessions:
A
B
C
D
E
F
G
@@ -0,0 +1,23 @@
// MODULE: L1
// MODULE_KIND: LibraryBinary
// FILE: l1.kt
// MODULE: L2
// MODULE_KIND: LibraryBinary
// FILE: l2.kt
// MODULE: G
// MODULE: F(L1)
// MODULE: E
// MODULE: D
// WILDCARD_MODIFICATION_EVENT
// MODULE: C(F, G, L2)
// WILDCARD_MODIFICATION_EVENT
// MODULE: B(D, E)
// MODULE: A(B, C)
@@ -0,0 +1,5 @@
Module names of invalidated sessions:
A
B
C
D
@@ -0,0 +1,5 @@
Module names of invalidated sessions:
A
B
C
D
@@ -0,0 +1,10 @@
Module names of invalidated sessions:
A
B
C
D
E
F
G
L1
L2
@@ -0,0 +1,8 @@
Module names of invalidated sessions:
A
B
C
D
E
F
G
@@ -0,0 +1,8 @@
Module names of invalidated sessions:
A
B
C
D
E
F
G
@@ -0,0 +1,22 @@
// MODULE: L1
// MODULE_KIND: LibraryBinary
// FILE: l1.kt
// MODULE: L2
// MODULE_KIND: LibraryBinary
// FILE: l2.kt
// MODULE: G
// MODULE: F(L1)
// WILDCARD_MODIFICATION_EVENT
// MODULE: E
// MODULE: D
// MODULE: C(F, G, L2)
// MODULE: B(D, E)
// MODULE: A(B, C)
@@ -0,0 +1,4 @@
Module names of invalidated sessions:
A
C
F
@@ -0,0 +1,4 @@
Module names of invalidated sessions:
A
C
F
@@ -0,0 +1,10 @@
Module names of invalidated sessions:
A
B
C
D
E
F
G
L1
L2
@@ -0,0 +1,8 @@
Module names of invalidated sessions:
A
B
C
D
E
F
G
@@ -0,0 +1,8 @@
Module names of invalidated sessions:
A
B
C
D
E
F
G
@@ -0,0 +1,22 @@
// MODULE: L1
// MODULE_KIND: LibraryBinary
// WILDCARD_MODIFICATION_EVENT
// FILE: l1.kt
// MODULE: L2
// MODULE_KIND: LibraryBinary
// FILE: l2.kt
// MODULE: G
// MODULE: F(L1)
// MODULE: E
// MODULE: D
// MODULE: C(F, G, L2)
// MODULE: B(D, E)
// MODULE: A(B, C)
@@ -0,0 +1,5 @@
Module names of invalidated sessions:
A
C
F
L1
@@ -0,0 +1,5 @@
Module names of invalidated sessions:
A
C
F
L1
@@ -0,0 +1,10 @@
Module names of invalidated sessions:
A
B
C
D
E
F
G
L1
L2
@@ -0,0 +1,8 @@
Module names of invalidated sessions:
A
B
C
D
E
F
G
@@ -0,0 +1,8 @@
Module names of invalidated sessions:
A
B
C
D
E
F
G
@@ -0,0 +1,22 @@
// MODULE: L1
// MODULE_KIND: LibraryBinary
// FILE: l1.kt
// MODULE: L2
// MODULE_KIND: LibraryBinary
// WILDCARD_MODIFICATION_EVENT
// FILE: l2.kt
// MODULE: G
// MODULE: F(L1)
// MODULE: E
// MODULE: D
// MODULE: C(F, G, L2)
// MODULE: B(D, E)
// MODULE: A(B, C)
@@ -0,0 +1,4 @@
Module names of invalidated sessions:
A
C
L2
@@ -0,0 +1,4 @@
Module names of invalidated sessions:
A
C
L2
@@ -0,0 +1 @@
Module names of invalidated sessions:
@@ -0,0 +1 @@
Module names of invalidated sessions:
@@ -0,0 +1 @@
Module names of invalidated sessions:
@@ -0,0 +1,21 @@
// MODULE: L1
// MODULE_KIND: LibraryBinary
// FILE: l1.kt
// MODULE: L2
// MODULE_KIND: LibraryBinary
// FILE: l2.kt
// MODULE: G
// MODULE: F(L1)
// MODULE: E
// MODULE: D
// MODULE: C(F, G, L2)
// MODULE: B(D, E)
// MODULE: A(B, C)
@@ -0,0 +1 @@
Module names of invalidated sessions:
@@ -0,0 +1 @@
Module names of invalidated sessions:
@@ -0,0 +1,7 @@
Module names of invalidated sessions:
A
B
C
D
E
L1
@@ -0,0 +1,6 @@
Module names of invalidated sessions:
A
B
C
D
E
@@ -0,0 +1,6 @@
Module names of invalidated sessions:
A
B
C
D
E
@@ -0,0 +1,14 @@
// MODULE: L1
// MODULE_KIND: LibraryBinary
// FILE: l1.kt
// MODULE: E(L1)
// MODULE: D(E)
// MODULE: C(D)
// WILDCARD_MODIFICATION_EVENT
// MODULE: B(C)
// MODULE: A(B)
@@ -0,0 +1,4 @@
Module names of invalidated sessions:
A
B
C
@@ -0,0 +1,4 @@
Module names of invalidated sessions:
A
B
C
@@ -0,0 +1,7 @@
Module names of invalidated sessions:
A
B
C
D
E
L1
@@ -0,0 +1,6 @@
Module names of invalidated sessions:
A
B
C
D
E
@@ -0,0 +1,6 @@
Module names of invalidated sessions:
A
B
C
D
E
@@ -0,0 +1,14 @@
// MODULE: L1
// MODULE_KIND: LibraryBinary
// WILDCARD_MODIFICATION_EVENT
// FILE: l1.kt
// MODULE: E(L1)
// MODULE: D(E)
// MODULE: C(D)
// MODULE: B(C)
// MODULE: A(B)
@@ -0,0 +1,7 @@
Module names of invalidated sessions:
A
B
C
D
E
L1
@@ -0,0 +1,7 @@
Module names of invalidated sessions:
A
B
C
D
E
L1
@@ -0,0 +1,7 @@
Module names of invalidated sessions:
A
B
C
D
L1
L2
@@ -0,0 +1,5 @@
Module names of invalidated sessions:
A
B
C
D
@@ -0,0 +1,5 @@
Module names of invalidated sessions:
A
B
C
D
@@ -0,0 +1,17 @@
// MODULE: L1
// MODULE_KIND: LibraryBinary
// FILE: l1.kt
// MODULE: L2
// MODULE_KIND: LibraryBinary
// FILE: l2.kt
// MODULE: D(L1)
// MODULE: C(D, L2)
// WILDCARD_MODIFICATION_EVENT
// MODULE: B(D)
// WILDCARD_MODIFICATION_EVENT
// MODULE: A(B, C)
@@ -0,0 +1,4 @@
Module names of invalidated sessions:
A
B
C
@@ -0,0 +1,4 @@
Module names of invalidated sessions:
A
B
C
@@ -0,0 +1,7 @@
Module names of invalidated sessions:
A
B
C
D
L1
L2
@@ -0,0 +1,5 @@
Module names of invalidated sessions:
A
B
C
D
@@ -0,0 +1,5 @@
Module names of invalidated sessions:
A
B
C
D
@@ -0,0 +1,17 @@
// MODULE: L1
// MODULE_KIND: LibraryBinary
// FILE: l1.kt
// MODULE: L2
// MODULE_KIND: LibraryBinary
// FILE: l2.kt
// MODULE: D(L1)
// WILDCARD_MODIFICATION_EVENT
// MODULE: C(D, L2)
// WILDCARD_MODIFICATION_EVENT
// MODULE: B(D)
// MODULE: A(B, C)
@@ -0,0 +1,5 @@
Module names of invalidated sessions:
A
B
C
D
@@ -0,0 +1,5 @@
Module names of invalidated sessions:
A
B
C
D
@@ -0,0 +1,7 @@
Module names of invalidated sessions:
A
B
C
D
L1
L2
@@ -0,0 +1,5 @@
Module names of invalidated sessions:
A
B
C
D
@@ -0,0 +1,5 @@
Module names of invalidated sessions:
A
B
C
D
@@ -0,0 +1,16 @@
// MODULE: L1
// MODULE_KIND: LibraryBinary
// FILE: l1.kt
// MODULE: L2
// MODULE_KIND: LibraryBinary
// FILE: l2.kt
// MODULE: D(L1)
// WILDCARD_MODIFICATION_EVENT
// MODULE: C(D, L2)
// MODULE: B(D)
// MODULE: A(B, C)
@@ -0,0 +1,5 @@
Module names of invalidated sessions:
A
B
C
D
@@ -0,0 +1,5 @@
Module names of invalidated sessions:
A
B
C
D
@@ -0,0 +1,7 @@
Module names of invalidated sessions:
A
B
C
D
L1
L2
@@ -0,0 +1,5 @@
Module names of invalidated sessions:
A
B
C
D
@@ -0,0 +1,5 @@
Module names of invalidated sessions:
A
B
C
D
@@ -0,0 +1,16 @@
// MODULE: L1
// MODULE_KIND: LibraryBinary
// WILDCARD_MODIFICATION_EVENT
// FILE: l1.kt
// MODULE: L2
// MODULE_KIND: LibraryBinary
// FILE: l2.kt
// MODULE: D(L1)
// MODULE: C(D, L2)
// MODULE: B(D)
// MODULE: A(B, C)
@@ -0,0 +1,6 @@
Module names of invalidated sessions:
A
B
C
D
L1
@@ -0,0 +1,6 @@
Module names of invalidated sessions:
A
B
C
D
L1
@@ -0,0 +1,7 @@
Module names of invalidated sessions:
A
B
C
D
L1
L2
@@ -0,0 +1,5 @@
Module names of invalidated sessions:
A
B
C
D
@@ -0,0 +1,5 @@
Module names of invalidated sessions:
A
B
C
D
@@ -0,0 +1,16 @@
// MODULE: L1
// MODULE_KIND: LibraryBinary
// FILE: l1.kt
// MODULE: L2
// MODULE_KIND: LibraryBinary
// WILDCARD_MODIFICATION_EVENT
// FILE: l2.kt
// MODULE: D(L1)
// MODULE: C(D, L2)
// MODULE: B(D)
// MODULE: A(B, C)
@@ -0,0 +1,4 @@
Module names of invalidated sessions:
A
C
L2
@@ -0,0 +1,4 @@
Module names of invalidated sessions:
A
C
L2
@@ -0,0 +1,113 @@
/*
* Copyright 2010-2024 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.sessions
import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirSourceTestConfigurator
import org.jetbrains.kotlin.analysis.project.structure.KtModule
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest
import org.jetbrains.kotlin.analysis.test.framework.directives.ModificationEventKind
import org.jetbrains.kotlin.analysis.test.framework.directives.publishWildcardModificationEventsByDirective
import org.jetbrains.kotlin.analysis.test.framework.project.structure.ktModuleProvider
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator
import org.jetbrains.kotlin.test.services.TestModuleStructure
import org.jetbrains.kotlin.test.services.TestServices
import org.jetbrains.kotlin.test.services.assertions
/**
* Checks that sessions are invalidated after publishing modification events. The type of published modification event depends on the value
* of [modificationEventKind]. This allows [AbstractSessionInvalidationTest] to check all modification event kinds with the same original
* test data.
*
* See also `AbstractSessionInvalidationTest` on the IDE side, which is still required to check session invalidation in module structures
* with cyclic dependencies.
*/
abstract class AbstractSessionInvalidationTest : AbstractAnalysisApiBasedTest() {
protected abstract val modificationEventKind: ModificationEventKind
override fun doTestByModuleStructure(moduleStructure: TestModuleStructure, testServices: TestServices) {
val allKtModules = testServices.ktModuleProvider.getModuleStructure().allKtModules()
val sessionsBeforeModification = getSessionsFor(allKtModules)
moduleStructure.publishWildcardModificationEventsByDirective(modificationEventKind, testServices)
val sessionsAfterModification = getSessionsFor(allKtModules)
val invalidatedSessions = buildSet {
addAll(sessionsBeforeModification)
removeAll(sessionsAfterModification)
}
checkInvalidatedModules(moduleStructure, invalidatedSessions, testServices)
checkSessionsMarkedInvalid(invalidatedSessions, testServices)
}
private fun getSessionsFor(modules: List<KtModule>): List<LLFirSession> {
val project = modules.first().project
val sessionCache = LLFirSessionCache.getInstance(project)
return modules.map { sessionCache.getSession(it) }
}
private fun checkInvalidatedModules(
testModuleStructure: TestModuleStructure,
invalidatedSessions: Set<LLFirSession>,
testServices: TestServices,
) {
val testModuleNames = testModuleStructure.modules.map { it.name }
val invalidatedModuleDescriptions = invalidatedSessions
.map { it.ktModule.toString() }
.filter {
// We only want to include test modules in the output. Otherwise, it might include libraries from the test infrastructure.
it in testModuleNames
}
.distinct()
.sorted()
val actualText = buildString {
appendLine("Module names of invalidated sessions:")
invalidatedModuleDescriptions.forEach { appendLine(it) }
}
testServices.assertions.assertEqualsToTestDataFileSibling(actualText, extension = ".${modificationEventKind.name.lowercase()}.txt")
}
private fun checkSessionsMarkedInvalid(
invalidatedSessions: Set<LLFirSession>,
testServices: TestServices,
) {
invalidatedSessions.forEach { session ->
testServices.assertions.assertFalse(session.isValid) {
"The invalidated session `${session}` should have been marked invalid."
}
}
}
override val configurator: AnalysisApiTestConfigurator = AnalysisApiFirSourceTestConfigurator(analyseInDependentSession = false)
}
abstract class AbstractModuleStateModificationSessionInvalidationTest : AbstractSessionInvalidationTest() {
override val modificationEventKind: ModificationEventKind
get() = ModificationEventKind.MODULE_STATE_MODIFICATION
}
abstract class AbstractModuleOutOfBlockModificationSessionInvalidationTest : AbstractSessionInvalidationTest() {
override val modificationEventKind: ModificationEventKind
get() = ModificationEventKind.MODULE_OUT_OF_BLOCK_MODIFICATION
}
abstract class AbstractGlobalModuleStateModificationSessionInvalidationTest : AbstractSessionInvalidationTest() {
override val modificationEventKind: ModificationEventKind
get() = ModificationEventKind.GLOBAL_MODULE_STATE_MODIFICATION
}
abstract class AbstractGlobalSourceModuleStateModificationSessionInvalidationTest : AbstractSessionInvalidationTest() {
override val modificationEventKind: ModificationEventKind
get() = ModificationEventKind.GLOBAL_SOURCE_MODULE_STATE_MODIFICATION
}
abstract class AbstractGlobalSourceOutOfBlockModificationSessionInvalidationTest : AbstractSessionInvalidationTest() {
override val modificationEventKind: ModificationEventKind
get() = ModificationEventKind.GLOBAL_SOURCE_OUT_OF_BLOCK_MODIFICATION
}
@@ -0,0 +1,109 @@
/*
* Copyright 2010-2024 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.sessions;
import com.intellij.testFramework.TestDataPath;
import org.jetbrains.kotlin.test.util.KtTestUtil;
import org.jetbrains.kotlin.test.TestMetadata;
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/sessionInvalidation")
@TestDataPath("$PROJECT_ROOT")
public class GlobalModuleStateModificationSessionInvalidationTestGenerated extends AbstractGlobalModuleStateModificationSessionInvalidationTest {
@Test
public void testAllFilesPresentInSessionInvalidation() {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/low-level-api-fir/testData/sessionInvalidation"), Pattern.compile("^(.+)\\.kt$"), null, true);
}
@Test
@TestMetadata("binaryTreeAdditionalEdge.kt")
public void testBinaryTreeAdditionalEdge() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeAdditionalEdge.kt");
}
@Test
@TestMetadata("binaryTreeInvalidateA.kt")
public void testBinaryTreeInvalidateA() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeInvalidateA.kt");
}
@Test
@TestMetadata("binaryTreeInvalidateCD.kt")
public void testBinaryTreeInvalidateCD() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeInvalidateCD.kt");
}
@Test
@TestMetadata("binaryTreeInvalidateF.kt")
public void testBinaryTreeInvalidateF() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeInvalidateF.kt");
}
@Test
@TestMetadata("binaryTreeInvalidateL1.kt")
public void testBinaryTreeInvalidateL1() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeInvalidateL1.kt");
}
@Test
@TestMetadata("binaryTreeInvalidateL2.kt")
public void testBinaryTreeInvalidateL2() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeInvalidateL2.kt");
}
@Test
@TestMetadata("binaryTreeInvalidateNone.kt")
public void testBinaryTreeInvalidateNone() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeInvalidateNone.kt");
}
@Test
@TestMetadata("linearInvalidateC.kt")
public void testLinearInvalidateC() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/linearInvalidateC.kt");
}
@Test
@TestMetadata("linearInvalidateL1.kt")
public void testLinearInvalidateL1() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/linearInvalidateL1.kt");
}
@Test
@TestMetadata("rhombusInvalidateBC.kt")
public void testRhombusInvalidateBC() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/rhombusInvalidateBC.kt");
}
@Test
@TestMetadata("rhombusInvalidateCD.kt")
public void testRhombusInvalidateCD() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/rhombusInvalidateCD.kt");
}
@Test
@TestMetadata("rhombusInvalidateD.kt")
public void testRhombusInvalidateD() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/rhombusInvalidateD.kt");
}
@Test
@TestMetadata("rhombusInvalidateL1.kt")
public void testRhombusInvalidateL1() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/rhombusInvalidateL1.kt");
}
@Test
@TestMetadata("rhombusInvalidateL2.kt")
public void testRhombusInvalidateL2() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/rhombusInvalidateL2.kt");
}
}
@@ -0,0 +1,109 @@
/*
* Copyright 2010-2024 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.sessions;
import com.intellij.testFramework.TestDataPath;
import org.jetbrains.kotlin.test.util.KtTestUtil;
import org.jetbrains.kotlin.test.TestMetadata;
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/sessionInvalidation")
@TestDataPath("$PROJECT_ROOT")
public class GlobalSourceModuleStateModificationSessionInvalidationTestGenerated extends AbstractGlobalSourceModuleStateModificationSessionInvalidationTest {
@Test
public void testAllFilesPresentInSessionInvalidation() {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/low-level-api-fir/testData/sessionInvalidation"), Pattern.compile("^(.+)\\.kt$"), null, true);
}
@Test
@TestMetadata("binaryTreeAdditionalEdge.kt")
public void testBinaryTreeAdditionalEdge() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeAdditionalEdge.kt");
}
@Test
@TestMetadata("binaryTreeInvalidateA.kt")
public void testBinaryTreeInvalidateA() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeInvalidateA.kt");
}
@Test
@TestMetadata("binaryTreeInvalidateCD.kt")
public void testBinaryTreeInvalidateCD() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeInvalidateCD.kt");
}
@Test
@TestMetadata("binaryTreeInvalidateF.kt")
public void testBinaryTreeInvalidateF() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeInvalidateF.kt");
}
@Test
@TestMetadata("binaryTreeInvalidateL1.kt")
public void testBinaryTreeInvalidateL1() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeInvalidateL1.kt");
}
@Test
@TestMetadata("binaryTreeInvalidateL2.kt")
public void testBinaryTreeInvalidateL2() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeInvalidateL2.kt");
}
@Test
@TestMetadata("binaryTreeInvalidateNone.kt")
public void testBinaryTreeInvalidateNone() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeInvalidateNone.kt");
}
@Test
@TestMetadata("linearInvalidateC.kt")
public void testLinearInvalidateC() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/linearInvalidateC.kt");
}
@Test
@TestMetadata("linearInvalidateL1.kt")
public void testLinearInvalidateL1() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/linearInvalidateL1.kt");
}
@Test
@TestMetadata("rhombusInvalidateBC.kt")
public void testRhombusInvalidateBC() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/rhombusInvalidateBC.kt");
}
@Test
@TestMetadata("rhombusInvalidateCD.kt")
public void testRhombusInvalidateCD() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/rhombusInvalidateCD.kt");
}
@Test
@TestMetadata("rhombusInvalidateD.kt")
public void testRhombusInvalidateD() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/rhombusInvalidateD.kt");
}
@Test
@TestMetadata("rhombusInvalidateL1.kt")
public void testRhombusInvalidateL1() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/rhombusInvalidateL1.kt");
}
@Test
@TestMetadata("rhombusInvalidateL2.kt")
public void testRhombusInvalidateL2() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/rhombusInvalidateL2.kt");
}
}
@@ -0,0 +1,109 @@
/*
* Copyright 2010-2024 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.sessions;
import com.intellij.testFramework.TestDataPath;
import org.jetbrains.kotlin.test.util.KtTestUtil;
import org.jetbrains.kotlin.test.TestMetadata;
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/sessionInvalidation")
@TestDataPath("$PROJECT_ROOT")
public class GlobalSourceOutOfBlockModificationSessionInvalidationTestGenerated extends AbstractGlobalSourceOutOfBlockModificationSessionInvalidationTest {
@Test
public void testAllFilesPresentInSessionInvalidation() {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/low-level-api-fir/testData/sessionInvalidation"), Pattern.compile("^(.+)\\.kt$"), null, true);
}
@Test
@TestMetadata("binaryTreeAdditionalEdge.kt")
public void testBinaryTreeAdditionalEdge() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeAdditionalEdge.kt");
}
@Test
@TestMetadata("binaryTreeInvalidateA.kt")
public void testBinaryTreeInvalidateA() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeInvalidateA.kt");
}
@Test
@TestMetadata("binaryTreeInvalidateCD.kt")
public void testBinaryTreeInvalidateCD() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeInvalidateCD.kt");
}
@Test
@TestMetadata("binaryTreeInvalidateF.kt")
public void testBinaryTreeInvalidateF() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeInvalidateF.kt");
}
@Test
@TestMetadata("binaryTreeInvalidateL1.kt")
public void testBinaryTreeInvalidateL1() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeInvalidateL1.kt");
}
@Test
@TestMetadata("binaryTreeInvalidateL2.kt")
public void testBinaryTreeInvalidateL2() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeInvalidateL2.kt");
}
@Test
@TestMetadata("binaryTreeInvalidateNone.kt")
public void testBinaryTreeInvalidateNone() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeInvalidateNone.kt");
}
@Test
@TestMetadata("linearInvalidateC.kt")
public void testLinearInvalidateC() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/linearInvalidateC.kt");
}
@Test
@TestMetadata("linearInvalidateL1.kt")
public void testLinearInvalidateL1() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/linearInvalidateL1.kt");
}
@Test
@TestMetadata("rhombusInvalidateBC.kt")
public void testRhombusInvalidateBC() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/rhombusInvalidateBC.kt");
}
@Test
@TestMetadata("rhombusInvalidateCD.kt")
public void testRhombusInvalidateCD() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/rhombusInvalidateCD.kt");
}
@Test
@TestMetadata("rhombusInvalidateD.kt")
public void testRhombusInvalidateD() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/rhombusInvalidateD.kt");
}
@Test
@TestMetadata("rhombusInvalidateL1.kt")
public void testRhombusInvalidateL1() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/rhombusInvalidateL1.kt");
}
@Test
@TestMetadata("rhombusInvalidateL2.kt")
public void testRhombusInvalidateL2() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/rhombusInvalidateL2.kt");
}
}
@@ -0,0 +1,109 @@
/*
* Copyright 2010-2024 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.sessions;
import com.intellij.testFramework.TestDataPath;
import org.jetbrains.kotlin.test.util.KtTestUtil;
import org.jetbrains.kotlin.test.TestMetadata;
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/sessionInvalidation")
@TestDataPath("$PROJECT_ROOT")
public class ModuleOutOfBlockModificationSessionInvalidationTestGenerated extends AbstractModuleOutOfBlockModificationSessionInvalidationTest {
@Test
public void testAllFilesPresentInSessionInvalidation() {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/low-level-api-fir/testData/sessionInvalidation"), Pattern.compile("^(.+)\\.kt$"), null, true);
}
@Test
@TestMetadata("binaryTreeAdditionalEdge.kt")
public void testBinaryTreeAdditionalEdge() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeAdditionalEdge.kt");
}
@Test
@TestMetadata("binaryTreeInvalidateA.kt")
public void testBinaryTreeInvalidateA() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeInvalidateA.kt");
}
@Test
@TestMetadata("binaryTreeInvalidateCD.kt")
public void testBinaryTreeInvalidateCD() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeInvalidateCD.kt");
}
@Test
@TestMetadata("binaryTreeInvalidateF.kt")
public void testBinaryTreeInvalidateF() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeInvalidateF.kt");
}
@Test
@TestMetadata("binaryTreeInvalidateL1.kt")
public void testBinaryTreeInvalidateL1() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeInvalidateL1.kt");
}
@Test
@TestMetadata("binaryTreeInvalidateL2.kt")
public void testBinaryTreeInvalidateL2() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeInvalidateL2.kt");
}
@Test
@TestMetadata("binaryTreeInvalidateNone.kt")
public void testBinaryTreeInvalidateNone() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeInvalidateNone.kt");
}
@Test
@TestMetadata("linearInvalidateC.kt")
public void testLinearInvalidateC() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/linearInvalidateC.kt");
}
@Test
@TestMetadata("linearInvalidateL1.kt")
public void testLinearInvalidateL1() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/linearInvalidateL1.kt");
}
@Test
@TestMetadata("rhombusInvalidateBC.kt")
public void testRhombusInvalidateBC() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/rhombusInvalidateBC.kt");
}
@Test
@TestMetadata("rhombusInvalidateCD.kt")
public void testRhombusInvalidateCD() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/rhombusInvalidateCD.kt");
}
@Test
@TestMetadata("rhombusInvalidateD.kt")
public void testRhombusInvalidateD() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/rhombusInvalidateD.kt");
}
@Test
@TestMetadata("rhombusInvalidateL1.kt")
public void testRhombusInvalidateL1() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/rhombusInvalidateL1.kt");
}
@Test
@TestMetadata("rhombusInvalidateL2.kt")
public void testRhombusInvalidateL2() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/rhombusInvalidateL2.kt");
}
}
@@ -0,0 +1,109 @@
/*
* Copyright 2010-2024 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.sessions;
import com.intellij.testFramework.TestDataPath;
import org.jetbrains.kotlin.test.util.KtTestUtil;
import org.jetbrains.kotlin.test.TestMetadata;
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/sessionInvalidation")
@TestDataPath("$PROJECT_ROOT")
public class ModuleStateModificationSessionInvalidationTestGenerated extends AbstractModuleStateModificationSessionInvalidationTest {
@Test
public void testAllFilesPresentInSessionInvalidation() {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/low-level-api-fir/testData/sessionInvalidation"), Pattern.compile("^(.+)\\.kt$"), null, true);
}
@Test
@TestMetadata("binaryTreeAdditionalEdge.kt")
public void testBinaryTreeAdditionalEdge() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeAdditionalEdge.kt");
}
@Test
@TestMetadata("binaryTreeInvalidateA.kt")
public void testBinaryTreeInvalidateA() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeInvalidateA.kt");
}
@Test
@TestMetadata("binaryTreeInvalidateCD.kt")
public void testBinaryTreeInvalidateCD() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeInvalidateCD.kt");
}
@Test
@TestMetadata("binaryTreeInvalidateF.kt")
public void testBinaryTreeInvalidateF() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeInvalidateF.kt");
}
@Test
@TestMetadata("binaryTreeInvalidateL1.kt")
public void testBinaryTreeInvalidateL1() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeInvalidateL1.kt");
}
@Test
@TestMetadata("binaryTreeInvalidateL2.kt")
public void testBinaryTreeInvalidateL2() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeInvalidateL2.kt");
}
@Test
@TestMetadata("binaryTreeInvalidateNone.kt")
public void testBinaryTreeInvalidateNone() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/binaryTreeInvalidateNone.kt");
}
@Test
@TestMetadata("linearInvalidateC.kt")
public void testLinearInvalidateC() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/linearInvalidateC.kt");
}
@Test
@TestMetadata("linearInvalidateL1.kt")
public void testLinearInvalidateL1() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/linearInvalidateL1.kt");
}
@Test
@TestMetadata("rhombusInvalidateBC.kt")
public void testRhombusInvalidateBC() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/rhombusInvalidateBC.kt");
}
@Test
@TestMetadata("rhombusInvalidateCD.kt")
public void testRhombusInvalidateCD() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/rhombusInvalidateCD.kt");
}
@Test
@TestMetadata("rhombusInvalidateD.kt")
public void testRhombusInvalidateD() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/rhombusInvalidateD.kt");
}
@Test
@TestMetadata("rhombusInvalidateL1.kt")
public void testRhombusInvalidateL1() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/rhombusInvalidateL1.kt");
}
@Test
@TestMetadata("rhombusInvalidateL2.kt")
public void testRhombusInvalidateL2() {
runTest("analysis/low-level-api-fir/testData/sessionInvalidation/rhombusInvalidateL2.kt");
}
}
@@ -26,6 +26,11 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.resolve.AbstractScriptWho
import org.jetbrains.kotlin.analysis.low.level.api.fir.resolve.AbstractSourceLazyDeclarationResolveScopeBasedTest
import org.jetbrains.kotlin.analysis.low.level.api.fir.resolve.AbstractSourceWholeFileResolvePhaseTest
import org.jetbrains.kotlin.analysis.low.level.api.fir.resolve.extensions.AbstractResolveExtensionDisposalAfterModificationEventTest
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.AbstractGlobalModuleStateModificationSessionInvalidationTest
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.AbstractGlobalSourceModuleStateModificationSessionInvalidationTest
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.AbstractGlobalSourceOutOfBlockModificationSessionInvalidationTest
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.AbstractModuleOutOfBlockModificationSessionInvalidationTest
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.AbstractModuleStateModificationSessionInvalidationTest
import org.jetbrains.kotlin.generators.TestGroup
import org.jetbrains.kotlin.generators.TestGroupSuite
import org.jetbrains.kotlin.generators.util.TestGeneratorUtil
@@ -286,6 +291,26 @@ internal fun TestGroupSuite.generateFirLowLevelApiTests() {
testClass<AbstractResolveExtensionDisposalAfterModificationEventTest> {
model("resolveExtensionDisposal")
}
testClass<AbstractModuleStateModificationSessionInvalidationTest> {
model("sessionInvalidation")
}
testClass<AbstractModuleOutOfBlockModificationSessionInvalidationTest> {
model("sessionInvalidation")
}
testClass<AbstractGlobalModuleStateModificationSessionInvalidationTest> {
model("sessionInvalidation")
}
testClass<AbstractGlobalSourceModuleStateModificationSessionInvalidationTest> {
model("sessionInvalidation")
}
testClass<AbstractGlobalSourceOutOfBlockModificationSessionInvalidationTest> {
model("sessionInvalidation")
}
}
testGroup("analysis/low-level-api-fir/tests", "analysis/analysis-api/testData") {