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.RunScratchFromHereAction
import org.jetbrains.kotlin.idea.scratch.actions.ScratchCompilationSupport
import org.jetbrains.kotlin.idea.scratch.ui.findScratchFileEditorWithPreview
class ScratchFileAutoRunner(private val project: Project) : DocumentListener {
companion object {
@@ -72,6 +73,7 @@ class ScratchFileAutoRunner(private val project: Project) : DocumentListener {
}
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.project.Project
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.scratch.ui.KtScratchFileEditorWithPreview
import org.jetbrains.kotlin.idea.scratch.ui.findScratchFileEditorWithPreview
internal val LOG = Logger.getInstance("#org.jetbrains.kotlin.idea.scratch")
@@ -27,9 +29,10 @@ val VirtualFile.isKotlinWorksheet: Boolean
val VirtualFile.isKotlinScratch: Boolean
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
return editor.getScratchFile()
return editor.findScratchFileEditorWithPreview()
}
fun getScratchFileFromSelectedEditor(project: Project): ScratchFile? {
@@ -23,6 +23,7 @@ import com.intellij.openapi.util.Key
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.pom.Navigatable
import com.intellij.psi.PsiManager
import org.jetbrains.annotations.TestOnly
import org.jetbrains.kotlin.idea.scratch.*
import org.jetbrains.kotlin.idea.scratch.output.InlayScratchOutputHandler
import org.jetbrains.kotlin.idea.scratch.output.ScratchOutputHandlerAdapter
@@ -93,6 +94,11 @@ class KtScratchFileEditorWithPreview private constructor(
inlayOutputHandler.clear(scratchFile)
}
@TestOnly
fun setPreviewEnabled(isPreviewEnabled: Boolean) {
layout = if (isPreviewEnabled) Layout.SHOW_EDITOR_AND_PREVIEW else Layout.SHOW_EDITOR
}
companion object {
fun create(scratchFile: ScratchFile): KtScratchFileEditorWithPreview {
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.output.InlayScratchFileRenderer
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.KotlinWithJdkAndRuntimeLightProjectDescriptor
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
@@ -175,12 +176,12 @@ abstract class AbstractScratchRunActionTest : FileEditorManagerTestCase() {
ScriptDependenciesManager.updateScriptDependenciesSynchronously(scratchVirtualFile, project)
val scratchFile = getScratchFileFromEditorSelectedForFile(myManager, myFixture.file.virtualFile)
val scratchFileEditor = getScratchEditorForSelectedFile(myManager, myFixture.file.virtualFile)
?: 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 {
@@ -188,14 +189,14 @@ abstract class AbstractScratchRunActionTest : FileEditorManagerTestCase() {
ScriptDependenciesManager.updateScriptDependenciesSynchronously(worksheetFile, project)
val scratchFile = getScratchFileFromEditorSelectedForFile(myManager, myFixture.file.virtualFile)
val scratchFileEditor = getScratchEditorForSelectedFile(myManager, myFixture.file.virtualFile)
?: error("Couldn't find scratch panel")
// We want to check that correct module is selected automatically,
// 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() {
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")
scratchFile.replScratchExecutor?.stopAndWait()
}
@@ -303,10 +304,12 @@ abstract class AbstractScratchRunActionTest : FileEditorManagerTestCase() {
}
fun configureOptions(
scratchFile: ScratchFile,
scratchFileEditor: KtScratchFileEditorWithPreview,
fileText: String,
module: Module?
) {
val scratchFile = scratchFileEditor.scratchFile
if (InTextDirectivesUtils.getPrefixedBoolean(fileText, "// INTERACTIVE_MODE: ") != true) {
scratchFile.saveOptions { copy(isInteractiveMode = false) }
}
@@ -318,6 +321,9 @@ abstract class AbstractScratchRunActionTest : FileEditorManagerTestCase() {
if (module != null && !InTextDirectivesUtils.isDirectiveDefined(fileText, "// NO_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)
val scratchFile = getScratchFileFromEditorSelectedForFile(FileEditorManager.getInstance(project), myFixture.file.virtualFile)
val scratchFileEditor = getScratchEditorForSelectedFile(FileEditorManager.getInstance(project), myFixture.file.virtualFile)
?: error("Couldn't find scratch panel")
configureOptions(scratchFile, fileText, null)
configureOptions(scratchFileEditor, fileText, null)
val project = myFixture.project
val document = myFixture.editor.document