Mpp tests: allow to test java code in highlighting and quickfix tests
This commit is contained in:
committed by
Pavel V. Talanov
parent
0157d7bd5d
commit
9e493d8b73
+1
-1
@@ -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)!!
|
||||
|
||||
+12
-1
@@ -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")
|
||||
}
|
||||
|
||||
+12
-1
@@ -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")
|
||||
}
|
||||
|
||||
+12
-5
@@ -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") }
|
||||
+1
-1
@@ -32,6 +32,6 @@ abstract class AbstractMultiModuleLineMarkerTest : AbstractMultiModuleHighlighti
|
||||
|
||||
protected fun doTest(path: String) {
|
||||
setupMppProjectFromDirStructure(File(path))
|
||||
checkHighlightingInAllFiles()
|
||||
checkHighlightingInProject()
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -28,6 +28,6 @@ class Java8MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() {
|
||||
|
||||
module1.addDependency(module2)
|
||||
|
||||
checkHighlightingInAllFiles()
|
||||
checkHighlightingInProject()
|
||||
}
|
||||
}
|
||||
|
||||
+9
-10
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
+14
-11
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user