Print generated bytecode on AbstractCheckLocalVariablesTableTest fail
This commit is contained in:
+17
-11
@@ -22,6 +22,7 @@ import com.intellij.util.containers.ContainerUtil
|
|||||||
import junit.framework.TestCase
|
import junit.framework.TestCase
|
||||||
import org.jetbrains.kotlin.backend.common.output.OutputFileCollection
|
import org.jetbrains.kotlin.backend.common.output.OutputFileCollection
|
||||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||||
|
import org.jetbrains.kotlin.utils.rethrow
|
||||||
import org.jetbrains.org.objectweb.asm.*
|
import org.jetbrains.org.objectweb.asm.*
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
@@ -39,21 +40,26 @@ abstract class AbstractCheckLocalVariablesTableTest : CodegenTestCase() {
|
|||||||
override fun doMultiFileTest(wholeFile: File, files: List<CodegenTestCase.TestFile>, javaFilesDir: File?) {
|
override fun doMultiFileTest(wholeFile: File, files: List<CodegenTestCase.TestFile>, javaFilesDir: File?) {
|
||||||
compile(files, javaFilesDir)
|
compile(files, javaFilesDir)
|
||||||
|
|
||||||
val classAndMethod = parseClassAndMethodSignature(wholeFile)
|
try {
|
||||||
val split = classAndMethod.split("\\.".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
|
val classAndMethod = parseClassAndMethodSignature(wholeFile)
|
||||||
assert(split.size == 2) { "Exactly one dot is expected: $classAndMethod" }
|
val split = classAndMethod.split("\\.".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
|
||||||
val classFileRegex = StringUtil.escapeToRegexp(split[0] + ".class").replace("\\*", ".+")
|
assert(split.size == 2) { "Exactly one dot is expected: $classAndMethod" }
|
||||||
val methodName = split[1]
|
val classFileRegex = StringUtil.escapeToRegexp(split[0] + ".class").replace("\\*", ".+")
|
||||||
|
val methodName = split[1]
|
||||||
|
|
||||||
val outputFiles = (classFileFactory as OutputFileCollection).asList()
|
val outputFiles = (classFileFactory as OutputFileCollection).asList()
|
||||||
val outputFile = ContainerUtil.find(outputFiles, { file -> file.relativePath.matches(classFileRegex.toRegex()) })
|
val outputFile = ContainerUtil.find(outputFiles, { file -> file.relativePath.matches(classFileRegex.toRegex()) })
|
||||||
|
|
||||||
val pathsString = outputFiles.joinToString { it.relativePath }
|
val pathsString = outputFiles.joinToString { it.relativePath }
|
||||||
assertNotNull("Couldn't find class file for pattern $classFileRegex in: $pathsString", outputFile)
|
assertNotNull("Couldn't find class file for pattern $classFileRegex in: $pathsString", outputFile)
|
||||||
|
|
||||||
val actualLocalVariables = readLocalVariable(ClassReader(outputFile!!.asByteArray()), methodName)
|
val actualLocalVariables = readLocalVariable(ClassReader(outputFile!!.asByteArray()), methodName)
|
||||||
|
|
||||||
doCompare(wholeFile, files.single().content, actualLocalVariables)
|
doCompare(wholeFile, files.single().content, actualLocalVariables)
|
||||||
|
} catch (e: Throwable) {
|
||||||
|
println(classFileFactory.createText())
|
||||||
|
throw e
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected open fun doCompare(
|
protected open fun doCompare(
|
||||||
|
|||||||
Reference in New Issue
Block a user