Line marker tests for header <----> impl

This commit is contained in:
Mikhail Glukhikh
2016-12-15 15:44:22 +03:00
parent 84ebca06bc
commit 8f57869fc5
9 changed files with 151 additions and 18 deletions
@@ -0,0 +1,4 @@
header class <lineMarker>Header</lineMarker> {
}
@@ -0,0 +1,2 @@
impl typealias <lineMarker>Header</lineMarker> = String
@@ -0,0 +1,7 @@
header class <lineMarker>Header</lineMarker> {
fun foo(): Int
}
header fun <lineMarker>foo</lineMarker>(arg: Int): String
header val <lineMarker>flag</lineMarker>: Boolean
@@ -0,0 +1,11 @@
// !CHECK_HIGHLIGHTING
impl class Header {
impl fun foo() = 42
}
impl fun foo(arg: Int) = arg.toString()
impl val flag = true
@@ -0,0 +1,9 @@
// !CHECK_HIGHLIGHTING
header class Header {
fun foo(): Int
}
header fun foo(arg: Int): String
header val flag: Boolean
@@ -0,0 +1,9 @@
impl class <lineMarker>Header</lineMarker> {
impl fun foo() = 42
}
impl fun <lineMarker>foo</lineMarker>(arg: Int) = arg.toString()
impl val <lineMarker>flag</lineMarker> = true
@@ -16,43 +16,47 @@
package org.jetbrains.kotlin.idea.caches.resolve
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
import com.intellij.openapi.module.StdModuleTypes
import com.intellij.openapi.roots.ModuleRootModificationUtil
import org.jetbrains.kotlin.idea.project.PluginJetFilesProvider
import com.intellij.codeInsight.daemon.DaemonAnalyzerTestCase
import com.intellij.openapi.application.WriteAction
import com.intellij.openapi.module.Module
import com.intellij.openapi.vfs.LocalFileSystem
import com.intellij.openapi.command.WriteCommandAction
import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProviderImpl
import com.intellij.testFramework.PsiTestUtil
import java.io.File
import com.intellij.openapi.util.io.FileUtil
import com.intellij.openapi.module.Module
import com.intellij.openapi.module.StdModuleTypes
import com.intellij.openapi.roots.DependencyScope
import com.intellij.openapi.roots.ModuleRootModificationUtil
import com.intellij.openapi.util.io.FileUtil
import com.intellij.openapi.vfs.LocalFileSystem
import com.intellij.testFramework.PsiTestUtil
import com.sampullara.cli.Argument
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.config.CompilerSettings
import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider
import org.jetbrains.kotlin.config.TargetPlatformKind
import org.jetbrains.kotlin.idea.facet.getOrCreateFacet
import org.jetbrains.kotlin.idea.project.PluginJetFilesProvider
import org.jetbrains.kotlin.idea.stubs.AbstractMultiHighlightingTest
import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
import org.junit.Assert
import java.io.File
abstract class AbstractMultiModuleHighlightingTest : DaemonAnalyzerTestCase() {
abstract class AbstractMultiModuleHighlightingTest : AbstractMultiHighlightingTest() {
private val TEST_DATA_PATH = PluginTestCaseBase.getTestDataPathBase() + "/multiModuleHighlighting/"
protected open val testPath = PluginTestCaseBase.getTestDataPathBase() + "/multiModuleHighlighting/"
protected fun checkHighlightingInAllFiles() {
var atLeastOneFile = false
PluginJetFilesProvider.allFilesInProject(myProject!!).forEach { file ->
atLeastOneFile = true
configureByExistingFile(file.virtualFile!!)
checkHighlighting(myEditor, true, false)
if (!file.text.contains("// !CHECK_HIGHLIGHTING")) {
atLeastOneFile = true
configureByExistingFile(file.virtualFile!!)
checkHighlighting(myEditor, true, false)
}
}
Assert.assertTrue(atLeastOneFile)
}
protected fun module(name: String, hasTestRoot: Boolean = false, useFullJdk: Boolean = false): Module {
val srcDir = TEST_DATA_PATH + "${getTestName(true)}/$name"
val srcDir = testPath + "${getTestName(true)}/$name"
val moduleWithSrcRootSet = createModuleFromTestData(srcDir, name, StdModuleTypes.JAVA, true)!!
if (hasTestRoot) {
setTestRoot(moduleWithSrcRootSet, name)
@@ -65,7 +69,7 @@ abstract class AbstractMultiModuleHighlightingTest : DaemonAnalyzerTestCase() {
}
protected fun setTestRoot(module: Module, name: String) {
val testDir = TEST_DATA_PATH + "${getTestName(true)}/${name}Test"
val testDir = testPath + "${getTestName(true)}/${name}Test"
val testRootDirInTestData = File(testDir)
val testRootDir = createTempDirectory()!!
FileUtil.copyDir(testRootDirInTestData, testRootDir)
@@ -0,0 +1,30 @@
/*
* Copyright 2010-2016 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.idea.caches.resolve
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
abstract class AbstractMultiModuleLineMarkerTest : AbstractMultiModuleHighlightingTest() {
override val testPath = PluginTestCaseBase.getTestDataPathBase() + "/multiModuleLineMarker/"
override val shouldCheckLineMarkers = true
override val shouldCheckResult = false
override fun doTestLineMarkers() = true
}
@@ -0,0 +1,57 @@
/*
* Copyright 2010-2016 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.idea.caches.resolve
import org.jetbrains.kotlin.config.TargetPlatformKind
class MultiModuleLineMarkerTest : AbstractMultiModuleLineMarkerTest() {
fun testFromCommonToJvmHeader() {
val header = module("header")
header.setPlatformKind(TargetPlatformKind.Default)
val jvm = module("jvm")
jvm.setPlatformKind(TargetPlatformKind.Jvm.JVM_1_6)
jvm.enableMultiPlatform()
jvm.addDependency(header)
checkHighlightingInAllFiles()
}
fun testFromCommonToJvmImpl() {
val header = module("header")
header.setPlatformKind(TargetPlatformKind.Default)
val jvm = module("jvm")
jvm.setPlatformKind(TargetPlatformKind.Jvm.JVM_1_6)
jvm.enableMultiPlatform()
jvm.addDependency(header)
checkHighlightingInAllFiles()
}
fun testFromClassToAlias() {
val header = module("header")
header.setPlatformKind(TargetPlatformKind.Default)
val jvm = module("jvm")
jvm.setPlatformKind(TargetPlatformKind.Jvm.JVM_1_6)
jvm.enableMultiPlatform()
jvm.addDependency(header)
checkHighlightingInAllFiles()
}
}