From bc1e836f012ac53eb81d693d852369ec1af9e0b6 Mon Sep 17 00:00:00 2001 From: Natalia Selezneva Date: Thu, 28 Feb 2019 14:56:32 +0300 Subject: [PATCH] Fix saving Kotlin Scripting Setting to xml ^KT-30146 Fixed --- .../settings/KotlinScriptingSettings.kt | 12 +++- .../idea/script/ScriptOptionsSaveTest.kt | 55 +++++++++++++++++++ 2 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 idea/tests/org/jetbrains/kotlin/idea/script/ScriptOptionsSaveTest.kt diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/settings/KotlinScriptingSettings.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/settings/KotlinScriptingSettings.kt index b73097da53f..473f09695d7 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/settings/KotlinScriptingSettings.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/settings/KotlinScriptingSettings.kt @@ -103,22 +103,28 @@ class KotlinScriptingSettings : PersistentStateComponent { KotlinScriptDefinitionKey(this.name, this::class.qualifiedName ?: "unknown") private fun Element.addScriptDefinitionContentElement(definition: KotlinScriptDefinitionKey, settings: KotlinScriptDefinitionValue) { - Element(SCRIPT_DEFINITION_TAG).apply { + addElement(SCRIPT_DEFINITION_TAG).apply { attribute(KotlinScriptDefinitionKey::className.name, definition.className) attribute(KotlinScriptDefinitionKey::definitionName.name, definition.definitionName) - Element(KotlinScriptDefinitionValue::order.name).apply { + addElement(KotlinScriptDefinitionValue::order.name).apply { text = settings.order.toString() } if (!settings.isEnabled) { - Element(KotlinScriptDefinitionValue::isEnabled.name).apply { + addElement(KotlinScriptDefinitionValue::isEnabled.name).apply { text = settings.isEnabled.toString() } } } } + private fun Element.addElement(name: String): Element { + val element = Element(name) + addContent(element) + return element + } + private fun Element.toValue(): KotlinScriptDefinitionValue { val order = getChildText(KotlinScriptDefinitionValue::order.name)?.toInt() ?: Integer.MAX_VALUE val isEnabled = getChildText(KotlinScriptDefinitionValue::isEnabled.name)?.toBoolean() ?: true diff --git a/idea/tests/org/jetbrains/kotlin/idea/script/ScriptOptionsSaveTest.kt b/idea/tests/org/jetbrains/kotlin/idea/script/ScriptOptionsSaveTest.kt new file mode 100644 index 00000000000..1610f3e60d0 --- /dev/null +++ b/idea/tests/org/jetbrains/kotlin/idea/script/ScriptOptionsSaveTest.kt @@ -0,0 +1,55 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. 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.script + +import com.intellij.testFramework.LightProjectDescriptor +import org.jdom.output.XMLOutputter +import org.jetbrains.kotlin.idea.core.script.ScriptDefinitionsManager +import org.jetbrains.kotlin.idea.core.script.settings.KotlinScriptingSettings +import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase +import org.jetbrains.kotlin.idea.test.KotlinLightProjectDescriptor + +class ScriptOptionsSaveTest : KotlinLightCodeInsightFixtureTestCase() { + + fun testSaveAutoReload() { + val project = myFixture.project + val settings = KotlinScriptingSettings.getInstance(project) + val initialAutoReload = settings.isAutoReloadEnabled + + settings.isAutoReloadEnabled = !initialAutoReload + + assertEquals( + "isAutoReloadEnabled should be set to true", + "", + XMLOutputter().outputString(settings.state) + ) + + settings.isAutoReloadEnabled = initialAutoReload + } + + fun testSaveScriptDefinitionOff() { + val project = myFixture.project + val scriptDefinition = ScriptDefinitionsManager.getInstance(project).getAllDefinitions().first() + + val settings = KotlinScriptingSettings.getInstance(project) + + val initialIsEnabled = settings.isScriptDefinitionEnabled(scriptDefinition) + + settings.setEnabled(scriptDefinition, !initialIsEnabled) + + assertEquals( + "scriptDefinition should be off", + "0false", + XMLOutputter().outputString(settings.state).replace("scriptDefinition .*\">".toRegex(), "scriptDefinition>") + ) + + settings.setEnabled(scriptDefinition, initialIsEnabled) + } + + override fun getProjectDescriptor(): LightProjectDescriptor { + return KotlinLightProjectDescriptor.INSTANCE + } +} \ No newline at end of file