172: [Unneeded] Revert "AbstractNavigateToLibraryTest: fix for invalid files"

This reverts commit e71b1757be6ca4b9ef49d65c6250a94f5f724f53.
This commit is contained in:
Nikolay Krasko
2018-01-11 20:12:25 +03:00
parent 8eb40466ee
commit 0df179de3b
@@ -0,0 +1,131 @@
/*
* 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.decompiler.navigation
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile
import com.intellij.psi.impl.source.resolve.reference.impl.PsiMultiReference
import junit.framework.TestCase
import org.jetbrains.kotlin.idea.navigation.NavigationTestUtils
import org.jetbrains.kotlin.idea.references.KtReference
import org.jetbrains.kotlin.idea.test.*
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
import org.jetbrains.kotlin.test.KotlinTestUtils
import java.io.File
import java.util.*
abstract class AbstractNavigateToLibraryTest : KotlinCodeInsightTestCase() {
protected fun doTest(path: String): Unit = doTestEx(path)
protected fun doWithJSModuleTest(path: String): Unit = doTestEx(path) {
val jsModule = this.createModule("js-module")
jsModule.configureAs(ModuleKind.KOTLIN_JAVASCRIPT)
}
abstract val withSource: Boolean
abstract val expectedFileExt: String
protected fun doTestEx(path: String, additionalConfig: (() -> Unit)? = null) {
configureByFile(path)
module.configureAs(getProjectDescriptor())
if (additionalConfig != null) {
additionalConfig()
}
NavigationChecker.checkAnnotatedCode(file, File(path.replace(".kt", expectedFileExt)))
}
override fun tearDown() {
SourceNavigationHelper.setForceResolve(false)
super.tearDown()
}
override fun getTestDataPath(): String =
KotlinTestUtils.getHomeDirectory() + File.separator
open fun getProjectDescriptor(): KotlinLightProjectDescriptor =
SdkAndMockLibraryProjectDescriptor(
PluginTestCaseBase.getTestDataPathBase() + "/decompiler/navigation/library",
withSource
)
}
abstract class AbstractNavigateToDecompiledLibraryTest : AbstractNavigateToLibraryTest() {
override val withSource: Boolean get() = false
override val expectedFileExt: String get() = ".decompiled.expected"
}
abstract class AbstractNavigateToLibrarySourceTest : AbstractNavigateToLibraryTest() {
override val withSource: Boolean get() = true
override val expectedFileExt: String get() = ".source.expected"
}
class NavigationChecker(val file: PsiFile, val referenceTargetChecker: (PsiElement) -> Unit) {
fun annotatedLibraryCode(): String {
return NavigationTestUtils.getNavigateElementsText(file.project, collectInterestingNavigationElements())
}
private fun collectInterestingNavigationElements() =
collectInterestingReferences().map {
val target = it.resolve()
TestCase.assertNotNull(target)
target!!.navigationElement
}
private fun collectInterestingReferences(): Collection<KtReference> {
val referenceContainersToReferences = LinkedHashMap<PsiElement, KtReference>()
for (offset in 0..file.textLength - 1) {
val ref = file.findReferenceAt(offset)
val refs = when (ref) {
is KtReference -> listOf(ref)
is PsiMultiReference -> ref.references.filterIsInstance<KtReference>()
else -> emptyList<KtReference>()
}
refs.forEach { referenceContainersToReferences.addReference(it) }
}
return referenceContainersToReferences.values
}
private fun MutableMap<PsiElement, KtReference>.addReference(ref: KtReference) {
if (containsKey(ref.element)) return
val target = ref.resolve() ?: return
referenceTargetChecker(target)
val targetNavPsiFile = target.navigationElement.containingFile ?: return
val targetNavFile = targetNavPsiFile.virtualFile ?: return
if (!ProjectRootsUtil.isProjectSourceFile(target.project, targetNavFile)) {
put(ref.element, ref)
}
}
companion object {
fun checkAnnotatedCode(file: PsiFile, expectedFile: File, referenceTargetChecker: (PsiElement) -> Unit = {}) {
val navigationChecker = NavigationChecker(file, referenceTargetChecker)
for (forceResolve in listOf(false, true)) {
SourceNavigationHelper.setForceResolve(forceResolve)
KotlinTestUtils.assertEqualsToFile(expectedFile, navigationChecker.annotatedLibraryCode())
}
}
}
}