[FIR IDE] Add basic compiler-side Import Optimizer tests
These tests are not complete, but it is intentional - it is just a basic setup, so when the need arise, the tests can be added right away
This commit is contained in:
+5
-4
@@ -7,10 +7,7 @@ package org.jetbrains.kotlin.generators.tests.frontend.api
|
||||
|
||||
import org.jetbrains.kotlin.generators.util.TestGeneratorUtil
|
||||
import org.jetbrains.kotlin.idea.fir.frontend.api.AbstractReferenceResolveTest
|
||||
import org.jetbrains.kotlin.idea.fir.frontend.api.components.AbstractExpectedExpressionTypeTest
|
||||
import org.jetbrains.kotlin.idea.fir.frontend.api.components.AbstractHLExpressionTypeTest
|
||||
import org.jetbrains.kotlin.idea.fir.frontend.api.components.AbstractOverriddenDeclarationProviderTest
|
||||
import org.jetbrains.kotlin.idea.fir.frontend.api.components.AbstractRendererTest
|
||||
import org.jetbrains.kotlin.idea.fir.frontend.api.components.*
|
||||
import org.jetbrains.kotlin.idea.fir.frontend.api.fir.AbstractResolveCallTest
|
||||
import org.jetbrains.kotlin.idea.fir.frontend.api.scopes.AbstractFileScopeTest
|
||||
import org.jetbrains.kotlin.idea.fir.frontend.api.scopes.AbstractMemberScopeByFqNameTest
|
||||
@@ -81,6 +78,10 @@ fun main(args: Array<String>) {
|
||||
testClass<AbstractReferenceResolveTest> {
|
||||
model("referenceResolve", pattern = TestGeneratorUtil.KT_WITHOUT_DOTS_IN_NAME)
|
||||
}
|
||||
|
||||
testClass<AbstractHLImportOptimizerTest> {
|
||||
model("components/importOptimizer", pattern = TestGeneratorUtil.KT_WITHOUT_DOTS_IN_NAME)
|
||||
}
|
||||
}
|
||||
|
||||
testGroup("idea/idea-frontend-fir/idea-fir-low-level-api/tests", "compiler/fir/raw-fir/psi2fir/testData") {
|
||||
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
dependency.bar
|
||||
dependency.foo
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
// FILE: main.kt
|
||||
package test
|
||||
|
||||
import dependency.foo
|
||||
import dependency.bar
|
||||
|
||||
fun usage() {}
|
||||
|
||||
// FILE: dependency.kt
|
||||
package dependency
|
||||
|
||||
fun foo() {}
|
||||
|
||||
fun bar() {}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
// FILE: main.kt
|
||||
package test
|
||||
|
||||
import dependency.foo
|
||||
|
||||
fun usage() {
|
||||
foo()
|
||||
}
|
||||
|
||||
// FILE: dependency.kt
|
||||
package dependency
|
||||
|
||||
fun foo() {}
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright 2010-2021 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.idea.fir.frontend.api.components
|
||||
|
||||
import org.jetbrains.kotlin.idea.fir.frontend.api.test.framework.AbstractHLApiSingleModuleTest
|
||||
import org.jetbrains.kotlin.idea.frontend.api.analyse
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.test.model.TestModule
|
||||
import org.jetbrains.kotlin.test.services.TestServices
|
||||
import org.jetbrains.kotlin.test.services.assertions
|
||||
|
||||
abstract class AbstractHLImportOptimizerTest : AbstractHLApiSingleModuleTest() {
|
||||
override fun doTestByFileStructure(ktFiles: List<KtFile>, module: TestModule, testServices: TestServices) {
|
||||
val mainKtFile = ktFiles.singleOrNull() ?: ktFiles.first { it.name == "main.kt" }
|
||||
val unusedImports = analyse(mainKtFile) { analyseImports(mainKtFile).unusedImports }
|
||||
|
||||
val unusedImportPaths = unusedImports
|
||||
.map { it.importPath ?: error("Import $it should have an import path, instead was ${it.text}") }
|
||||
.sortedBy { it.toString() } // for stable results
|
||||
|
||||
val actualUnusedImports = buildString {
|
||||
unusedImportPaths.forEach(::appendLine)
|
||||
}
|
||||
|
||||
val expectedUnusedImports = testDataFileSibling(".imports")
|
||||
|
||||
testServices.assertions.assertEqualsToFile(expectedUnusedImports, actualUnusedImports)
|
||||
}
|
||||
}
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
* Copyright 2010-2021 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.idea.fir.frontend.api.components;
|
||||
|
||||
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 GenerateNewCompilerTests.kt}. DO NOT MODIFY MANUALLY */
|
||||
@SuppressWarnings("all")
|
||||
@TestMetadata("idea/idea-frontend-fir/testData/components/importOptimizer")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
public class HLImportOptimizerTestGenerated extends AbstractHLImportOptimizerTest {
|
||||
@Test
|
||||
public void testAllFilesPresentInImportOptimizer() throws Exception {
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("idea/idea-frontend-fir/testData/components/importOptimizer"), Pattern.compile("^([^.]+)\\.kt$"), null, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("unusedFunctionImports.kt")
|
||||
public void testUnusedFunctionImports() throws Exception {
|
||||
runTest("idea/idea-frontend-fir/testData/components/importOptimizer/unusedFunctionImports.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("usedFunctionImport.kt")
|
||||
public void testUsedFunctionImport() throws Exception {
|
||||
runTest("idea/idea-frontend-fir/testData/components/importOptimizer/usedFunctionImport.kt");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user