J2K converter testing: added dumping of errors into multifile tests too

This commit is contained in:
Valentin Kipyatkov
2014-10-24 14:09:50 +04:00
committed by valentin
parent 82fc0ee394
commit 3f6cebbc28
3 changed files with 40 additions and 17 deletions
@@ -31,16 +31,18 @@ import org.jetbrains.jet.j2k.JavaToKotlinConverter
import com.intellij.psi.PsiManager
import java.util.ArrayList
import org.jetbrains.jet.j2k.ConverterSettings
import org.jetbrains.jet.lang.psi.JetFile
public abstract class AbstractJavaToKotlinConverterMultiFileTest() : AbstractJavaToKotlinConverterTest() {
public fun doTest(dirPath: String) {
val project = LightPlatformTestCase.getProject()!!
val psiManager = PsiManager.getInstance(project)
val javaFiles = File(dirPath).listFiles {(file, name): Boolean -> name.endsWith(".java") }
val psiFiles = ArrayList<PsiJavaFile>()
for (javaFile: File in javaFiles) {
val virtualFile = addFile(javaFile, "test")
val psiFile = PsiManager.getInstance(project).findFile(virtualFile) as PsiJavaFile
val psiFile = psiManager.findFile(virtualFile) as PsiJavaFile
psiFiles.add(psiFile)
}
@@ -48,10 +50,17 @@ public abstract class AbstractJavaToKotlinConverterMultiFileTest() : AbstractJav
val results: List<String> = converter.elementsToKotlin(psiFiles.map { it to J2kPostProcessor(it) })
.map { reformat(it, project) }
for ((i, javaFile) in javaFiles.withIndices()) {
val kotlinPath = javaFile.getPath().replace(".java", ".kt")
val expectedFile = File(kotlinPath)
JetTestUtils.assertEqualsToFile(expectedFile, results[i])
fun expectedFile(i: Int) = File(javaFiles[i].getPath().replace(".java", ".kt"))
val jetFiles = ArrayList<JetFile>()
for (i in javaFiles.indices) {
deleteFile(psiFiles[i].getVirtualFile())
val virtualFile = addFile(results[i], expectedFile(i).getName(), "test")
jetFiles.add(psiManager.findFile(virtualFile) as JetFile)
}
for ((i, jetFile) in jetFiles.withIndices()) {
JetTestUtils.assertEqualsToFile(expectedFile(i), addErrorsDump(jetFile))
}
}
@@ -85,17 +85,12 @@ public abstract class AbstractJavaToKotlinConverterSingleFileTest() : AbstractJa
val reformatInFun = prefix in setOf("element", "expression", "statement")
var actual = reformat(rawConverted, project, reformatInFun)
val kotlinPath = javaPath.replace(".java", ".kt")
if (prefix == "file") {
val diagnostics = createKotlinFile(actual).getAnalysisResults().getBindingContext().getDiagnostics()
val errors = diagnostics.filter { it.getSeverity() == Severity.ERROR }
if (!errors.isEmpty()) {
val header = errors.map { "// ERROR: " + DefaultErrorMessages.RENDERER.render(it).replace('\n', ' ') }.joinToString("\n", postfix = "\n")
actual = header + actual
}
actual = addErrorsDump(createKotlinFile(actual))
}
val kotlinPath = javaPath.replace(".java", ".kt")
val expectedFile = File(kotlinPath)
JetTestUtils.assertEqualsToFile(expectedFile, actual)
}
@@ -27,6 +27,10 @@ import junit.framework.TestCase
import org.jetbrains.jet.j2k.translateToKotlin
import com.intellij.openapi.util.Disposer
import org.jetbrains.jet.j2k.JavaToKotlinTranslator
import org.jetbrains.jet.lang.diagnostics.Severity
import org.jetbrains.jet.lang.diagnostics.rendering.DefaultErrorMessages
import org.jetbrains.jet.lang.psi.JetFile
import org.jetbrains.jet.plugin.caches.resolve.getAnalysisResults
import org.jetbrains.jet.JetTestCaseBuilder
import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess
@@ -49,18 +53,33 @@ public abstract class AbstractJavaToKotlinConverterTest : LightCodeInsightFixtur
addFile(File("j2k/tests/testData/$fileName"), packageName)
}
fun addFile(file: File, packageName: String): VirtualFile {
protected fun addFile(file: File, dirName: String): VirtualFile {
return addFile(FileUtil.loadFile(file, true), file.getName(), dirName)
}
protected fun addFile(text: String, fileName: String, dirName: String): VirtualFile {
return ApplicationManager.getApplication()!!.runWriteAction(object: Computable<VirtualFile> {
override fun compute(): VirtualFile? {
val code = FileUtil.loadFile(file, true)
val root = LightPlatformTestCase.getSourceRoot()!!
val virtualDir = root.findChild(packageName) ?: root.createChildDirectory(null, packageName)
val virtualFile = virtualDir.createChildData(null, file.getName())!!
virtualFile.getOutputStream(null)!!.writer().use { it.write(code) }
val virtualDir = root.findChild(dirName) ?: root.createChildDirectory(null, dirName)
val virtualFile = virtualDir.createChildData(null, fileName)!!
virtualFile.getOutputStream(null)!!.writer().use { it.write(text) }
return virtualFile
}
})
}
protected fun deleteFile(virtualFile: VirtualFile) {
ApplicationManager.getApplication()!!.runWriteAction { virtualFile.delete(this) }
}
protected fun addErrorsDump(jetFile: JetFile): String {
val diagnostics = jetFile.getAnalysisResults().getBindingContext().getDiagnostics()
val errors = diagnostics.filter { it.getSeverity() == Severity.ERROR }
if (errors.isEmpty()) return jetFile.getText()
val header = errors.map { "// ERROR: " + DefaultErrorMessages.RENDERER.render(it).replace('\n', ' ') }.joinToString("\n", postfix = "\n")
return header + jetFile.getText()
}
}
public abstract class AbstractJavaToKotlinConverterForWebDemoTest() : TestCase() {