Scratch tests: print test output at onFinish to avoid multiple calls of invokeLater
Multiple calls of invokeLater significantly affects test speed
This commit is contained in:
+2
-1
@@ -29,6 +29,7 @@ object InlayScratchOutputHandler : ScratchOutputHandler {
|
|||||||
private const val minSpaceCount = 4
|
private const val minSpaceCount = 4
|
||||||
|
|
||||||
override fun onStart(file: ScratchFile) {
|
override fun onStart(file: ScratchFile) {
|
||||||
|
getToolwindowHandler().onStart(file)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun handle(file: ScratchFile, expression: ScratchExpression, output: ScratchOutput) {
|
override fun handle(file: ScratchFile, expression: ScratchExpression, output: ScratchOutput) {
|
||||||
@@ -46,7 +47,7 @@ object InlayScratchOutputHandler : ScratchOutputHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onFinish(file: ScratchFile) {
|
override fun onFinish(file: ScratchFile) {
|
||||||
|
getToolwindowHandler().onFinish(file)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun clear(file: ScratchFile) {
|
override fun clear(file: ScratchFile) {
|
||||||
|
|||||||
+25
-8
@@ -32,7 +32,6 @@ import com.intellij.openapi.wm.ToolWindowAnchor
|
|||||||
import com.intellij.openapi.wm.ToolWindowFactory
|
import com.intellij.openapi.wm.ToolWindowFactory
|
||||||
import com.intellij.openapi.wm.ToolWindowManager
|
import com.intellij.openapi.wm.ToolWindowManager
|
||||||
import com.intellij.psi.PsiFile
|
import com.intellij.psi.PsiFile
|
||||||
import org.jetbrains.annotations.TestOnly
|
|
||||||
import org.jetbrains.kotlin.idea.scratch.ScratchExpression
|
import org.jetbrains.kotlin.idea.scratch.ScratchExpression
|
||||||
import org.jetbrains.kotlin.idea.scratch.ScratchFile
|
import org.jetbrains.kotlin.idea.scratch.ScratchFile
|
||||||
import org.jetbrains.kotlin.psi.KtPsiFactory
|
import org.jetbrains.kotlin.psi.KtPsiFactory
|
||||||
@@ -169,22 +168,40 @@ private class ScratchToolWindowFactory : ToolWindowFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private object TestOutputHandler : ScratchOutputHandlerAdapter() {
|
private object TestOutputHandler : ScratchOutputHandlerAdapter() {
|
||||||
|
private val errors = arrayListOf<String>()
|
||||||
|
private val inlays = arrayListOf<Pair<ScratchExpression, String>>()
|
||||||
|
|
||||||
override fun handle(file: ScratchFile, expression: ScratchExpression, output: ScratchOutput) {
|
override fun handle(file: ScratchFile, expression: ScratchExpression, output: ScratchOutput) {
|
||||||
testPrint(file, output.text, expression)
|
inlays.add(expression to output.text)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun error(file: ScratchFile, message: String) {
|
override fun error(file: ScratchFile, message: String) {
|
||||||
testPrint(file, message)
|
errors.add(message)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun testPrint(file: ScratchFile, output: String, expression: ScratchExpression? = null) {
|
override fun onFinish(file: ScratchFile) {
|
||||||
ApplicationManager.getApplication().invokeLater {
|
ApplicationManager.getApplication().invokeLater {
|
||||||
WriteCommandAction.runWriteCommandAction(file.project) {
|
if (inlays.isNotEmpty()) {
|
||||||
val psiFile = file.getPsiFile()!!
|
val psiFile = file.getPsiFile()!!
|
||||||
|
testPrint(file, inlays.map { (expression, text) ->
|
||||||
|
"/** ${getLineInfo(psiFile, expression)} $text */"
|
||||||
|
})
|
||||||
|
inlays.clear()
|
||||||
|
}
|
||||||
|
|
||||||
|
if (errors.isNotEmpty()) {
|
||||||
|
testPrint(file, listOf(errors.joinToString(prefix = "/** ", postfix = " */")))
|
||||||
|
errors.clear()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun testPrint(file: ScratchFile, comments: List<String>) {
|
||||||
|
WriteCommandAction.runWriteCommandAction(file.project) {
|
||||||
|
val psiFile = file.getPsiFile()!!
|
||||||
|
for (comment in comments) {
|
||||||
psiFile.addAfter(
|
psiFile.addAfter(
|
||||||
KtPsiFactory(file.project).createComment(
|
KtPsiFactory(file.project).createComment(comment),
|
||||||
"/** ${expression?.let { getLineInfo(psiFile, expression) + " " } ?: ""}$output */"
|
|
||||||
),
|
|
||||||
psiFile.lastChild
|
psiFile.lastChild
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user