Fix saving Kotlin Scripting Setting to xml

^KT-30146 Fixed
This commit is contained in:
Natalia Selezneva
2019-02-28 14:56:32 +03:00
parent 640699e076
commit bc1e836f01
2 changed files with 64 additions and 3 deletions
@@ -103,22 +103,28 @@ class KotlinScriptingSettings : PersistentStateComponent<Element> {
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
@@ -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",
"<KotlinScriptingSettings><option name=\"isAutoReloadEnabled\" value=\"true\" /></KotlinScriptingSettings>",
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",
"<KotlinScriptingSettings><scriptDefinition><order>0</order><isEnabled>false</isEnabled></scriptDefinition></KotlinScriptingSettings>",
XMLOutputter().outputString(settings.state).replace("scriptDefinition .*\">".toRegex(), "scriptDefinition>")
)
settings.setEnabled(scriptDefinition, initialIsEnabled)
}
override fun getProjectDescriptor(): LightProjectDescriptor {
return KotlinLightProjectDescriptor.INSTANCE
}
}