diff --git a/idea/tests/org/jetbrains/kotlin/psi/AbstractInjectionTest.kt b/idea/tests/org/jetbrains/kotlin/psi/AbstractInjectionTest.kt new file mode 100644 index 00000000000..edff0d3db0f --- /dev/null +++ b/idea/tests/org/jetbrains/kotlin/psi/AbstractInjectionTest.kt @@ -0,0 +1,88 @@ +/* + * Copyright 2010-2016 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.psi + +import com.intellij.injected.editor.EditorWindow +import com.intellij.psi.injection.Injectable +import com.intellij.testFramework.LightProjectDescriptor +import junit.framework.TestCase +import org.intellij.plugins.intelliLang.Configuration +import org.intellij.plugins.intelliLang.inject.InjectLanguageAction +import org.intellij.plugins.intelliLang.inject.UnInjectLanguageAction +import org.intellij.plugins.intelliLang.references.FileReferenceInjector +import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase +import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCaseBase +import org.jetbrains.kotlin.idea.test.KotlinLightProjectDescriptor +import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor + +abstract class AbstractInjectionTest : KotlinLightCodeInsightFixtureTestCase() { + override fun getProjectDescriptor(): LightProjectDescriptor { + val testName = getTestName(true) + return when { + testName.endsWith("WithAnnotation") -> KotlinLightProjectDescriptor.INSTANCE + testName.endsWith("WithRuntime") -> KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE + else -> KotlinLightCodeInsightFixtureTestCaseBase.JAVA_LATEST + } + } + + protected fun testInjectionPresent(text: String, languageId: String? = null, unInjectShouldBePresent: Boolean = true) { + myFixture.configureByText("${getTestName(true)}.kt", text.trimMargin()) + + TestCase.assertFalse("Injection action is available. There's probably no injection at caret place", + InjectLanguageAction().isAvailable(project, myFixture.editor, myFixture.file)) + + if (languageId != null) { + val injectedFile = (editor as? EditorWindow)?.injectedFile + KotlinLightCodeInsightFixtureTestCaseBase.assertEquals("Wrong injection language", languageId, injectedFile?.language?.id) + } + + if (unInjectShouldBePresent) { + TestCase.assertTrue("UnInjection action is not available. There's no injection at caret place or some other troubles.", + UnInjectLanguageAction().isAvailable(project, myFixture.editor, myFixture.file)) + } + } + + protected fun doRemoveInjectionTest(before: String, after: String) { + myFixture.setCaresAboutInjection(false) + + myFixture.configureByText("${getTestName(true)}.kt", before.trimMargin()) + + TestCase.assertTrue(UnInjectLanguageAction().isAvailable(project, myFixture.editor, myFixture.file)) + UnInjectLanguageAction.invokeImpl(project, myFixture.editor, myFixture.file) + + myFixture.checkResult(after.trimMargin()) + } + + protected fun doFileReferenceInjectTest(before: String, after: String) { + doTest(FileReferenceInjector(), before, after) + } + + protected fun doTest(injectable: Injectable, before: String, after: String) { + val configuration = Configuration.getProjectInstance(project).advancedConfiguration + val allowed = configuration.isSourceModificationAllowed + + configuration.isSourceModificationAllowed = true + try { + myFixture.configureByText("${getTestName(true)}.kt", before.trimMargin()) + InjectLanguageAction.invokeImpl(project, myFixture.editor, myFixture.file, injectable) + myFixture.checkResult(after.trimMargin()) + } + finally { + configuration.isSourceModificationAllowed = allowed + } + } +} diff --git a/idea/tests/org/jetbrains/kotlin/psi/KotlinInjectionTest.kt b/idea/tests/org/jetbrains/kotlin/psi/KotlinInjectionTest.kt index a288cc8e178..8f4f9c009b9 100644 --- a/idea/tests/org/jetbrains/kotlin/psi/KotlinInjectionTest.kt +++ b/idea/tests/org/jetbrains/kotlin/psi/KotlinInjectionTest.kt @@ -16,11 +16,8 @@ package org.jetbrains.kotlin.psi -import com.intellij.injected.editor.EditorWindow import com.intellij.lang.html.HTMLLanguage import com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReference -import com.intellij.psi.injection.Injectable -import com.intellij.testFramework.LightProjectDescriptor import junit.framework.TestCase import org.intellij.lang.regexp.RegExpLanguage import org.intellij.plugins.intelliLang.Configuration @@ -29,11 +26,8 @@ import org.intellij.plugins.intelliLang.inject.UnInjectLanguageAction import org.intellij.plugins.intelliLang.inject.config.BaseInjection import org.intellij.plugins.intelliLang.inject.config.InjectionPlace import org.intellij.plugins.intelliLang.references.FileReferenceInjector -import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase -import org.jetbrains.kotlin.idea.test.KotlinLightProjectDescriptor -import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor -class KotlinInjectionTest : KotlinLightCodeInsightFixtureTestCase() { +class KotlinInjectionTest : AbstractInjectionTest() { fun testInjectUnInjectOnSimpleString() { myFixture.configureByText("test.kt", """val test = "simple" """) @@ -58,14 +52,6 @@ class KotlinInjectionTest : KotlinLightCodeInsightFixtureTestCase() { unInjectShouldBePresent = false ) - fun testInjectionOnKotlinPredefinedMethodWithRuntime() = testInjectionPresent( - """ - |val test1 = kotlin.text.Regex("some") - """, - RegExpLanguage.INSTANCE.id, - unInjectShouldBePresent = false - ) - fun testInjectionOnJavaCustomInjectionWithAnnotation() { val customInjection = BaseInjection("java") customInjection.injectedLanguageId = HTMLLanguage.INSTANCE.id @@ -292,60 +278,4 @@ class KotlinInjectionTest : KotlinLightCodeInsightFixtureTestCase() { |} """ ) - - override fun getProjectDescriptor(): LightProjectDescriptor { - val testName = getTestName(true) - return when { - testName.endsWith("WithAnnotation") -> KotlinLightProjectDescriptor.INSTANCE - testName.endsWith("WithRuntime") -> KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE - else -> JAVA_LATEST - } - } - - private fun testInjectionPresent(text: String, languageId: String? = null, unInjectShouldBePresent: Boolean = true) { - myFixture.configureByText("${getTestName(true)}.kt", text.trimMargin()) - - TestCase.assertFalse("Injection action is available. There's probably no injection at caret place", - InjectLanguageAction().isAvailable(project, myFixture.editor, myFixture.file)) - - if (languageId != null) { - val injectedFile = (editor as? EditorWindow)?.injectedFile - assertEquals("Wrong injection language", languageId, injectedFile?.language?.id) - } - - if (unInjectShouldBePresent) { - TestCase.assertTrue("UnInjection action is not available. There's no injection at caret place or some other troubles.", - UnInjectLanguageAction().isAvailable(project, myFixture.editor, myFixture.file)) - } - } - - private fun doRemoveInjectionTest(before: String, after: String) { - myFixture.setCaresAboutInjection(false) - - myFixture.configureByText("${getTestName(true)}.kt", before.trimMargin()) - - TestCase.assertTrue(UnInjectLanguageAction().isAvailable(project, myFixture.editor, myFixture.file)) - UnInjectLanguageAction.invokeImpl(project, myFixture.editor, myFixture.file) - - myFixture.checkResult(after.trimMargin()) - } - - private fun doFileReferenceInjectTest(before: String, after: String) { - doTest(FileReferenceInjector(), before, after) - } - - private fun doTest(injectable: Injectable, before: String, after: String) { - val configuration = Configuration.getProjectInstance(project).advancedConfiguration - val allowed = configuration.isSourceModificationAllowed - - configuration.isSourceModificationAllowed = true - try { - myFixture.configureByText("${getTestName(true)}.kt", before.trimMargin()) - InjectLanguageAction.invokeImpl(project, myFixture.editor, myFixture.file, injectable) - myFixture.checkResult(after.trimMargin()) - } - finally { - configuration.isSourceModificationAllowed = allowed - } - } } \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/psi/KotlinStdlibInjectionTest.kt b/idea/tests/org/jetbrains/kotlin/psi/KotlinStdlibInjectionTest.kt new file mode 100644 index 00000000000..d174f3e37eb --- /dev/null +++ b/idea/tests/org/jetbrains/kotlin/psi/KotlinStdlibInjectionTest.kt @@ -0,0 +1,50 @@ +/* + * Copyright 2010-2016 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.psi + +import org.intellij.lang.regexp.RegExpLanguage +import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor + +class KotlinStdlibInjectionTest : AbstractInjectionTest() { + fun testOnRegex0() = testInjection( + """ + |val test1 = kotlin.text.Regex("some") + """, + RegExpLanguage.INSTANCE.id + ) + + fun testOnRegex1() = testInjection( + """ + |val test1 = kotlin.text.Regex("some", RegexOption.COMMENTS) + """, + RegExpLanguage.INSTANCE.id + ) + + fun testOnRegex2() = testInjection( + """ + |val test1 = kotlin.text.Regex("some", setOf(RegexOption.COMMENTS)) + """, + RegExpLanguage.INSTANCE.id + ) + + private fun testInjection(text: String, languageId: String) { + testInjectionPresent(text, languageId, false) + } + + override fun getProjectDescriptor() = KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE +} +