Avoid storing state in consistency tests

This commit is contained in:
Nikolay Krasko
2015-07-14 18:11:38 +03:00
parent 22f7fca53f
commit 2a3337907e
6 changed files with 25 additions and 34 deletions
@@ -25,12 +25,8 @@ import org.jetbrains.kotlin.name.FqName
import kotlin.properties.Delegates
public class ClsStubConsistencyTest : StubConsistencyBaseTest() {
override val packages: List<FqName> = listOf(FqName("kotlin"))
override val virtualFileFinder: VirtualFileFinder by Delegates.lazy() {
JvmVirtualFileFinder.SERVICE.getInstance(getProject())
}
override fun getVirtualFileFinder(): VirtualFileFinder = JvmVirtualFileFinder.SERVICE.getInstance(getProject())
override fun getPackages(): List<FqName> = listOf(FqName("kotlin"))
override fun createStubBuilder() = KotlinClsStubBuilder()
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.idea.decompiler.stubBuilder
import com.intellij.openapi.Disposable
import com.intellij.openapi.vfs.VirtualFile
import org.jetbrains.kotlin.idea.decompiler.textBuilder.buildDecompiledTextFromJsMetadata
import org.jetbrains.kotlin.idea.js.KotlinJavaScriptLibraryManager
@@ -26,19 +27,17 @@ import org.jetbrains.kotlin.name.FqName
import kotlin.properties.Delegates
public class KotlinJavaScriptStubConsistencyTest : StubConsistencyBaseTest() {
override val packages: List<FqName> = listOf(
"java.util", "jquery", "jquery.ui", "kotlin", "kotlin.browser", "kotlin.dom", "kotlin.js"
).map { FqName(it) }
override fun setUp() {
super.setUp()
KotlinJavaScriptLibraryManager.getInstance(getProject()).syncUpdateProjectLibrary()
}
override val virtualFileFinder: VirtualFileFinder by Delegates.lazy() {
override fun getPackages(): List<FqName> = listOf(
"java.util", "jquery", "jquery.ui",
"kotlin", "kotlin.browser", "kotlin.dom", "kotlin.js").map { FqName(it) }
override fun getVirtualFileFinder(): VirtualFileFinder =
JsVirtualFileFinder.SERVICE.getInstance(getProject())
}
override fun createStubBuilder() = KotlinJavaScriptStubBuilder()
@@ -29,21 +29,20 @@ import org.junit.Assert
public abstract class StubConsistencyBaseTest : JetLightCodeInsightFixtureTestCase() {
protected abstract val packages: List<FqName>
protected abstract val virtualFileFinder: VirtualFileFinder
protected abstract fun getPackages(): List<FqName>
protected abstract fun getVirtualFileFinder(): VirtualFileFinder
protected abstract fun createStubBuilder(): ClsStubBuilder
protected abstract fun getDecompiledText(packageFile: VirtualFile): String
public fun testConsistency() {
packages.forEach { doTest(it) }
getPackages().forEach { doTest(it) }
}
private fun doTest(packageFqName: FqName) {
val project = getProject()
val packageFile = virtualFileFinder.findVirtualFileWithHeader(PackageClassUtils.getPackageClassId(packageFqName))!!
val packageFile = getVirtualFileFinder().findVirtualFileWithHeader(PackageClassUtils.getPackageClassId(packageFqName))!!
val decompiledText = getDecompiledText(packageFile)
val fileWithDecompiledText = JetPsiFactory(project).createFile(decompiledText)
val stubTreeFromDecompiledText = JetFileStubBuilder().buildStubTree(fileWithDecompiledText)
@@ -29,13 +29,12 @@ import kotlin.properties.Delegates
public class DecompiledTextConsistencyTest : TextConsistencyBaseTest() {
override val packages: List<FqName> = listOf(FqName("kotlin"))
override fun getPackages(): List<FqName> = listOf(FqName("kotlin"))
override val topLevelMembers: Map<String, String> = mapOf("kotlin" to "linkedListOf")
override fun getTopLevelMembers(): Map<String, String> = mapOf("kotlin" to "linkedListOf")
override val virtualFileFinder: VirtualFileFinder by Delegates.lazy() {
override fun getVirtualFileFinder(): VirtualFileFinder =
JvmVirtualFileFinder.SERVICE.getInstance(getProject())
}
override fun getDecompiledText(packageFile: VirtualFile, resolver: ResolverForDecompiler?): String =
(resolver?.let { buildDecompiledText(packageFile, it) } ?: buildDecompiledText(packageFile)).text
@@ -30,19 +30,17 @@ import org.jetbrains.kotlin.test.JetTestUtils
import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils
import org.jetbrains.kotlin.utils.PathUtil
import org.jetbrains.kotlin.utils.sure
import java.util.*
import kotlin.properties.Delegates
public class KotlinJavaScriptDecompiledTextConsistencyTest : TextConsistencyBaseTest() {
override val packages: List<FqName> = listOf(
override fun getPackages(): List<FqName> = listOf(
"java.util", "jquery", "jquery.ui", "kotlin", "kotlin.browser", "kotlin.dom", "kotlin.js"
).map { FqName(it) }
override val topLevelMembers: Map<String, String> = mapOf("kotlin" to "intArrayOf")
override fun getTopLevelMembers(): Map<String, String> = mapOf("kotlin" to "intArrayOf")
override val virtualFileFinder: VirtualFileFinder by Delegates.lazy() {
JsVirtualFileFinder.SERVICE.getInstance(getProject())
}
override fun getVirtualFileFinder(): VirtualFileFinder = JsVirtualFileFinder.SERVICE.getInstance(getProject())
override fun setUp() {
super.setUp()
@@ -34,27 +34,27 @@ import org.junit.Assert
public abstract class TextConsistencyBaseTest : JetLightCodeInsightFixtureTestCase() {
protected abstract val packages: List<FqName>
protected abstract fun getPackages(): List<FqName>
protected abstract val topLevelMembers: Map<String, String>
protected abstract fun getTopLevelMembers(): Map<String, String>
protected abstract val virtualFileFinder: VirtualFileFinder
protected abstract fun getVirtualFileFinder(): VirtualFileFinder
protected abstract fun getDecompiledText(packageFile: VirtualFile, resolver: ResolverForDecompiler? = null): String
protected abstract fun getModuleDescriptor(): ModuleDescriptor
public fun testConsistency() {
packages.forEach { doTest(it) }
getPackages().forEach { doTest(it) }
}
private fun doTest(packageFqName: FqName) {
val packageFile = virtualFileFinder.findVirtualFileWithHeader(PackageClassUtils.getPackageClassId(packageFqName))!!
val packageFile = getVirtualFileFinder().findVirtualFileWithHeader(PackageClassUtils.getPackageClassId(packageFqName))!!
val projectBasedText = getDecompiledText(packageFile, ResolverForDecompilerImpl(getModuleDescriptor()))
val deserializedText = getDecompiledText(packageFile)
Assert.assertEquals(projectBasedText, deserializedText)
// sanity checks
topLevelMembers[packageFqName.asString()]?.let {
getTopLevelMembers()[packageFqName.asString()]?.let {
Assert.assertTrue(projectBasedText.contains(it))
}
Assert.assertFalse(projectBasedText.contains("ERROR"))