KT-32366: Refactor tests to allow testing of preview window

- add directive `PREVIEW_ENABLED` into scratch file settings
This commit is contained in:
Roman Golyshev
2019-08-19 13:14:33 +03:00
committed by Roman Golyshev
parent dd1ace37d2
commit 358ec2b8bd
5 changed files with 30 additions and 13 deletions
@@ -19,6 +19,7 @@ import com.intellij.util.Alarm
import org.jetbrains.kotlin.idea.scratch.actions.RunScratchAction import org.jetbrains.kotlin.idea.scratch.actions.RunScratchAction
import org.jetbrains.kotlin.idea.scratch.actions.RunScratchFromHereAction import org.jetbrains.kotlin.idea.scratch.actions.RunScratchFromHereAction
import org.jetbrains.kotlin.idea.scratch.actions.ScratchCompilationSupport import org.jetbrains.kotlin.idea.scratch.actions.ScratchCompilationSupport
import org.jetbrains.kotlin.idea.scratch.ui.findScratchFileEditorWithPreview
class ScratchFileAutoRunner(private val project: Project) : DocumentListener { class ScratchFileAutoRunner(private val project: Project) : DocumentListener {
companion object { companion object {
@@ -72,6 +73,7 @@ class ScratchFileAutoRunner(private val project: Project) : DocumentListener {
} }
private fun getScratchFile(file: VirtualFile, project: Project): ScratchFile? { private fun getScratchFile(file: VirtualFile, project: Project): ScratchFile? {
return getScratchFileFromEditorSelectedForFile(FileEditorManager.getInstance(project), file) val editor = FileEditorManager.getInstance(project).getSelectedEditor(file) as? TextEditor
return editor?.findScratchFileEditorWithPreview()?.scratchFile
} }
} }
@@ -13,7 +13,9 @@ import com.intellij.openapi.fileEditor.TextEditor
import com.intellij.openapi.fileEditor.impl.text.TextEditorProvider import com.intellij.openapi.fileEditor.impl.text.TextEditorProvider
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFile
import org.jetbrains.annotations.TestOnly
import org.jetbrains.kotlin.idea.actions.KOTLIN_WORKSHEET_EXTENSION import org.jetbrains.kotlin.idea.actions.KOTLIN_WORKSHEET_EXTENSION
import org.jetbrains.kotlin.idea.scratch.ui.KtScratchFileEditorWithPreview
import org.jetbrains.kotlin.idea.scratch.ui.findScratchFileEditorWithPreview import org.jetbrains.kotlin.idea.scratch.ui.findScratchFileEditorWithPreview
internal val LOG = Logger.getInstance("#org.jetbrains.kotlin.idea.scratch") internal val LOG = Logger.getInstance("#org.jetbrains.kotlin.idea.scratch")
@@ -27,9 +29,10 @@ val VirtualFile.isKotlinWorksheet: Boolean
val VirtualFile.isKotlinScratch: Boolean val VirtualFile.isKotlinScratch: Boolean
get() = ScratchFileService.getInstance().getRootType(this) is ScratchRootType get() = ScratchFileService.getInstance().getRootType(this) is ScratchRootType
fun getScratchFileFromEditorSelectedForFile(fileManager: FileEditorManager, virtualFile: VirtualFile): ScratchFile? { @TestOnly
fun getScratchEditorForSelectedFile(fileManager: FileEditorManager, virtualFile: VirtualFile): KtScratchFileEditorWithPreview? {
val editor = fileManager.getSelectedEditor(virtualFile) as? TextEditor ?: return null val editor = fileManager.getSelectedEditor(virtualFile) as? TextEditor ?: return null
return editor.getScratchFile() return editor.findScratchFileEditorWithPreview()
} }
fun getScratchFileFromSelectedEditor(project: Project): ScratchFile? { fun getScratchFileFromSelectedEditor(project: Project): ScratchFile? {
@@ -23,6 +23,7 @@ import com.intellij.openapi.util.Key
import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFile
import com.intellij.pom.Navigatable import com.intellij.pom.Navigatable
import com.intellij.psi.PsiManager import com.intellij.psi.PsiManager
import org.jetbrains.annotations.TestOnly
import org.jetbrains.kotlin.idea.scratch.* import org.jetbrains.kotlin.idea.scratch.*
import org.jetbrains.kotlin.idea.scratch.output.InlayScratchOutputHandler import org.jetbrains.kotlin.idea.scratch.output.InlayScratchOutputHandler
import org.jetbrains.kotlin.idea.scratch.output.ScratchOutputHandlerAdapter import org.jetbrains.kotlin.idea.scratch.output.ScratchOutputHandlerAdapter
@@ -93,6 +94,11 @@ class KtScratchFileEditorWithPreview private constructor(
inlayOutputHandler.clear(scratchFile) inlayOutputHandler.clear(scratchFile)
} }
@TestOnly
fun setPreviewEnabled(isPreviewEnabled: Boolean) {
layout = if (isPreviewEnabled) Layout.SHOW_EDITOR_AND_PREVIEW else Layout.SHOW_EDITOR
}
companion object { companion object {
fun create(scratchFile: ScratchFile): KtScratchFileEditorWithPreview { fun create(scratchFile: ScratchFile): KtScratchFileEditorWithPreview {
val textEditorProvider = TextEditorProvider.getInstance() val textEditorProvider = TextEditorProvider.getInstance()
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.idea.scratch.actions.RunScratchAction
import org.jetbrains.kotlin.idea.scratch.actions.ScratchCompilationSupport import org.jetbrains.kotlin.idea.scratch.actions.ScratchCompilationSupport
import org.jetbrains.kotlin.idea.scratch.output.InlayScratchFileRenderer import org.jetbrains.kotlin.idea.scratch.output.InlayScratchFileRenderer
import org.jetbrains.kotlin.idea.scratch.output.getInlays import org.jetbrains.kotlin.idea.scratch.output.getInlays
import org.jetbrains.kotlin.idea.scratch.ui.KtScratchFileEditorWithPreview
import org.jetbrains.kotlin.idea.test.KotlinLightProjectDescriptor import org.jetbrains.kotlin.idea.test.KotlinLightProjectDescriptor
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
@@ -175,12 +176,12 @@ abstract class AbstractScratchRunActionTest : FileEditorManagerTestCase() {
ScriptDependenciesManager.updateScriptDependenciesSynchronously(scratchVirtualFile, project) ScriptDependenciesManager.updateScriptDependenciesSynchronously(scratchVirtualFile, project)
val scratchFile = getScratchFileFromEditorSelectedForFile(myManager, myFixture.file.virtualFile) val scratchFileEditor = getScratchEditorForSelectedFile(myManager, myFixture.file.virtualFile)
?: error("Couldn't find scratch file") ?: error("Couldn't find scratch file")
configureOptions(scratchFile, text, myFixture.module) configureOptions(scratchFileEditor, text, myFixture.module)
return scratchFile return scratchFileEditor.scratchFile
} }
protected fun configureWorksheetByText(name: String, text: String): ScratchFile { protected fun configureWorksheetByText(name: String, text: String): ScratchFile {
@@ -188,14 +189,14 @@ abstract class AbstractScratchRunActionTest : FileEditorManagerTestCase() {
ScriptDependenciesManager.updateScriptDependenciesSynchronously(worksheetFile, project) ScriptDependenciesManager.updateScriptDependenciesSynchronously(worksheetFile, project)
val scratchFile = getScratchFileFromEditorSelectedForFile(myManager, myFixture.file.virtualFile) val scratchFileEditor = getScratchEditorForSelectedFile(myManager, myFixture.file.virtualFile)
?: error("Couldn't find scratch panel") ?: error("Couldn't find scratch panel")
// We want to check that correct module is selected automatically, // We want to check that correct module is selected automatically,
// that's why we set `module` to null so it wouldn't be changed // that's why we set `module` to null so it wouldn't be changed
configureOptions(scratchFile, text, null) configureOptions(scratchFileEditor, text, null)
return scratchFile return scratchFileEditor.scratchFile
} }
@@ -227,7 +228,7 @@ abstract class AbstractScratchRunActionTest : FileEditorManagerTestCase() {
protected fun stopReplProcess() { protected fun stopReplProcess() {
if (myFixture.file != null) { if (myFixture.file != null) {
val scratchFile = getScratchFileFromEditorSelectedForFile(myManager, myFixture.file.virtualFile) val scratchFile = getScratchEditorForSelectedFile(myManager, myFixture.file.virtualFile)?.scratchFile
?: error("Couldn't find scratch panel") ?: error("Couldn't find scratch panel")
scratchFile.replScratchExecutor?.stopAndWait() scratchFile.replScratchExecutor?.stopAndWait()
} }
@@ -303,10 +304,12 @@ abstract class AbstractScratchRunActionTest : FileEditorManagerTestCase() {
} }
fun configureOptions( fun configureOptions(
scratchFile: ScratchFile, scratchFileEditor: KtScratchFileEditorWithPreview,
fileText: String, fileText: String,
module: Module? module: Module?
) { ) {
val scratchFile = scratchFileEditor.scratchFile
if (InTextDirectivesUtils.getPrefixedBoolean(fileText, "// INTERACTIVE_MODE: ") != true) { if (InTextDirectivesUtils.getPrefixedBoolean(fileText, "// INTERACTIVE_MODE: ") != true) {
scratchFile.saveOptions { copy(isInteractiveMode = false) } scratchFile.saveOptions { copy(isInteractiveMode = false) }
} }
@@ -318,6 +321,9 @@ abstract class AbstractScratchRunActionTest : FileEditorManagerTestCase() {
if (module != null && !InTextDirectivesUtils.isDirectiveDefined(fileText, "// NO_MODULE")) { if (module != null && !InTextDirectivesUtils.isDirectiveDefined(fileText, "// NO_MODULE")) {
scratchFile.setModule(module) scratchFile.setModule(module)
} }
val isPreviewEnabled = InTextDirectivesUtils.getPrefixedBoolean(fileText, "// PREVIEW_ENABLED: ") == true
scratchFileEditor.setPreviewEnabled(isPreviewEnabled)
} }
} }
@@ -39,10 +39,10 @@ abstract class AbstractScratchLineMarkersTest : FileEditorManagerTestCase() {
ScriptDependenciesManager.updateScriptDependenciesSynchronously(scratchVirtualFile, project) ScriptDependenciesManager.updateScriptDependenciesSynchronously(scratchVirtualFile, project)
val scratchFile = getScratchFileFromEditorSelectedForFile(FileEditorManager.getInstance(project), myFixture.file.virtualFile) val scratchFileEditor = getScratchEditorForSelectedFile(FileEditorManager.getInstance(project), myFixture.file.virtualFile)
?: error("Couldn't find scratch panel") ?: error("Couldn't find scratch panel")
configureOptions(scratchFile, fileText, null) configureOptions(scratchFileEditor, fileText, null)
val project = myFixture.project val project = myFixture.project
val document = myFixture.editor.document val document = myFixture.editor.document