KT-32366: Add tests for right preview window

- also, fix missing test generation in `GenerateTests` bunch files (which was introduced in e54b43ba)
This commit is contained in:
Roman Golyshev
2019-08-19 18:48:16 +03:00
committed by Roman Golyshev
parent bddf87337c
commit e488e920d8
17 changed files with 203 additions and 28 deletions
@@ -810,6 +810,8 @@ fun main(args: Array<String>) {
model("worksheet", extension = "ws.kts", testMethod = "doWorksheetCompilingTest", testClassName = "WorksheetCompiling", recursive = false)
model("worksheet", extension = "ws.kts", testMethod = "doWorksheetReplTest", testClassName = "WorksheetRepl", recursive = false)
model("worksheet/multiFile", extension = null, testMethod = "doWorksheetMultiFileTest", testClassName = "WorksheetMultiFile", recursive = false)
model("scratch/rightPanelOutput", extension = "kts", testMethod = "doRightPreviewPanelOutputTest", testClassName = "ScratchRightPanelOutput", recursive = false)
}
testClass<AbstractScratchLineMarkersTest> {
@@ -817,9 +817,15 @@ fun main(args: Array<String>) {
}
testClass<AbstractScratchRunActionTest> {
model("scratch", extension = "kts", testMethod = "doCompilingTest", testClassName = "Compiling", recursive = false)
model("scratch", extension = "kts", testMethod = "doReplTest", testClassName = "Repl", recursive = false)
model("scratch/multiFile", extension = null, testMethod = "doMultiFileTest", recursive = false)
model("scratch", extension = "kts", testMethod = "doScratchCompilingTest", testClassName = "ScratchCompiling", recursive = false)
model("scratch", extension = "kts", testMethod = "doScratchReplTest", testClassName = "ScratchRepl", recursive = false)
model("scratch/multiFile", extension = null, testMethod = "doScratchMultiFileTest", testClassName = "ScratchMultiFile", recursive = false)
model("worksheet", extension = "ws.kts", testMethod = "doWorksheetCompilingTest", testClassName = "WorksheetCompiling", recursive = false)
model("worksheet", extension = "ws.kts", testMethod = "doWorksheetReplTest", testClassName = "WorksheetRepl", recursive = false)
model("worksheet/multiFile", extension = null, testMethod = "doWorksheetMultiFileTest", testClassName = "WorksheetMultiFile", recursive = false)
model("scratch/rightPanelOutput", extension = "kts", testMethod = "doRightPreviewPanelOutputTest", testClassName = "ScratchRightPanelOutput", recursive = false)
}
testClass<AbstractScratchLineMarkersTest> {
@@ -783,9 +783,15 @@ fun main(args: Array<String>) {
}
testClass<AbstractScratchRunActionTest> {
model("scratch", extension = "kts", testMethod = "doCompilingTest", testClassName = "Compiling", recursive = false)
model("scratch", extension = "kts", testMethod = "doReplTest", testClassName = "Repl", recursive = false)
model("scratch/multiFile", extension = null, testMethod = "doMultiFileTest", recursive = false)
model("scratch", extension = "kts", testMethod = "doScratchCompilingTest", testClassName = "ScratchCompiling", recursive = false)
model("scratch", extension = "kts", testMethod = "doScratchReplTest", testClassName = "ScratchRepl", recursive = false)
model("scratch/multiFile", extension = null, testMethod = "doScratchMultiFileTest", testClassName = "ScratchMultiFile", recursive = false)
model("worksheet", extension = "ws.kts", testMethod = "doWorksheetCompilingTest", testClassName = "WorksheetCompiling", recursive = false)
model("worksheet", extension = "ws.kts", testMethod = "doWorksheetReplTest", testClassName = "WorksheetRepl", recursive = false)
model("worksheet/multiFile", extension = null, testMethod = "doWorksheetMultiFileTest", testClassName = "WorksheetMultiFile", recursive = false)
model("scratch/rightPanelOutput", extension = "kts", testMethod = "doRightPreviewPanelOutputTest", testClassName = "ScratchRightPanelOutput", recursive = false)
}
testClass<AbstractScratchLineMarkersTest> {
@@ -787,9 +787,15 @@ fun main(args: Array<String>) {
}
testClass<AbstractScratchRunActionTest> {
model("scratch", extension = "kts", testMethod = "doCompilingTest", testClassName = "Compiling", recursive = false)
model("scratch", extension = "kts", testMethod = "doReplTest", testClassName = "Repl", recursive = false)
model("scratch/multiFile", extension = null, testMethod = "doMultiFileTest", recursive = false)
model("scratch", extension = "kts", testMethod = "doScratchCompilingTest", testClassName = "ScratchCompiling", recursive = false)
model("scratch", extension = "kts", testMethod = "doScratchReplTest", testClassName = "ScratchRepl", recursive = false)
model("scratch/multiFile", extension = null, testMethod = "doScratchMultiFileTest", testClassName = "ScratchMultiFile", recursive = false)
model("worksheet", extension = "ws.kts", testMethod = "doWorksheetCompilingTest", testClassName = "WorksheetCompiling", recursive = false)
model("worksheet", extension = "ws.kts", testMethod = "doWorksheetReplTest", testClassName = "WorksheetRepl", recursive = false)
model("worksheet/multiFile", extension = null, testMethod = "doWorksheetMultiFileTest", testClassName = "WorksheetMultiFile", recursive = false)
model("scratch/rightPanelOutput", extension = "kts", testMethod = "doRightPreviewPanelOutputTest", testClassName = "ScratchRightPanelOutput", recursive = false)
}
testClass<AbstractScratchLineMarkersTest> {
@@ -783,9 +783,15 @@ fun main(args: Array<String>) {
}
testClass<AbstractScratchRunActionTest> {
model("scratch", extension = "kts", testMethod = "doCompilingTest", testClassName = "Compiling", recursive = false)
model("scratch", extension = "kts", testMethod = "doReplTest", testClassName = "Repl", recursive = false)
model("scratch/multiFile", extension = null, testMethod = "doMultiFileTest", recursive = false)
model("scratch", extension = "kts", testMethod = "doScratchCompilingTest", testClassName = "ScratchCompiling", recursive = false)
model("scratch", extension = "kts", testMethod = "doScratchReplTest", testClassName = "ScratchRepl", recursive = false)
model("scratch/multiFile", extension = null, testMethod = "doScratchMultiFileTest", testClassName = "ScratchMultiFile", recursive = false)
model("worksheet", extension = "ws.kts", testMethod = "doWorksheetCompilingTest", testClassName = "WorksheetCompiling", recursive = false)
model("worksheet", extension = "ws.kts", testMethod = "doWorksheetReplTest", testClassName = "WorksheetRepl", recursive = false)
model("worksheet/multiFile", extension = null, testMethod = "doWorksheetMultiFileTest", testClassName = "WorksheetMultiFile", recursive = false)
model("scratch/rightPanelOutput", extension = "kts", testMethod = "doRightPreviewPanelOutputTest", testClassName = "ScratchRightPanelOutput", recursive = false)
}
testClass<AbstractScratchLineMarkersTest> {
@@ -783,9 +783,15 @@ fun main(args: Array<String>) {
}
testClass<AbstractScratchRunActionTest> {
model("scratch", extension = "kts", testMethod = "doCompilingTest", testClassName = "Compiling", recursive = false)
model("scratch", extension = "kts", testMethod = "doReplTest", testClassName = "Repl", recursive = false)
model("scratch/multiFile", extension = null, testMethod = "doMultiFileTest", recursive = false)
model("scratch", extension = "kts", testMethod = "doScratchCompilingTest", testClassName = "ScratchCompiling", recursive = false)
model("scratch", extension = "kts", testMethod = "doScratchReplTest", testClassName = "ScratchRepl", recursive = false)
model("scratch/multiFile", extension = null, testMethod = "doScratchMultiFileTest", testClassName = "ScratchMultiFile", recursive = false)
model("worksheet", extension = "ws.kts", testMethod = "doWorksheetCompilingTest", testClassName = "WorksheetCompiling", recursive = false)
model("worksheet", extension = "ws.kts", testMethod = "doWorksheetReplTest", testClassName = "WorksheetRepl", recursive = false)
model("worksheet/multiFile", extension = null, testMethod = "doWorksheetMultiFileTest", testClassName = "WorksheetMultiFile", recursive = false)
model("scratch/rightPanelOutput", extension = "kts", testMethod = "doRightPreviewPanelOutputTest", testClassName = "ScratchRightPanelOutput", recursive = false)
}
testClass<AbstractScratchLineMarkersTest> {
@@ -119,6 +119,9 @@ class KtScratchFileEditorWithPreview private constructor(
layout = if (isPreviewEnabled) Layout.SHOW_EDITOR_AND_PREVIEW else Layout.SHOW_EDITOR
}
@TestOnly
fun getPreviewEditor(): TextEditor = previewTextEditor
companion object {
fun create(scratchFile: ScratchFile): KtScratchFileEditorWithPreview {
val textEditorProvider = TextEditorProvider.getInstance()
@@ -0,0 +1,22 @@
Hello world
Hello world
Hello world
Hello world
Hello world
Hello world
Hello world
<fold text='Hello world...'>Hello world
Hello world</fold>
<fold text='Hello world...'>Hello world
Hello world
Hello world</fold>
Hello world
Hello world
Hello world
@@ -0,0 +1,20 @@
// PREVIEW_ENABLED: TRUE
println("Hello world")
for (x in 1..1) {
println("Hello world")
}
for (x in 1..3) {
println("Hello world")
}
for (x in 1..4) {
println("Hello world")
}
println(List(3) { "Hello world" }.joinToString(separator = "\n"))
println(
List(3) { "Hello world" }.joinToString(separator = "\n")
)
@@ -0,0 +1,3 @@
<fold text='First string...'>First string
Second string
Third string</fold>
@@ -0,0 +1,2 @@
// PREVIEW_ENABLED: TRUE
println("First string\nSecond string\nThird string")
@@ -0,0 +1 @@
Single string
@@ -0,0 +1,2 @@
// PREVIEW_ENABLED: TRUE
println("Single string")
@@ -45,20 +45,24 @@ import java.io.File
abstract class AbstractScratchRunActionTest : FileEditorManagerTestCase() {
fun doRightPreviewPanelOutputTest(fileName: String) {
doRightPreviewPanelOutputTest(fileName = fileName, isRepl = false)
}
fun doWorksheetReplTest(fileName: String) {
doTest(fileName = fileName, isRepl = true, isWorksheet = true)
doInlayOutputTest(fileName = fileName, isRepl = true, isWorksheet = true)
}
fun doScratchReplTest(fileName: String) {
doTest(fileName = fileName, isRepl = true, isWorksheet = false)
doInlayOutputTest(fileName = fileName, isRepl = true, isWorksheet = false)
}
fun doWorksheetCompilingTest(fileName: String) {
doTest(fileName = fileName, isRepl = false, isWorksheet = true)
doInlayOutputTest(fileName = fileName, isRepl = false, isWorksheet = true)
}
fun doScratchCompilingTest(fileName: String) {
doTest(fileName = fileName, isRepl = false, isWorksheet = false)
doInlayOutputTest(fileName = fileName, isRepl = false, isWorksheet = false)
}
fun doWorksheetMultiFileTest(dirName: String) {
@@ -97,18 +101,36 @@ abstract class AbstractScratchRunActionTest : FileEditorManagerTestCase() {
PsiTestUtil.setCompilerOutputPath(myFixture.module, outputDir.path, false)
val mainFileName = "$dirName/${getTestName(true)}.$mainFileExtension"
doTest(mainFileName, isRepl = false, isWorksheet = isWorksheet)
doInlayOutputTest(mainFileName, isRepl = false, isWorksheet = isWorksheet)
launchAction(ClearScratchAction())
doTest(mainFileName, isRepl = true, isWorksheet = isWorksheet)
doInlayOutputTest(mainFileName, isRepl = true, isWorksheet = isWorksheet)
ModuleRootModificationUtil.updateModel(myFixture.module) { model ->
model.getModuleExtension(CompilerModuleExtension::class.java).inheritCompilerOutputPath(true)
}
}
fun doTest(fileName: String, isRepl: Boolean, isWorksheet: Boolean) {
private fun doInlayOutputTest(fileName: String, isRepl: Boolean, isWorksheet: Boolean) {
configureAndLaunchScratch(fileName = fileName, isRepl = isRepl, isWorksheet = isWorksheet)
val actualOutput = getFileTextWithInlays()
val expectedFile = getExpectedFile(fileName, isRepl, suffix = "after")
KotlinTestUtils.assertEqualsToFile(expectedFile, actualOutput)
}
private fun doRightPreviewPanelOutputTest(fileName: String, isRepl: Boolean) {
configureAndLaunchScratch(fileName = fileName, isRepl = isRepl, isWorksheet = false)
val previewTextWithFoldings = getPreviewTextWithFoldings()
val expectedFile = getExpectedFile(fileName, isRepl, suffix = "preview")
KotlinTestUtils.assertEqualsToFile(expectedFile, previewTextWithFoldings)
}
private fun configureAndLaunchScratch(fileName: String, isRepl: Boolean, isWorksheet: Boolean) {
val sourceFile = File(testDataPath, fileName)
val fileText = sourceFile.readText().inlinePropertiesValues(isRepl)
@@ -122,16 +144,16 @@ abstract class AbstractScratchRunActionTest : FileEditorManagerTestCase() {
launchScratch()
waitUntilScratchFinishes()
}
val actualOutput = getFileTextWithInlays()
private fun getExpectedFile(fileName: String, isRepl: Boolean, suffix: String): File {
val expectedFileName = if (isRepl) {
fileName.replace(".kts", ".repl.after")
fileName.replace(".kts", ".repl.$suffix")
} else {
fileName.replace(".kts", ".comp.after")
fileName.replace(".kts", ".comp.$suffix")
}
val expectedFile = File(testDataPath, expectedFileName)
KotlinTestUtils.assertEqualsToFile(expectedFile, actualOutput)
return File(testDataPath, expectedFileName)
}
protected fun String.inlinePropertiesValues(
@@ -158,6 +180,14 @@ abstract class AbstractScratchRunActionTest : FileEditorManagerTestCase() {
return actualOutput.toString().trim()
}
private fun getPreviewTextWithFoldings(): String {
val scratchFileEditor = getScratchEditorForSelectedFile(myManager, myFixture.file.virtualFile)
?: error("Couldn't find scratch panel")
val previewEditor = scratchFileEditor.getPreviewEditor()
return getFoldingData(previewEditor.editor, withCollapseStatus = false)
}
protected fun getInlays(start: Int = 0, end: Int = myFixture.file.textLength): List<InlayScratchFileRenderer> {
val inlineElementsInRange = myFixture.editor.inlayModel.getInlays(start, end)
return inlineElementsInRange.map { it.renderer as InlayScratchFileRenderer }
@@ -276,4 +276,32 @@ public class ScratchRunActionTestGenerated extends AbstractScratchRunActionTest
runTest("idea/testData/worksheet/multiFile/javaDepScriptRuntime/");
}
}
@TestMetadata("idea/testData/scratch/rightPanelOutput")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class ScratchRightPanelOutput extends AbstractScratchRunActionTest {
private void runTest(String testDataFilePath) throws Exception {
KotlinTestUtils.runTest(this::doRightPreviewPanelOutputTest, TargetBackend.ANY, testDataFilePath);
}
public void testAllFilesPresentInScratchRightPanelOutput() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/scratch/rightPanelOutput"), Pattern.compile("^(.+)\\.kts$"), TargetBackend.ANY, false);
}
@TestMetadata("bigSequentialOutputs.kts")
public void testBigSequentialOutputs() throws Exception {
runTest("idea/testData/scratch/rightPanelOutput/bigSequentialOutputs.kts");
}
@TestMetadata("shortExpression.longOutput.singleTop.kts")
public void testShortExpression_longOutput_singleTop() throws Exception {
runTest("idea/testData/scratch/rightPanelOutput/shortExpression.longOutput.singleTop.kts");
}
@TestMetadata("shortExpression.shortOutput.singleTop.kts")
public void testShortExpression_shortOutput_singleTop() throws Exception {
runTest("idea/testData/scratch/rightPanelOutput/shortExpression.shortOutput.singleTop.kts");
}
}
}
@@ -0,0 +1,13 @@
/*
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.idea.scratch
import com.intellij.openapi.editor.Editor
import com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl
fun getFoldingData(editor: Editor, withCollapseStatus: Boolean): String {
return CodeInsightTestFixtureImpl.getFoldingData(editor, withCollapseStatus)
}
@@ -0,0 +1,19 @@
/*
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.idea.scratch
import com.intellij.openapi.editor.Editor
import com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl
fun getFoldingData(topEditor: Editor, withCollapseStatus: Boolean): String {
return CodeInsightTestFixtureImpl.getTagsFromSegments(
topEditor.document.text,
topEditor.foldingModel.allFoldRegions.asList(),
"fold"
) { foldRegion ->
"""text='${foldRegion.placeholderText}'${if (withCollapseStatus) """ expand='${foldRegion.isExpanded}'""" else ""}"""
}
}