From 161d11d9ec383ba35c7a587d9ef902ebdc1b9786 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Fri, 18 Mar 2016 13:00:30 +0300 Subject: [PATCH] Spring Support: Test framework --- .../kotlin/test/util/jetTestUtils.kt | 5 +- .../kotlin/idea/test/ConfigLibraryUtil.java | 19 +++--- .../kotlin/idea/test/TestFixtureExtension.kt | 55 ++++++++++++++++ .../tests/SpringTestFixtureExtension.kt | 65 +++++++++++++++++++ update_dependencies.xml | 30 +++++++-- 5 files changed, 160 insertions(+), 14 deletions(-) create mode 100644 idea/idea-test-framework/src/org/jetbrains/kotlin/idea/test/TestFixtureExtension.kt create mode 100644 idea/idea-ultimate/tests/org/jetbrains/kotlin/idea/spring/tests/SpringTestFixtureExtension.kt diff --git a/compiler/tests/org/jetbrains/kotlin/test/util/jetTestUtils.kt b/compiler/tests/org/jetbrains/kotlin/test/util/jetTestUtils.kt index 63dc30403cb..167d2c2ac9d 100644 --- a/compiler/tests/org/jetbrains/kotlin/test/util/jetTestUtils.kt +++ b/compiler/tests/org/jetbrains/kotlin/test/util/jetTestUtils.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.test.util import com.intellij.openapi.util.io.FileUtil import com.intellij.psi.* import com.intellij.psi.util.PsiTreeUtil +import com.intellij.testFramework.UsefulTestCase import com.intellij.testFramework.fixtures.CodeInsightTestFixture import com.intellij.util.SmartFMap import org.jetbrains.kotlin.psi.KtDeclaration @@ -73,4 +74,6 @@ fun PsiFile.findElementsByCommentPrefix(prefix: String): Map } ) return result -} \ No newline at end of file +} + +inline fun Any?.assertInstanceOf() = UsefulTestCase.assertInstanceOf(this, T::class.java) \ No newline at end of file diff --git a/idea/idea-test-framework/src/org/jetbrains/kotlin/idea/test/ConfigLibraryUtil.java b/idea/idea-test-framework/src/org/jetbrains/kotlin/idea/test/ConfigLibraryUtil.java index 5ed2fcc71ad..57680054448 100644 --- a/idea/idea-test-framework/src/org/jetbrains/kotlin/idea/test/ConfigLibraryUtil.java +++ b/idea/idea-test-framework/src/org/jetbrains/kotlin/idea/test/ConfigLibraryUtil.java @@ -179,19 +179,22 @@ public class ConfigLibraryUtil { ); } + public static void addLibrary(@NotNull Module module, @NotNull String libraryName, @NotNull String rootPath, @NotNull String[] jarPaths) { + NewLibraryEditor editor = new NewLibraryEditor(); + editor.setName(libraryName); + for (String jarPath : jarPaths) { + editor.addRoot(VfsUtil.getUrlForLibraryRoot(new File(rootPath, jarPath)), OrderRootType.CLASSES); + } + + addLibrary(editor, module); + } + public static void configureLibrariesByDirective(@NotNull Module module, String rootPath, String fileText) { for (String libraryInfo : InTextDirectivesUtils.findListWithPrefixes(fileText, "// CONFIGURE_LIBRARY: ")) { int i = libraryInfo.indexOf('@'); String libraryName = libraryInfo.substring(0, i); String[] jarPaths = libraryInfo.substring(i + 1).split(";"); - - NewLibraryEditor editor = new NewLibraryEditor(); - editor.setName(libraryName); - for (String jarPath : jarPaths) { - editor.addRoot(VfsUtil.getUrlForLibraryRoot(new File(rootPath, jarPath)), OrderRootType.CLASSES); - } - - addLibrary(editor, module); + addLibrary(module, libraryName, rootPath, jarPaths); } } diff --git a/idea/idea-test-framework/src/org/jetbrains/kotlin/idea/test/TestFixtureExtension.kt b/idea/idea-test-framework/src/org/jetbrains/kotlin/idea/test/TestFixtureExtension.kt new file mode 100644 index 00000000000..935d45fe532 --- /dev/null +++ b/idea/idea-test-framework/src/org/jetbrains/kotlin/idea/test/TestFixtureExtension.kt @@ -0,0 +1,55 @@ +/* + * 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.idea.test + +import com.intellij.openapi.module.Module +import com.intellij.util.SmartFMap + +interface TestFixtureExtension { + fun setUp(module: Module) + fun tearDown() + + companion object { + @Volatile + private var instances = SmartFMap.emptyMap() + + @Suppress("UNCHECKED_CAST") + fun loadFixture(className: String, module: Module): TestFixtureExtension { + instances[className]?.let { return it } + + return (Class.forName(className).newInstance() as TestFixtureExtension).apply { + this.setUp(module) + instances = instances.plus(className, this) + } + } + + inline fun loadFixture(module: Module) = loadFixture(T::class.qualifiedName!!, module) as T + + fun getFixture(className: String) = instances[className] + + inline fun getFixture() = getFixture(T::class.qualifiedName!!) as? T + + fun unloadFixture(className: String) { + instances[className]?.let { + it.tearDown() + instances = instances.minus(className) + } + } + + inline fun unloadFixture() = unloadFixture(T::class.qualifiedName!!) + } +} \ No newline at end of file diff --git a/idea/idea-ultimate/tests/org/jetbrains/kotlin/idea/spring/tests/SpringTestFixtureExtension.kt b/idea/idea-ultimate/tests/org/jetbrains/kotlin/idea/spring/tests/SpringTestFixtureExtension.kt new file mode 100644 index 00000000000..80e0db4799f --- /dev/null +++ b/idea/idea-ultimate/tests/org/jetbrains/kotlin/idea/spring/tests/SpringTestFixtureExtension.kt @@ -0,0 +1,65 @@ +/* + * 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.idea.spring.tests + +import com.intellij.facet.impl.FacetUtil +import com.intellij.openapi.module.Module +import com.intellij.spring.facet.SpringFacet +import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil +import org.jetbrains.kotlin.idea.test.PluginTestCaseBase +import org.jetbrains.kotlin.idea.test.TestFixtureExtension +import java.util.* + +@Suppress("unused") +class SpringTestFixtureExtension() : TestFixtureExtension { + private var module: Module? = null + + enum class SpringFramework(val version: String, vararg val artifactIds: String) { + FRAMEWORK_4_2_0( + "4.2.0.RELEASE", + "core", "beans", "context" + ) + } + + val SPRING_LIBRARY_ROOT = "${PluginTestCaseBase.getTestDataPathBase()}/spring/_lib" + + override fun setUp(module: Module) { + this.module = module + val library = SpringFramework.FRAMEWORK_4_2_0 + val libraryPath = "$SPRING_LIBRARY_ROOT/spring/${library.version}/" + val jarNames = HashSet(library.artifactIds.size) + for (id in library.artifactIds) { + jarNames.add("spring-$id-${library.version}.jar") + } + ConfigLibraryUtil.addLibrary(module, "spring" + library.version, libraryPath, jarNames.toTypedArray()) + + FacetUtil.addFacet(module, SpringFacet.getSpringFacetType()) + } + + override fun tearDown() { + try { + // clear existing SpringFacet configuration before running next test + module?.let { SpringFacet.getInstance(it) }?.let { + it.removeFileSets() + FacetUtil.deleteFacet(it) + } + } + finally { + module = null + } + } +} \ No newline at end of file diff --git a/update_dependencies.xml b/update_dependencies.xml index 0ff99935eb3..01cd3714f48 100644 --- a/update_dependencies.xml +++ b/update_dependencies.xml @@ -135,7 +135,21 @@ - + + + + + + + + + @@ -143,7 +157,7 @@ - + @@ -153,7 +167,7 @@ - + @@ -175,9 +189,9 @@ - + - + @@ -320,6 +334,12 @@ + + + + + +