From 1a8b58cd14f3d3e4fddbfa9a47a92d5fbbc25383 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Thu, 11 Jan 2018 20:12:12 +0300 Subject: [PATCH] 172: [Spring?] Revert "SpringTestFixtureExtension: option to forbid facet autoconfigure added" This reverts commit 0c90753c5bd9ac3fa492a61589d2c8aad3b96cc1. --- .../inspectionData/inspections.test.172 | 2 + .../tests/SpringTestFixtureExtension.kt.172 | 88 +++++++++++++++++++ .../AbstractSpringInspectionTest.kt.172 | 14 +++ 3 files changed, 104 insertions(+) create mode 100644 ultimate/testData/inspections/spring/unconfiguredFacet/inspectionData/inspections.test.172 create mode 100644 ultimate/tests/org/jetbrains/kotlin/idea/spring/tests/SpringTestFixtureExtension.kt.172 create mode 100644 ultimate/tests/org/jetbrains/kotlin/idea/spring/tests/inspections/AbstractSpringInspectionTest.kt.172 diff --git a/ultimate/testData/inspections/spring/unconfiguredFacet/inspectionData/inspections.test.172 b/ultimate/testData/inspections/spring/unconfiguredFacet/inspectionData/inspections.test.172 new file mode 100644 index 00000000000..5b39763229b --- /dev/null +++ b/ultimate/testData/inspections/spring/unconfiguredFacet/inspectionData/inspections.test.172 @@ -0,0 +1,2 @@ +// INSPECTION_CLASS: org.jetbrains.kotlin.idea.spring.inspections.KotlinSpringFacetCodeInspection +// FIXTURE_CLASS: org.jetbrains.kotlin.idea.spring.tests.SpringTestFixtureExtension \ No newline at end of file diff --git a/ultimate/tests/org/jetbrains/kotlin/idea/spring/tests/SpringTestFixtureExtension.kt.172 b/ultimate/tests/org/jetbrains/kotlin/idea/spring/tests/SpringTestFixtureExtension.kt.172 new file mode 100644 index 00000000000..45bae44b840 --- /dev/null +++ b/ultimate/tests/org/jetbrains/kotlin/idea/spring/tests/SpringTestFixtureExtension.kt.172 @@ -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.idea.spring.tests + +import com.intellij.facet.impl.FacetUtil +import com.intellij.openapi.module.Module +import com.intellij.openapi.util.io.FileUtil +import com.intellij.psi.PsiFile +import com.intellij.spring.facet.SpringFacet +import com.intellij.spring.facet.SpringFileSet +import com.intellij.testFramework.fixtures.CodeInsightTestFixture +import com.intellij.testFramework.fixtures.JavaCodeInsightTestFixture +import com.intellij.util.PathUtil +import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil +import org.jetbrains.kotlin.idea.test.TestFixtureExtension +import org.jetbrains.kotlin.test.InTextDirectivesUtils +import java.io.File + +@Suppress("unused") +class SpringTestFixtureExtension() : TestFixtureExtension { + private var module: Module? = null + + override fun setUp(module: Module) { + this.module = module + + val springClasspath = System.getProperty("spring.classpath") + ?: throw RuntimeException("Unable to get a valid classpath from 'spring.classpath' property, please set it accordingly"); + + ConfigLibraryUtil.addLibrary(module, "spring", null, springClasspath.split(File.pathSeparator).toTypedArray()) + + FacetUtil.addFacet(module, SpringFacet.getSpringFacetType()) + } + + fun configureFileSet(fixture: CodeInsightTestFixture, configFiles: Collection): SpringFileSet { + return configureFileSet(fixture, "default", module!!, configFiles) + } + + fun configureFileSet(fixture: CodeInsightTestFixture, id: String, module: Module, configFiles: Collection): SpringFileSet { + return module.getSpringFacetWithAssertion().addFileSet(id, id).apply { + configFiles.forEach { addFile(fixture.copyFileToProject(it)) } + } + } + + fun Module.getSpringFacetWithAssertion() = SpringFacet.getInstance(this) ?: error("No Spring facet in ${this}") + + override fun tearDown() { + try { + // clear existing SpringFacet configuration before running next test + module?.let { module -> + SpringFacet.getInstance(module)?.let { facet -> + facet.removeFileSets() + FacetUtil.deleteFacet(facet) + } + ConfigLibraryUtil.removeLibrary(module, "spring") + } + } + finally { + module = null + } + } +} + +fun SpringTestFixtureExtension.loadConfigByMainFilePath(testPath: String, fixture: JavaCodeInsightTestFixture) { + val mainFileName = PathUtil.getFileName(testPath) + val baseName = FileUtil.getNameWithoutExtension(mainFileName) + val configFileName = if (baseName.endsWith("Xml")) "$baseName-config.xml" else mainFileName + configureFileSet(fixture, listOf(PathUtil.toSystemIndependentName("${PathUtil.getParentPath(testPath)}/$configFileName"))) +} + +fun configureSpringFileSetByDirective(module: Module, directives: String, psiFiles: Collection) { + if (!InTextDirectivesUtils.isDirectiveDefined(directives, "// CONFIGURE_SPRING_FILE_SET")) return + val fileSet = SpringFacet.getInstance(module)!!.addFileSet("default", "default")!! + psiFiles.forEach { fileSet.addFile(it.virtualFile) } +} \ No newline at end of file diff --git a/ultimate/tests/org/jetbrains/kotlin/idea/spring/tests/inspections/AbstractSpringInspectionTest.kt.172 b/ultimate/tests/org/jetbrains/kotlin/idea/spring/tests/inspections/AbstractSpringInspectionTest.kt.172 new file mode 100644 index 00000000000..2db33c7d35f --- /dev/null +++ b/ultimate/tests/org/jetbrains/kotlin/idea/spring/tests/inspections/AbstractSpringInspectionTest.kt.172 @@ -0,0 +1,14 @@ +package org.jetbrains.kotlin.idea.spring.tests.inspections + +import com.intellij.psi.PsiFile +import org.jetbrains.kotlin.idea.codeInsight.AbstractInspectionTest +import org.jetbrains.kotlin.idea.spring.tests.configureSpringFileSetByDirective + +abstract class AbstractSpringInspectionTest : AbstractInspectionTest() { + + override val forceUsePackageFolder: Boolean = true + + override fun configExtra(psiFiles: List, options: String) { + configureSpringFileSetByDirective(myFixture.module, options, psiFiles) + } +} \ No newline at end of file