[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:
Roman Golyshev
2021-09-01 13:24:38 +03:00
committed by Space
parent d284ed1c79
commit 911bfcf150
7 changed files with 104 additions and 4 deletions
@@ -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") {
@@ -0,0 +1,2 @@
dependency.bar
dependency.foo
@@ -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() {}
@@ -0,0 +1,13 @@
// FILE: main.kt
package test
import dependency.foo
fun usage() {
foo()
}
// FILE: dependency.kt
package dependency
fun foo() {}
@@ -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)
}
}
@@ -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");
}
}