diff --git a/idea/testData/run/StandaloneScript/renameFile/simpleScript.kts b/idea/testData/run/StandaloneScript/renameFile/simpleScript.kts new file mode 100644 index 00000000000..4907ef4d993 --- /dev/null +++ b/idea/testData/run/StandaloneScript/renameFile/simpleScript.kts @@ -0,0 +1,3 @@ +package foo + +println("Hello from script") \ No newline at end of file diff --git a/idea/testData/run/StandaloneScript/run/simpleScript.kts b/idea/testData/run/StandaloneScript/run/simpleScript.kts new file mode 100644 index 00000000000..4907ef4d993 --- /dev/null +++ b/idea/testData/run/StandaloneScript/run/simpleScript.kts @@ -0,0 +1,3 @@ +package foo + +println("Hello from script") \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/run/RunConfigurationTest.kt b/idea/tests/org/jetbrains/kotlin/idea/run/RunConfigurationTest.kt index 96389f5bef3..3bc125561ea 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/run/RunConfigurationTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/run/RunConfigurationTest.kt @@ -16,23 +16,17 @@ package org.jetbrains.kotlin.idea.run -import com.intellij.execution.Executor import com.intellij.execution.Location import com.intellij.execution.PsiLocation -import com.intellij.execution.RunManagerEx import com.intellij.execution.actions.ConfigurationContext -import com.intellij.execution.configurations.JavaCommandLine -import com.intellij.execution.configurations.JavaParameters -import com.intellij.execution.configurations.RunConfiguration -import com.intellij.execution.configurations.RunProfile -import com.intellij.execution.executors.DefaultRunExecutor -import com.intellij.execution.runners.ExecutionEnvironment -import com.intellij.execution.runners.ExecutionEnvironmentBuilder import com.intellij.openapi.module.Module import com.intellij.openapi.projectRoots.Sdk import com.intellij.openapi.roots.ModuleRootModificationUtil import com.intellij.openapi.vfs.VirtualFile -import com.intellij.psi.* +import com.intellij.psi.JavaPsiFacade +import com.intellij.psi.PsiComment +import com.intellij.psi.PsiDocumentManager +import com.intellij.psi.PsiManager import com.intellij.refactoring.RefactoringFactory import com.intellij.testFramework.MapDataContext import com.intellij.testFramework.PlatformTestCase @@ -43,8 +37,6 @@ import org.jetbrains.kotlin.idea.search.allScope import org.jetbrains.kotlin.idea.stubindex.KotlinFullClassNameIndex import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelFunctionFqnNameIndex import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil -import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil.configureKotlinJsRuntimeAndSdk -import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil.configureKotlinRuntimeAndSdk import org.jetbrains.kotlin.idea.test.KotlinCodeInsightTestCase import org.jetbrains.kotlin.idea.test.PluginTestCaseBase import org.jetbrains.kotlin.idea.util.application.runWriteAction @@ -216,24 +208,13 @@ class RunConfigurationTest: KotlinCodeInsightTestCase() { private fun createConfigurationFromMain(mainFqn: String): JetRunConfiguration { val mainFunction = KotlinTopLevelFunctionFqnNameIndex.getInstance().get(mainFqn, getTestProject(), getTestProject().allScope()).first() - return createConfigurationFromElement(mainFunction) + return createConfigurationFromElement(mainFunction) as JetRunConfiguration } private fun createConfigurationFromObject(objectFqn: String, save: Boolean = false): JetRunConfiguration { val obj = KotlinFullClassNameIndex.getInstance().get(objectFqn, getTestProject(), getTestProject().allScope()).single() val mainFunction = obj.getDeclarations().single { it is KtFunction && it.getName() == "main" } - return createConfigurationFromElement(mainFunction, save) - } - - private fun createConfigurationFromElement(element: PsiElement?, save: Boolean = false): JetRunConfiguration { - val dataContext = MapDataContext() - dataContext.put(Location.DATA_KEY, PsiLocation(getTestProject(), element)) - - val runnerAndConfigurationSettings = ConfigurationContext.getFromContext(dataContext).getConfiguration() - if (save) { - RunManagerEx.getInstanceEx(myProject).setTemporaryConfiguration(runnerAndConfigurationSettings) - } - return runnerAndConfigurationSettings!!.getConfiguration() as JetRunConfiguration + return createConfigurationFromElement(mainFunction, save) as JetRunConfiguration } private fun configureModule(moduleDir: String, outputParentDir: VirtualFile, configModule: Module = getModule()): CreateModuleResult { @@ -264,16 +245,6 @@ class RunConfigurationTest: KotlinCodeInsightTestCase() { private fun moduleDirPath(moduleName: String) = "${getTestDataPath()}${getTestName(false)}/$moduleName" - private fun getJavaRunParameters(configuration: RunConfiguration): JavaParameters { - val state = configuration.getState(MockExecutor, ExecutionEnvironmentBuilder.create(myProject!!, MockExecutor, MockProfile).build()) - - Assert.assertNotNull(state) - Assert.assertTrue(state is JavaCommandLine) - - configuration.checkConfiguration() - return (state as JavaCommandLine).getJavaParameters()!! - } - override fun getTestDataPath() = PluginTestCaseBase.getTestDataPathBase() + "/run/" override fun getTestProjectJdk() = PluginTestCaseBase.mockJdk() @@ -283,14 +254,4 @@ class RunConfigurationTest: KotlinCodeInsightTestCase() { val srcOutputDir: VirtualFile, val testOutputDir: VirtualFile ) - - private object MockExecutor : DefaultRunExecutor() { - override fun getId() = DefaultRunExecutor.EXECUTOR_ID - } - - private object MockProfile : RunProfile { - override fun getState(executor: Executor, env: ExecutionEnvironment) = null - override fun getIcon() = null - override fun getName() = null - } } diff --git a/idea/tests/org/jetbrains/kotlin/idea/run/StandaloneScriptRunConfigurationTest.kt b/idea/tests/org/jetbrains/kotlin/idea/run/StandaloneScriptRunConfigurationTest.kt new file mode 100644 index 00000000000..84a09a80804 --- /dev/null +++ b/idea/tests/org/jetbrains/kotlin/idea/run/StandaloneScriptRunConfigurationTest.kt @@ -0,0 +1,63 @@ +/* + * Copyright 2010-2015 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.idea.run + +import com.intellij.refactoring.RefactoringFactory +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.junit.Assert +import kotlin.test.assertNotEquals + +class StandaloneScriptRunConfigurationTest : KotlinCodeInsightTestCase() { + + fun testConfigurationForScript() { + configureByFile("run/simpleScript.kts") + val script = KotlinScriptFqnIndex.instance.get("foo.SimpleScript", project, project.allScope()).single() + val runConfiguration = createConfigurationFromElement(script) as KotlinStandaloneScriptRunConfiguration + + Assert.assertEquals(script.containingFile.virtualFile.canonicalPath, runConfiguration.filePath) + Assert.assertEquals("SimpleScript", runConfiguration.name) + + val javaParameters = getJavaRunParameters(runConfiguration) + val programParametersList = javaParameters.programParametersList.list + val (first, second) = programParametersList + Assert.assertEquals("Should pass -script to compiler", "-script", first) + Assert.assertTrue("Should pass script file to compiler", second.contains("simpleScript.kts")) + } + + fun testOnFileRename() { + configureByFile("renameFile/simpleScript.kts") + val script = KotlinScriptFqnIndex.instance.get("foo.SimpleScript", project, project.allScope()).single() + val runConfiguration = createConfigurationFromElement(script, save = true) as KotlinStandaloneScriptRunConfiguration + + Assert.assertEquals("SimpleScript", runConfiguration.name) + val originalPath = script.containingFile.virtualFile.canonicalPath + assertEquals(originalPath, runConfiguration.filePath) + + RefactoringFactory.getInstance(project).createRename(script.containingFile, "renamedScript.kts").run() + + Assert.assertEquals("RenamedScript", runConfiguration.name) + assertEquals(script.containingFile.virtualFile.canonicalPath, runConfiguration.filePath) + assertNotEquals(originalPath, runConfiguration.filePath) + } + + override fun getTestDataPath() = PluginTestCaseBase.getTestDataPathBase() + "/run/StandaloneScript/" + override fun getTestProjectJdk() = PluginTestCaseBase.mockJdk() +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/run/runConfigurationTestUtil.kt b/idea/tests/org/jetbrains/kotlin/idea/run/runConfigurationTestUtil.kt new file mode 100644 index 00000000000..f84c55d887b --- /dev/null +++ b/idea/tests/org/jetbrains/kotlin/idea/run/runConfigurationTestUtil.kt @@ -0,0 +1,65 @@ +/* + * Copyright 2010-2015 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.idea.run + +import com.intellij.execution.Executor +import com.intellij.execution.Location +import com.intellij.execution.PsiLocation +import com.intellij.execution.RunManagerEx +import com.intellij.execution.actions.ConfigurationContext +import com.intellij.execution.configurations.JavaCommandLine +import com.intellij.execution.configurations.JavaParameters +import com.intellij.execution.configurations.RunConfiguration +import com.intellij.execution.configurations.RunProfile +import com.intellij.execution.executors.DefaultRunExecutor +import com.intellij.execution.runners.ExecutionEnvironment +import com.intellij.execution.runners.ExecutionEnvironmentBuilder +import com.intellij.psi.PsiElement +import com.intellij.testFramework.MapDataContext +import org.junit.Assert + +fun getJavaRunParameters(configuration: RunConfiguration): JavaParameters { + val state = configuration.getState(MockExecutor, ExecutionEnvironmentBuilder.create(configuration.project, MockExecutor, MockProfile).build()) + + Assert.assertNotNull(state) + Assert.assertTrue(state is JavaCommandLine) + + configuration.checkConfiguration() + return (state as JavaCommandLine).getJavaParameters()!! +} + +fun createConfigurationFromElement(element: PsiElement, save: Boolean = false): RunConfiguration { + val dataContext = MapDataContext() + dataContext.put(Location.DATA_KEY, PsiLocation(element.project, element)) + + val runnerAndConfigurationSettings = ConfigurationContext.getFromContext(dataContext).getConfiguration() + if (save) { + RunManagerEx.getInstanceEx(element.project).setTemporaryConfiguration(runnerAndConfigurationSettings) + } + return runnerAndConfigurationSettings!!.getConfiguration() +} + + +private object MockExecutor : DefaultRunExecutor() { + override fun getId() = DefaultRunExecutor.EXECUTOR_ID +} + +private object MockProfile : RunProfile { + override fun getState(executor: Executor, env: ExecutionEnvironment) = null + override fun getIcon() = null + override fun getName() = null +}