Mpp tests: allow to test java code in highlighting and quickfix tests

This commit is contained in:
Pavel V. Talanov
2018-04-27 15:53:34 +02:00
committed by Pavel V. Talanov
parent 0157d7bd5d
commit 9e493d8b73
10 changed files with 72 additions and 39 deletions
@@ -22,7 +22,7 @@ import java.io.File
abstract class AbstractMultiPlatformCompletionTest : AbstractMultiModuleTest() {
protected fun doTest(testPath: String) {
setupMppProjectFromDirStructure(File(testPath))
val file = project.findFileWithCaret()
val file = project.findFileWithCaret() as KtFile
val doc = PsiDocumentManager.getInstance(myProject).getDocument(file)!!
val offset = doc.extractMarkerOffset(project)
val editor = EditorFactory.getInstance().createEditor(doc, myProject)!!
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.idea.test
import com.intellij.codeInsight.CodeInsightTestCase
import com.intellij.codeInsight.daemon.impl.EditorTracker
import com.intellij.ide.highlighter.JavaFileType
import com.intellij.ide.startup.impl.StartupManagerImpl
import com.intellij.openapi.actionSystem.ActionPlaces
import com.intellij.openapi.actionSystem.AnActionEvent
@@ -22,6 +23,7 @@ import com.intellij.openapi.util.io.FileUtil
import com.intellij.openapi.util.text.StringUtil
import com.intellij.openapi.vfs.VfsUtilCore
import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess
import com.intellij.psi.PsiJavaFile
import com.intellij.psi.PsiManager
import com.intellij.psi.search.FileTypeIndex
import com.intellij.psi.search.ProjectScope
@@ -226,5 +228,14 @@ fun Project.allKotlinFiles(): List<KtFile> {
.filterIsInstance<KtFile>()
}
fun Project.allJavaFiles(): List<PsiJavaFile> {
val virtualFiles = FileTypeIndex.getFiles(JavaFileType.INSTANCE, ProjectScope.getProjectScope(this))
return virtualFiles
.map { PsiManager.getInstance(this).findFile(it) }
.filterIsInstance<PsiJavaFile>()
}
fun Project.findFileWithCaret() =
allKotlinFiles().single { "<caret>" in VfsUtilCore.loadText(it.virtualFile) }
(allKotlinFiles() + allJavaFiles()).single {
"<caret>" in VfsUtilCore.loadText(it.virtualFile) && !it.virtualFile.name.endsWith(".after")
}
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.idea.test
import com.intellij.codeInsight.CodeInsightTestCase
import com.intellij.codeInsight.daemon.impl.EditorTracker
import com.intellij.ide.highlighter.JavaFileType
import com.intellij.ide.startup.impl.StartupManagerImpl
import com.intellij.openapi.actionSystem.ActionPlaces
import com.intellij.openapi.actionSystem.AnActionEvent
@@ -22,6 +23,7 @@ import com.intellij.openapi.util.io.FileUtil
import com.intellij.openapi.util.text.StringUtil
import com.intellij.openapi.vfs.VfsUtilCore
import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess
import com.intellij.psi.PsiJavaFile
import com.intellij.psi.PsiManager
import com.intellij.psi.search.FileTypeIndex
import com.intellij.psi.search.ProjectScope
@@ -227,5 +229,14 @@ fun Project.allKotlinFiles(): List<KtFile> {
.filterIsInstance<KtFile>()
}
fun Project.allJavaFiles(): List<PsiJavaFile> {
val virtualFiles = FileTypeIndex.getFiles(JavaFileType.INSTANCE, ProjectScope.getProjectScope(this))
return virtualFiles
.map { PsiManager.getInstance(this).findFile(it) }
.filterIsInstance<PsiJavaFile>()
}
fun Project.findFileWithCaret() =
allKotlinFiles().single { "<caret>" in VfsUtilCore.loadText(it.virtualFile) }
(allKotlinFiles() + allJavaFiles()).single {
"<caret>" in VfsUtilCore.loadText(it.virtualFile) && !it.virtualFile.name.endsWith(".after")
}
@@ -16,17 +16,20 @@
package org.jetbrains.kotlin.idea.caches.resolve
import com.intellij.psi.PsiFile
import org.jetbrains.kotlin.idea.multiplatform.setupMppProjectFromDirStructure
import org.jetbrains.kotlin.idea.stubs.AbstractMultiHighlightingTest
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
import org.jetbrains.kotlin.idea.test.allJavaFiles
import org.jetbrains.kotlin.idea.test.allKotlinFiles
import java.io.File
abstract class AbstractMultiModuleHighlightingTest : AbstractMultiHighlightingTest() {
protected open fun checkHighlightingInAllFiles(
shouldCheckFile: () -> Boolean = { !file.text.contains("// !CHECK_HIGHLIGHTING") }
protected open fun checkHighlightingInProject(
findFiles: () -> List<PsiFile> = { project.allKotlinFiles().excludeByDirective() }
) {
checkFiles(shouldCheckFile) {
checkFiles(findFiles) {
checkHighlighting(myEditor, true, false)
}
}
@@ -36,8 +39,12 @@ abstract class AbstractMultiPlatformHighlightingTest : AbstractMultiModuleHighli
protected open fun doTest(path: String) {
setupMppProjectFromDirStructure(File(path))
checkHighlightingInAllFiles()
checkHighlightingInProject {
(project.allKotlinFiles() + project.allJavaFiles()).excludeByDirective()
}
}
override fun getTestDataPath() = "${PluginTestCaseBase.getTestDataPathBase()}/multiModuleHighlighting/multiplatform/"
}
}
private fun List<PsiFile>.excludeByDirective() = filter { !it.text.contains("// !CHECK_HIGHLIGHTING") }
@@ -32,6 +32,6 @@ abstract class AbstractMultiModuleLineMarkerTest : AbstractMultiModuleHighlighti
protected fun doTest(path: String) {
setupMppProjectFromDirStructure(File(path))
checkHighlightingInAllFiles()
checkHighlightingInProject()
}
}
@@ -28,6 +28,6 @@ class Java8MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() {
module1.addDependency(module2)
checkHighlightingInAllFiles()
checkHighlightingInProject()
}
}
@@ -17,7 +17,6 @@
package org.jetbrains.kotlin.idea.caches.resolve
import com.intellij.openapi.module.Module
import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.MockLibraryUtil
@@ -30,7 +29,7 @@ class Java9MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() {
fun testSimpleModuleExportsPackage() {
module("main").addDependency(module("dependency"))
checkHighlightingInAllFiles()
checkHighlightingInProject()
}
fun testSimpleLibraryExportsPackage() {
@@ -42,22 +41,22 @@ class Java9MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() {
)
module("main").addLibrary(library, "library")
checkHighlightingInAllFiles()
checkHighlightingInProject()
}
fun testNamedDependsOnUnnamed() {
module("main").addDependency(module("dependency"))
checkHighlightingInAllFiles()
checkHighlightingInProject()
}
fun testUnnamedDependsOnNamed() {
module("main").addDependency(module("dependency"))
checkHighlightingInAllFiles()
checkHighlightingInProject()
}
fun testDeclarationKinds() {
module("main").addDependency(module("dependency"))
checkHighlightingInAllFiles()
checkHighlightingInProject()
}
fun testExportsTo() {
@@ -65,17 +64,17 @@ class Java9MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() {
module("first").addDependency(d)
module("second").addDependency(d)
module("unnamed").addDependency(d)
checkHighlightingInAllFiles()
checkHighlightingInProject()
}
fun testExportedPackageIsInaccessibleWithoutRequires() {
module("main").addDependency(module("dependency"))
checkHighlightingInAllFiles()
checkHighlightingInProject()
}
fun testTypealiasToUnexported() {
module("main").addDependency(module("dependency"))
checkHighlightingInAllFiles()
checkHighlightingInProject()
}
fun testCyclicDependency() {
@@ -83,6 +82,6 @@ class Java9MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() {
val b = module("moduleB")
val c = module("moduleC")
module("main").addDependency(a).addDependency(b).addDependency(c)
checkHighlightingInAllFiles()
checkHighlightingInProject()
}
}
@@ -40,6 +40,7 @@ import org.jetbrains.kotlin.idea.framework.JSLibraryKind
import org.jetbrains.kotlin.idea.project.KotlinCodeBlockModificationListener
import org.jetbrains.kotlin.idea.project.KotlinModuleModificationTracker
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
import org.jetbrains.kotlin.idea.test.allKotlinFiles
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
import org.jetbrains.kotlin.idea.util.application.runWriteAction
import org.jetbrains.kotlin.idea.util.projectStructure.sdk
@@ -57,7 +58,7 @@ open class MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() {
module2.addDependency(module1)
checkHighlightingInAllFiles()
checkHighlightingInProject()
}
fun testDependency() {
@@ -76,7 +77,7 @@ open class MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() {
module4.addDependency(module2)
module4.addDependency(module3)
checkHighlightingInAllFiles()
checkHighlightingInProject()
}
fun testLazyResolvers() {
@@ -94,7 +95,7 @@ open class MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() {
assertTrue(module2 !in tracker.moduleResolversComputed)
assertTrue(module3 !in tracker.moduleResolversComputed)
checkHighlightingInAllFiles { "m3" in file.name }
checkHighlightingInProject { project.allKotlinFiles().filter { "m3" in it.name } }
assertTrue(module1 in tracker.moduleResolversComputed)
assertTrue(module2 !in tracker.moduleResolversComputed)
@@ -129,7 +130,7 @@ open class MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() {
assertEquals(0, tracker.sdkResolversComputed.size)
checkHighlightingInAllFiles { "m2" in file.name }
checkHighlightingInProject { project.allKotlinFiles().filter { "m2" in it.name } }
assertEquals(2, tracker.moduleResolversComputed.size)
@@ -156,14 +157,14 @@ open class MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() {
assertEquals(currentModCount, module2ModTracker.modificationCount)
assertEquals(currentModCount, module3ModTracker.modificationCount)
checkHighlightingInAllFiles { "m2" in file.name }
checkHighlightingInProject { project.allKotlinFiles().filter { "m2" in it.name } }
assertEquals(0, tracker.sdkResolversComputed.size)
assertEquals(1, tracker.moduleResolversComputed.size)
tracker.moduleResolversComputed.clear()
(PsiModificationTracker.SERVICE.getInstance(myProject) as PsiModificationTrackerImpl).incOutOfCodeBlockModificationCounter()
checkHighlightingInAllFiles { "m2" in file.name }
checkHighlightingInProject { project.allKotlinFiles().filter { "m2" in it.name } }
assertEquals(0, tracker.sdkResolversComputed.size)
assertEquals(2, tracker.moduleResolversComputed.size)
}
@@ -178,7 +179,7 @@ open class MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() {
module3.addDependency(module2, dependencyScope = DependencyScope.TEST)
module2.addDependency(module1, dependencyScope = DependencyScope.COMPILE)
checkHighlightingInAllFiles()
checkHighlightingInProject()
}
fun testLanguageVersionsViaFacets() {
@@ -192,7 +193,7 @@ open class MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() {
m1.addDependency(m2)
m2.addDependency(m1)
checkHighlightingInAllFiles()
checkHighlightingInProject()
}
fun testSamWithReceiverExtension() {
@@ -210,7 +211,7 @@ open class MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() {
module1.addDependency(module2)
module2.addDependency(module1)
checkHighlightingInAllFiles()
checkHighlightingInProject()
}
fun testJvmExperimentalLibrary() {
@@ -221,8 +222,9 @@ open class MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() {
"-Xexperimental=lib.ExperimentalAPI"
)
)
module("usage").addLibrary(lib)
checkHighlightingInAllFiles()
checkHighlightingInProject()
}
fun testJsExperimentalLibrary() {
@@ -233,8 +235,9 @@ open class MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() {
"-Xexperimental=lib.ExperimentalAPI"
)
)
module("usage").addLibrary(lib, kind = JSLibraryKind)
checkHighlightingInAllFiles()
checkHighlightingInProject()
}
private fun Module.setupKotlinFacet(configure: KotlinFacetConfiguration.() -> Unit) = apply {
@@ -20,6 +20,7 @@ import com.intellij.ide.util.gotoByName.GotoSymbolModel2
import com.intellij.openapi.module.StdModuleTypes
import org.jetbrains.kotlin.idea.stubs.AbstractMultiModuleTest
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
import org.jetbrains.kotlin.idea.test.allKotlinFiles
import org.jetbrains.kotlin.test.MockLibraryUtil
import org.jetbrains.kotlin.test.util.addDependency
import org.jetbrains.kotlin.test.util.jarRoot
@@ -63,7 +64,7 @@ class GotoWithMultipleLibrariesTest : AbstractMultiModuleTest() {
module("m${++i}", srcPath).addDependency(projectLibrary("libB", jarRoot, jarRoot.findChild("src")!!))
}
checkFiles {
checkFiles({ project.allKotlinFiles() }) {
GotoCheck.checkGotoDirectives(GotoSymbolModel2(project), editor, nonProjectSymbols = true, checkNavigation = true)
}
}
@@ -21,6 +21,7 @@ import com.intellij.openapi.util.io.FileUtil
import com.intellij.openapi.vfs.LocalFileSystem
import com.intellij.openapi.vfs.VfsUtil
import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess
import com.intellij.psi.PsiFile
import com.intellij.testFramework.PsiTestUtil
import org.jetbrains.kotlin.config.CompilerSettings
import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider
@@ -31,7 +32,6 @@ import org.jetbrains.kotlin.idea.facet.initializeIfNeeded
import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil
import org.jetbrains.kotlin.idea.test.KotlinJdkAndLibraryProjectDescriptor
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
import org.jetbrains.kotlin.idea.test.allKotlinFiles
import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.TestJdkKind
import org.junit.Assert
@@ -111,14 +111,15 @@ abstract class AbstractMultiModuleTest : DaemonAnalyzerTestCase() {
facetSettings.coroutineSupport = LanguageFeature.State.ENABLED
}
protected fun checkFiles(shouldCheckFile: () -> Boolean = { true }, check: () -> Unit) {
protected fun checkFiles(
findFiles: () -> List<PsiFile>,
check: () -> Unit
) {
var atLeastOneFile = false
myProject.allKotlinFiles().forEach { file ->
findFiles().forEach { file ->
configureByExistingFile(file.virtualFile!!)
if (shouldCheckFile()) {
atLeastOneFile = true
check()
}
atLeastOneFile = true
check()
}
Assert.assertTrue(atLeastOneFile)
}