[LL FIR] ClassId: add more tests
^KTIJ-26848 ^KTIJ-26896 ^KTIJ-26902
This commit is contained in:
committed by
Space Team
parent
f51b7faa1b
commit
2421d3cdf1
@@ -24,3 +24,5 @@
|
||||
foo {
|
||||
/* ClassId: null */class E
|
||||
}
|
||||
|
||||
// IGNORE_CONSISTENCY_CHECK: KTIJ-26902
|
||||
@@ -1,3 +1,4 @@
|
||||
// IGNORE_CONSISTENCY_CHECK: KTIJ-26902
|
||||
package one.two
|
||||
|
||||
/* ClassId: one/two/TopLevelObject */object TopLevelObject
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package one
|
||||
|
||||
/* ClassId: one/MyEnum */enum class MyEnum {
|
||||
;
|
||||
|
||||
/* ClassId: one/MyEnum.InsideEnum */class InsideEnum
|
||||
/* ClassId: one/MyEnum.ObjectInsideEnum */object ObjectInsideEnum {
|
||||
/* ClassId: one/MyEnum.ObjectInsideEnum.Nested */typealias Nested
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package one
|
||||
|
||||
/* ClassId: one/MyEnum */enum class MyEnum {
|
||||
;
|
||||
|
||||
/* ClassId: one/MyEnum.InsideEnum */class InsideEnum
|
||||
/* ClassId: one/MyEnum.ObjectInsideEnum */object ObjectInsideEnum {
|
||||
/* ClassId: one/MyEnum.ObjectInsideEnum.Nested */typealias Nested
|
||||
}
|
||||
}
|
||||
|
||||
// IGNORE_CONSISTENCY_CHECK: KTIJ-26902
|
||||
@@ -0,0 +1,14 @@
|
||||
package one
|
||||
|
||||
/* ClassId: one/MyEnum */enum class MyEnum {
|
||||
/* ClassId: null */Entry {
|
||||
fun foo() = Unit
|
||||
/* ClassId: null */class ClassInsideEntry
|
||||
},
|
||||
/* ClassId: null */Entry2,
|
||||
/* ClassId: null */Entry3 {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// IGNORE_CONSISTENCY_CHECK: KtEnumEntry have FqName, but doesn't have ClassId
|
||||
@@ -0,0 +1,14 @@
|
||||
package one
|
||||
|
||||
/* ClassId: one/MyEnum */enum class MyEnum {
|
||||
/* ClassId: null */Entry {
|
||||
fun foo() = Unit
|
||||
/* ClassId: null */class ClassInsideEntry
|
||||
},
|
||||
/* ClassId: null */Entry2,
|
||||
/* ClassId: null */Entry3 {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// IGNORE_CONSISTENCY_CHECK: KtEnumEntry have FqName, but doesn't have ClassId
|
||||
@@ -0,0 +1,19 @@
|
||||
package one.two
|
||||
|
||||
/* ClassId: one/two/<no name provided> */class
|
||||
/* ClassId: one/two/<no name provided> */object
|
||||
/* ClassId: one/two/<no name provided> */typealias
|
||||
|
||||
/* ClassId: one/two/A */class A {
|
||||
/* ClassId: one/two/A.<no name provided> */class
|
||||
/* ClassId: one/two/A.<no name provided> */object
|
||||
/* ClassId: one/two/A.<no name provided> */typealias
|
||||
}
|
||||
|
||||
/* ClassId: one/two/B */object B {
|
||||
/* ClassId: one/two/B.<no name provided> */class
|
||||
/* ClassId: one/two/B.<no name provided> */object
|
||||
/* ClassId: one/two/B.<no name provided> */typealias
|
||||
}
|
||||
|
||||
// IGNORE_CONSISTENCY_CHECK: KTIJ-26848
|
||||
@@ -0,0 +1,18 @@
|
||||
// IGNORE_CONSISTENCY_CHECK: KTIJ-26902
|
||||
package one.two
|
||||
|
||||
/* ClassId: one/two/<no name provided> */class
|
||||
/* ClassId: one/two/<no name provided> */object
|
||||
/* ClassId: one/two/<no name provided> */typealias
|
||||
|
||||
/* ClassId: one/two/A */class A {
|
||||
/* ClassId: one/two/A.<no name provided> */class
|
||||
/* ClassId: one/two/A.<no name provided> */object
|
||||
/* ClassId: one/two/A.<no name provided> */typealias
|
||||
}
|
||||
|
||||
/* ClassId: one/two/B */object B {
|
||||
/* ClassId: one/two/B.<no name provided> */class
|
||||
/* ClassId: one/two/B.<no name provided> */object
|
||||
/* ClassId: one/two/B.<no name provided> */typealias
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package one.two
|
||||
|
||||
/* ClassId: one/two/<no name provided> */class {
|
||||
/* ClassId: one/two/<no name provided>.<no name provided> */class
|
||||
/* ClassId: one/two/<no name provided>.<no name provided> */object
|
||||
/* ClassId: one/two/<no name provided>.<no name provided> */typealias
|
||||
}
|
||||
|
||||
/* ClassId: one/two/<no name provided> */object {
|
||||
/* ClassId: one/two/<no name provided>.<no name provided> */class
|
||||
/* ClassId: one/two/<no name provided>.<no name provided> */object
|
||||
/* ClassId: one/two/<no name provided>.<no name provided> */typealias
|
||||
}
|
||||
|
||||
// IGNORE_CONSISTENCY_CHECK: KTIJ-26896
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
package one.two
|
||||
|
||||
/* ClassId: one/two/<no name provided> */class {
|
||||
/* ClassId: one/two/<no name provided>.<no name provided> */class
|
||||
/* ClassId: one/two/<no name provided>.<no name provided> */object
|
||||
/* ClassId: one/two/<no name provided>.<no name provided> */typealias
|
||||
}
|
||||
|
||||
/* ClassId: null */object {
|
||||
/* ClassId: null */class
|
||||
/* ClassId: null */object
|
||||
/* ClassId: null */typealias
|
||||
}
|
||||
|
||||
// IGNORE_CONSISTENCY_CHECK: KTIJ-26896
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
* 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 org.jetbrains.kotlin.analysis.low.level.api.fir.AbstractClassIdConsistencyTest.Directives.IGNORE_CONSISTENCY_CHECK
|
||||
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.analysis.test.framework.utils.ignoreExceptionIfIgnoreDirectivePresent
|
||||
import org.jetbrains.kotlin.psi.KtClassLikeDeclaration
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.psi.psiUtil.forEachDescendantOfType
|
||||
import org.jetbrains.kotlin.psi.psiUtil.safeFqNameForLazyResolve
|
||||
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
||||
import org.jetbrains.kotlin.test.directives.model.SimpleDirectivesContainer
|
||||
import org.jetbrains.kotlin.test.services.TestModuleStructure
|
||||
import org.jetbrains.kotlin.test.services.TestServices
|
||||
import org.jetbrains.kotlin.test.services.assertions
|
||||
|
||||
abstract class AbstractClassIdConsistencyTest : AbstractLowLevelApiSingleFileTest() {
|
||||
override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) {
|
||||
moduleStructure.allDirectives.ignoreExceptionIfIgnoreDirectivePresent(IGNORE_CONSISTENCY_CHECK) {
|
||||
ktFile.forEachDescendantOfType<KtClassLikeDeclaration> { declaration ->
|
||||
val classId = declaration.getClassId()
|
||||
val fqName = declaration.safeFqNameForLazyResolve()
|
||||
testServices.assertions.assertEquals(fqName, classId?.asSingleFqName())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private object Directives : SimpleDirectivesContainer() {
|
||||
val IGNORE_CONSISTENCY_CHECK by stringDirective("Temporary disable test until the issue is fixed")
|
||||
}
|
||||
|
||||
override fun configureTest(builder: TestConfigurationBuilder) {
|
||||
super.configureTest(builder)
|
||||
builder.useDirectives(Directives)
|
||||
}
|
||||
}
|
||||
|
||||
abstract class AbstractSourceClassIdConsistencyTest : AbstractClassIdConsistencyTest() {
|
||||
override val configurator: AnalysisApiTestConfigurator = AnalysisApiFirSourceTestConfigurator(analyseInDependentSession = false)
|
||||
}
|
||||
|
||||
abstract class AbstractScriptClassIdConsistencyTest : AbstractClassIdConsistencyTest() {
|
||||
override val configurator: AnalysisApiTestConfigurator = AnalysisApiFirScriptTestConfigurator(analyseInDependentSession = false)
|
||||
}
|
||||
+8
-1
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLeve
|
||||
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.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.psi.KtClassLikeDeclaration
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.test.services.TestModuleStructure
|
||||
@@ -35,7 +36,13 @@ abstract class AbstractClassIdTest : AbstractLowLevelApiSingleFileTest() {
|
||||
element.acceptChildren(this)
|
||||
}
|
||||
|
||||
override fun visitComment(comment: PsiComment) {}
|
||||
override fun visitComment(comment: PsiComment) {
|
||||
if (comment.tokenType == KtTokens.BLOCK_COMMENT) {
|
||||
return
|
||||
}
|
||||
|
||||
super.visitComment(comment)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
+62
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
* 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/classId")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
public class ScriptClassIdConsistencyTestGenerated extends AbstractScriptClassIdConsistencyTest {
|
||||
@Test
|
||||
public void testAllFilesPresentInClassId() throws Exception {
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/low-level-api-fir/testdata/classId"), Pattern.compile("^(.+)\\.(kts)$"), null, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("classWithMembers.kts")
|
||||
public void testClassWithMembers() throws Exception {
|
||||
runTest("analysis/low-level-api-fir/testdata/classId/classWithMembers.kts");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("classWithMembersWithPackage.kts")
|
||||
public void testClassWithMembersWithPackage() throws Exception {
|
||||
runTest("analysis/low-level-api-fir/testdata/classId/classWithMembersWithPackage.kts");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("enum.kts")
|
||||
public void testEnum() throws Exception {
|
||||
runTest("analysis/low-level-api-fir/testdata/classId/enum.kts");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("enumEntry.kts")
|
||||
public void testEnumEntry() throws Exception {
|
||||
runTest("analysis/low-level-api-fir/testdata/classId/enumEntry.kts");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("namelessClasses.kts")
|
||||
public void testNamelessClasses() throws Exception {
|
||||
runTest("analysis/low-level-api-fir/testdata/classId/namelessClasses.kts");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("namelessInsideNamelessClasses.kts")
|
||||
public void testNamelessInsideNamelessClasses() throws Exception {
|
||||
runTest("analysis/low-level-api-fir/testdata/classId/namelessInsideNamelessClasses.kts");
|
||||
}
|
||||
}
|
||||
+24
@@ -35,4 +35,28 @@ public class ScriptClassIdTestGenerated extends AbstractScriptClassIdTest {
|
||||
public void testClassWithMembersWithPackage() throws Exception {
|
||||
runTest("analysis/low-level-api-fir/testdata/classId/classWithMembersWithPackage.kts");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("enum.kts")
|
||||
public void testEnum() throws Exception {
|
||||
runTest("analysis/low-level-api-fir/testdata/classId/enum.kts");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("enumEntry.kts")
|
||||
public void testEnumEntry() throws Exception {
|
||||
runTest("analysis/low-level-api-fir/testdata/classId/enumEntry.kts");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("namelessClasses.kts")
|
||||
public void testNamelessClasses() throws Exception {
|
||||
runTest("analysis/low-level-api-fir/testdata/classId/namelessClasses.kts");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("namelessInsideNamelessClasses.kts")
|
||||
public void testNamelessInsideNamelessClasses() throws Exception {
|
||||
runTest("analysis/low-level-api-fir/testdata/classId/namelessInsideNamelessClasses.kts");
|
||||
}
|
||||
}
|
||||
|
||||
+74
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
* 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/classId")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
public class SourceClassIdConsistencyTestGenerated extends AbstractSourceClassIdConsistencyTest {
|
||||
@Test
|
||||
public void testAllFilesPresentInClassId() throws Exception {
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/low-level-api-fir/testdata/classId"), Pattern.compile("^(.+)\\.(kt)$"), null, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("classWithMembers.kt")
|
||||
public void testClassWithMembers() throws Exception {
|
||||
runTest("analysis/low-level-api-fir/testdata/classId/classWithMembers.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("enum.kt")
|
||||
public void testEnum() throws Exception {
|
||||
runTest("analysis/low-level-api-fir/testdata/classId/enum.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("enumEntry.kt")
|
||||
public void testEnumEntry() throws Exception {
|
||||
runTest("analysis/low-level-api-fir/testdata/classId/enumEntry.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("localClassInsideFunctionLiteral.kt")
|
||||
public void testLocalClassInsideFunctionLiteral() throws Exception {
|
||||
runTest("analysis/low-level-api-fir/testdata/classId/localClassInsideFunctionLiteral.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("localClassInsideLambdaCallInsideStringTemplate.kt")
|
||||
public void testLocalClassInsideLambdaCallInsideStringTemplate() throws Exception {
|
||||
runTest("analysis/low-level-api-fir/testdata/classId/localClassInsideLambdaCallInsideStringTemplate.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("localClassInsideSuperEntryCall.kt")
|
||||
public void testLocalClassInsideSuperEntryCall() throws Exception {
|
||||
runTest("analysis/low-level-api-fir/testdata/classId/localClassInsideSuperEntryCall.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("namelessClasses.kt")
|
||||
public void testNamelessClasses() throws Exception {
|
||||
runTest("analysis/low-level-api-fir/testdata/classId/namelessClasses.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("namelessInsideNamelessClasses.kt")
|
||||
public void testNamelessInsideNamelessClasses() throws Exception {
|
||||
runTest("analysis/low-level-api-fir/testdata/classId/namelessInsideNamelessClasses.kt");
|
||||
}
|
||||
}
|
||||
+24
@@ -30,6 +30,18 @@ public class SourceClassIdTestGenerated extends AbstractSourceClassIdTest {
|
||||
runTest("analysis/low-level-api-fir/testdata/classId/classWithMembers.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("enum.kt")
|
||||
public void testEnum() throws Exception {
|
||||
runTest("analysis/low-level-api-fir/testdata/classId/enum.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("enumEntry.kt")
|
||||
public void testEnumEntry() throws Exception {
|
||||
runTest("analysis/low-level-api-fir/testdata/classId/enumEntry.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("localClassInsideFunctionLiteral.kt")
|
||||
public void testLocalClassInsideFunctionLiteral() throws Exception {
|
||||
@@ -47,4 +59,16 @@ public class SourceClassIdTestGenerated extends AbstractSourceClassIdTest {
|
||||
public void testLocalClassInsideSuperEntryCall() throws Exception {
|
||||
runTest("analysis/low-level-api-fir/testdata/classId/localClassInsideSuperEntryCall.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("namelessClasses.kt")
|
||||
public void testNamelessClasses() throws Exception {
|
||||
runTest("analysis/low-level-api-fir/testdata/classId/namelessClasses.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("namelessInsideNamelessClasses.kt")
|
||||
public void testNamelessInsideNamelessClasses() throws Exception {
|
||||
runTest("analysis/low-level-api-fir/testdata/classId/namelessInsideNamelessClasses.kt");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user