Script run configuration: Set working directory to a directory containing script file by default
This commit is contained in:
+13
-2
@@ -158,15 +158,26 @@ class KotlinStandaloneScriptRunConfiguration(
|
||||
|
||||
return object : RefactoringElementAdapter() {
|
||||
override fun undoElementMovedOrRenamed(newElement: PsiElement, oldQualifiedName: String) {
|
||||
filePath = pathFromPsiElement(newElement)
|
||||
setupFilePath(pathFromPsiElement(newElement) ?: return)
|
||||
}
|
||||
|
||||
override fun elementRenamedOrMoved(newElement: PsiElement) {
|
||||
filePath = pathFromPsiElement(newElement)
|
||||
setupFilePath(pathFromPsiElement(newElement) ?: return)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun defaultWorkingDirectory(): String? {
|
||||
return com.intellij.util.PathUtil.getParentPath(filePath ?: return null)
|
||||
}
|
||||
|
||||
fun setupFilePath(filePath: String) {
|
||||
val wasDefaultWorkingDirectory = workingDirectory == null || workingDirectory == defaultWorkingDirectory()
|
||||
this.filePath = filePath
|
||||
if (wasDefaultWorkingDirectory) {
|
||||
this.workingDirectory = defaultWorkingDirectory()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class ScriptCommandLineState(environment: ExecutionEnvironment, configuration: KotlinStandaloneScriptRunConfiguration) :
|
||||
|
||||
+1
-1
@@ -30,7 +30,7 @@ public class KotlinStandaloneScriptRunConfigurationProducer :
|
||||
context: ConfigurationContext?,
|
||||
sourceElement: Ref<PsiElement>?
|
||||
): Boolean {
|
||||
configuration.filePath = pathFromContext(context) ?: return false
|
||||
configuration.setupFilePath(pathFromContext(context) ?: return false)
|
||||
configuration.setGeneratedName()
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
package foo
|
||||
|
||||
println("Hello from script")
|
||||
@@ -0,0 +1,3 @@
|
||||
package foo
|
||||
|
||||
println("Hello from script")
|
||||
@@ -16,12 +16,18 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.run
|
||||
|
||||
import com.intellij.openapi.vfs.VfsUtil
|
||||
import com.intellij.psi.JavaPsiFacade
|
||||
import com.intellij.psi.PsiFile
|
||||
import com.intellij.refactoring.RefactoringFactory
|
||||
import com.intellij.refactoring.move.moveFilesOrDirectories.MoveFilesOrDirectoriesProcessor
|
||||
import com.intellij.util.ActionRunner
|
||||
import org.jetbrains.kotlin.idea.run.script.standalone.KotlinStandaloneScriptRunConfiguration
|
||||
import org.jetbrains.kotlin.idea.search.allScope
|
||||
import org.jetbrains.kotlin.idea.stubindex.KotlinScriptFqnIndex
|
||||
import org.jetbrains.kotlin.idea.test.KotlinCodeInsightTestCase
|
||||
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
|
||||
import org.jetbrains.kotlin.psi.KtScript
|
||||
import org.junit.Assert
|
||||
import kotlin.test.assertNotEquals
|
||||
|
||||
@@ -48,16 +54,86 @@ class StandaloneScriptRunConfigurationTest : KotlinCodeInsightTestCase() {
|
||||
val runConfiguration = createConfigurationFromElement(script, save = true) as KotlinStandaloneScriptRunConfiguration
|
||||
|
||||
Assert.assertEquals("SimpleScript", runConfiguration.name)
|
||||
val originalPath = script.containingFile.virtualFile.canonicalPath
|
||||
val scriptVirtualFileBefore = script.containingFile.virtualFile
|
||||
val originalPath = scriptVirtualFileBefore.canonicalPath
|
||||
val originalWorkingDirectory = scriptVirtualFileBefore.parent.canonicalPath
|
||||
assertEquals(originalPath, runConfiguration.filePath)
|
||||
assertEquals(originalWorkingDirectory, runConfiguration.workingDirectory)
|
||||
|
||||
RefactoringFactory.getInstance(project).createRename(script.containingFile, "renamedScript.kts").run()
|
||||
|
||||
Assert.assertEquals("RenamedScript", runConfiguration.name)
|
||||
assertEquals(script.containingFile.virtualFile.canonicalPath, runConfiguration.filePath)
|
||||
val scriptVirtualFileAfter = script.containingFile.virtualFile
|
||||
|
||||
assertEquals(scriptVirtualFileAfter.canonicalPath, runConfiguration.filePath)
|
||||
assertNotEquals(originalPath, runConfiguration.filePath)
|
||||
|
||||
assertEquals(scriptVirtualFileAfter.parent.canonicalPath, runConfiguration.workingDirectory)
|
||||
assertEquals(originalWorkingDirectory, runConfiguration.workingDirectory)
|
||||
}
|
||||
|
||||
fun testOnFileMoveWithDefaultWorkingDir() {
|
||||
configureByFile("move/script.kts")
|
||||
val script = KotlinScriptFqnIndex.instance.get("foo.Script", project, project.allScope()).single()
|
||||
val runConfiguration = createConfigurationFromElement(script, save = true) as KotlinStandaloneScriptRunConfiguration
|
||||
|
||||
Assert.assertEquals("Script", runConfiguration.name)
|
||||
val scriptVirtualFileBefore = script.containingFile.virtualFile
|
||||
val originalPath = scriptVirtualFileBefore.canonicalPath
|
||||
val originalWorkingDirectory = scriptVirtualFileBefore.parent.canonicalPath
|
||||
assertEquals(originalPath, runConfiguration.filePath)
|
||||
assertEquals(originalWorkingDirectory, runConfiguration.workingDirectory)
|
||||
|
||||
moveScriptFile(script.containingFile)
|
||||
|
||||
Assert.assertEquals("Script", runConfiguration.name)
|
||||
val scriptVirtualFileAfter = script.containingFile.virtualFile
|
||||
|
||||
assertEquals(scriptVirtualFileAfter.canonicalPath, runConfiguration.filePath)
|
||||
assertNotEquals(originalPath, runConfiguration.filePath)
|
||||
|
||||
assertEquals(scriptVirtualFileAfter.parent.canonicalPath, runConfiguration.workingDirectory)
|
||||
assertNotEquals(originalWorkingDirectory, runConfiguration.workingDirectory)
|
||||
}
|
||||
|
||||
fun testOnFileMoveWithNonDefaultWorkingDir() {
|
||||
configureByFile("move/script.kts")
|
||||
val script = KotlinScriptFqnIndex.instance.get("foo.Script", project, project.allScope()).single()
|
||||
val runConfiguration = createConfigurationFromElement(script, save = true) as KotlinStandaloneScriptRunConfiguration
|
||||
|
||||
Assert.assertEquals("Script", runConfiguration.name)
|
||||
runConfiguration.workingDirectory = runConfiguration.workingDirectory + "/customWorkingDirectory"
|
||||
val scriptVirtualFileBefore = script.containingFile.virtualFile
|
||||
val originalPath = scriptVirtualFileBefore.canonicalPath
|
||||
val originalWorkingDirectory = scriptVirtualFileBefore.parent.canonicalPath + "/customWorkingDirectory"
|
||||
|
||||
assertEquals(originalPath, runConfiguration.filePath)
|
||||
assertEquals(originalWorkingDirectory, runConfiguration.workingDirectory)
|
||||
|
||||
moveScriptFile(script.containingFile)
|
||||
|
||||
Assert.assertEquals("Script", runConfiguration.name)
|
||||
val scriptVirtualFileAfter = script.containingFile.virtualFile
|
||||
|
||||
assertEquals(scriptVirtualFileAfter.canonicalPath, runConfiguration.filePath)
|
||||
assertNotEquals(originalPath, runConfiguration.filePath)
|
||||
|
||||
assertNotEquals(scriptVirtualFileAfter.parent.canonicalPath, runConfiguration.workingDirectory)
|
||||
assertEquals(originalWorkingDirectory, runConfiguration.workingDirectory)
|
||||
}
|
||||
|
||||
fun moveScriptFile(scriptFile: PsiFile) {
|
||||
ActionRunner.runInsideWriteAction { VfsUtil.createDirectoryIfMissing(scriptFile.virtualFile.parent, "dest") }
|
||||
|
||||
MoveFilesOrDirectoriesProcessor(
|
||||
project,
|
||||
arrayOf(scriptFile),
|
||||
JavaPsiFacade.getInstance(project).findPackage("dest")!!.getDirectories()[0],
|
||||
false, true, null, null
|
||||
).run()
|
||||
}
|
||||
|
||||
|
||||
override fun getTestDataPath() = PluginTestCaseBase.getTestDataPathBase() + "/run/StandaloneScript/"
|
||||
override fun getTestProjectJdk() = PluginTestCaseBase.mockJdk()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user