From 5c82daf7a11eed696ed772469292f4e0e41657d8 Mon Sep 17 00:00:00 2001 From: Andrey Uskov Date: Wed, 23 Jan 2019 14:28:52 +0300 Subject: [PATCH] Improve bunches of GradleImportingTestCase --- .idea/inspectionProfiles/idea_default.xml | 2 +- .../gradle/GradleImportingTestCase.kt | 11 +- .../gradle/GradleImportingTestCase.kt.182 | 294 ------------------ .../gradle/GradleImportingTestLogSaver.kt | 23 ++ .../gradle/GradleImportingTestLogSaver.kt.182 | 18 ++ 5 files changed, 45 insertions(+), 303 deletions(-) delete mode 100644 idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleImportingTestCase.kt.182 create mode 100644 idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleImportingTestLogSaver.kt create mode 100644 idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleImportingTestLogSaver.kt.182 diff --git a/.idea/inspectionProfiles/idea_default.xml b/.idea/inspectionProfiles/idea_default.xml index 293455ed11f..d027fff050f 100644 --- a/.idea/inspectionProfiles/idea_default.xml +++ b/.idea/inspectionProfiles/idea_default.xml @@ -118,6 +118,7 @@ + @@ -401,7 +402,6 @@ - diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleImportingTestCase.kt b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleImportingTestCase.kt index e2f4516178f..7f1c5607dbf 100644 --- a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleImportingTestCase.kt +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleImportingTestCase.kt @@ -36,7 +36,6 @@ import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.vfs.LocalFileSystem import com.intellij.openapi.vfs.VirtualFile import com.intellij.testFramework.IdeaTestUtil -import com.intellij.testFramework.TestLoggerFactory import com.intellij.util.PathUtil import com.intellij.util.containers.ContainerUtil import junit.framework.TestCase @@ -63,7 +62,6 @@ import java.io.IOException import java.io.StringWriter import java.net.URISyntaxException import java.util.* -import com.intellij.openapi.diagnostic.Logger import org.junit.AfterClass // part of org.jetbrains.plugins.gradle.importing.GradleImportingTestCase @@ -285,21 +283,18 @@ abstract class GradleImportingTestCase : ExternalSystemImportingTestCase() { return File(PathUtil.getJarPathForClass(GradleWrapperMain::class.java)) } - private var persistedLoggerFactory : Logger.Factory? = null + private var logSaver: GradleImportingTestLogSaver? = null @JvmStatic @BeforeClass fun setLoggerFactory() { - persistedLoggerFactory = Logger.getFactory() - Logger.setFactory(TestLoggerFactory::class.java) + logSaver = GradleImportingTestLogSaver() } @JvmStatic @AfterClass fun restoreLoggerFactory() { - if (persistedLoggerFactory != null) { - Logger.setFactory(persistedLoggerFactory) - } + logSaver?.restore() } } } diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleImportingTestCase.kt.182 b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleImportingTestCase.kt.182 deleted file mode 100644 index 37122ddd696..00000000000 --- a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleImportingTestCase.kt.182 +++ /dev/null @@ -1,294 +0,0 @@ -/* - * 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.codeInsight.gradle - -import com.intellij.compiler.server.BuildManager -import com.intellij.openapi.application.PathManager -import com.intellij.openapi.application.Result -import com.intellij.openapi.application.WriteAction -import com.intellij.openapi.externalSystem.model.ProjectSystemId -import com.intellij.openapi.externalSystem.model.settings.ExternalSystemExecutionSettings -import com.intellij.openapi.externalSystem.settings.ExternalProjectSettings -import com.intellij.openapi.externalSystem.settings.ExternalSystemSettingsListenerAdapter -import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil -import com.intellij.openapi.fileEditor.FileDocumentManager -import com.intellij.openapi.fileEditor.impl.LoadTextUtil -import com.intellij.openapi.fileTypes.FileTypeManager -import com.intellij.openapi.projectRoots.JavaSdk -import com.intellij.openapi.projectRoots.ProjectJdkTable -import com.intellij.openapi.projectRoots.impl.SdkConfigurationUtil -import com.intellij.openapi.ui.Messages -import com.intellij.openapi.ui.TestDialog -import com.intellij.openapi.util.io.FileUtil -import com.intellij.openapi.vfs.LocalFileSystem -import com.intellij.openapi.vfs.VirtualFile -import com.intellij.testFramework.IdeaTestUtil -import com.intellij.testFramework.TestLoggerFactory -import com.intellij.util.PathUtil -import com.intellij.util.containers.ContainerUtil -import junit.framework.TestCase -import org.gradle.util.GradleVersion -import org.gradle.wrapper.GradleWrapperMain -import org.intellij.lang.annotations.Language -import org.jetbrains.annotations.NonNls -import org.jetbrains.kotlin.gradle.KotlinSdkCreationChecker -import org.jetbrains.kotlin.idea.test.PluginTestCaseBase -import org.jetbrains.kotlin.test.KotlinTestUtils -import org.jetbrains.plugins.gradle.settings.DistributionType -import org.jetbrains.plugins.gradle.settings.GradleProjectSettings -import org.jetbrains.plugins.gradle.settings.GradleSettings -import org.jetbrains.plugins.gradle.util.GradleConstants -import org.jetbrains.plugins.groovy.GroovyFileType -import org.junit.Assume.assumeThat -import org.junit.BeforeClass -import org.junit.Rule -import org.junit.rules.TestName -import org.junit.runner.RunWith -import org.junit.runners.Parameterized -import java.io.File -import java.io.IOException -import java.io.StringWriter -import java.net.URISyntaxException -import java.util.* -import com.intellij.openapi.diagnostic.Logger -import org.junit.AfterClass - -// part of org.jetbrains.plugins.gradle.importing.GradleImportingTestCase -@RunWith(value = Parameterized::class) -abstract class GradleImportingTestCase : ExternalSystemImportingTestCase() { - - protected var sdkCreationChecker : KotlinSdkCreationChecker? = null - - @JvmField - @Rule - var name = TestName() - - @JvmField - @Rule - var testWatcher = ImportingTestWatcher() - - @JvmField - @Rule - var versionMatcherRule = VersionMatcherRule() - - @JvmField - @Parameterized.Parameter - var gradleVersion: String = "" - - private lateinit var myProjectSettings: GradleProjectSettings - private lateinit var myJdkHome: String - - override fun setUp() { - myJdkHome = IdeaTestUtil.requireRealJdkHome() - super.setUp() - assumeThat(gradleVersion, versionMatcherRule.matcher) - runWrite { - ProjectJdkTable.getInstance().findJdk(GRADLE_JDK_NAME)?.let { - ProjectJdkTable.getInstance().removeJdk(it) - } - val jdkHomeDir = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(File(myJdkHome))!! - val jdk = SdkConfigurationUtil.setupSdk(arrayOfNulls(0), jdkHomeDir, JavaSdk.getInstance(), true, null, GRADLE_JDK_NAME) - TestCase.assertNotNull("Cannot create JDK for $myJdkHome", jdk) - ProjectJdkTable.getInstance().addJdk(jdk!!) - FileTypeManager.getInstance().associateExtension(GroovyFileType.GROOVY_FILE_TYPE, "gradle") - - } - myProjectSettings = GradleProjectSettings().apply { - this.isUseQualifiedModuleNames = false - } - GradleSettings.getInstance(myProject).gradleVmOptions = "-Xmx128m -XX:MaxPermSize=64m" - System.setProperty(ExternalSystemExecutionSettings.REMOTE_PROCESS_IDLE_TTL_IN_MS_KEY, GRADLE_DAEMON_TTL_MS.toString()) - configureWrapper() - sdkCreationChecker = KotlinSdkCreationChecker() - } - - override fun tearDown() { - try { - runWrite { - val old = ProjectJdkTable.getInstance().findJdk(GRADLE_JDK_NAME) - if (old != null) { - SdkConfigurationUtil.removeSdk(old) - } - } - - Messages.setTestDialog(TestDialog.DEFAULT) - FileUtil.delete(BuildManager.getInstance().buildSystemDirectory.toFile()) - sdkCreationChecker?.removeNewKotlinSdk() - } finally { - super.tearDown() - } - } - - override fun collectAllowedRoots(roots: MutableList) { - roots.add(myJdkHome) - roots.addAll(ExternalSystemTestCase.collectRootsInside(myJdkHome)) - roots.add(PathManager.getConfigPath()) - } - - override fun getName(): String { - return if (name.methodName == null) super.getName() else FileUtil.sanitizeFileName(name.methodName) - } - - override fun getTestsTempDir(): String = "gradleImportTests" - - override fun getExternalSystemConfigFileName(): String = "build.gradle" - - protected fun importProjectUsingSingeModulePerGradleProject() { - myProjectSettings.isResolveModulePerSourceSet = false - importProject() - } - - override fun importProject() { - ExternalSystemApiUtil.subscribe( - myProject, - GradleConstants.SYSTEM_ID, - object : ExternalSystemSettingsListenerAdapter() { - override fun onProjectsLinked(settings: Collection) { - val item = ContainerUtil.getFirstItem(settings) - if (item is GradleProjectSettings) { - item.gradleJvm = GRADLE_JDK_NAME - } - } - }) - super.importProject() - } - - override fun importProject(@NonNls @Language("Groovy") config: String) { - super.importProject( - """ - allprojects { - repositories { - maven { - url 'http://maven.labs.intellij.net/repo1' - } - } - } - - $config - """.trimIndent() - ) - } - - override fun getCurrentExternalProjectSettings(): GradleProjectSettings = myProjectSettings - - override fun getExternalSystemId(): ProjectSystemId = GradleConstants.SYSTEM_ID - - @Throws(IOException::class, URISyntaxException::class) - private fun configureWrapper() { - val distributionUri = AbstractModelBuilderTest.DistributionLocator().getDistributionFor(GradleVersion.version(gradleVersion)) - - myProjectSettings.distributionType = DistributionType.DEFAULT_WRAPPED - val wrapperJarFrom = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(wrapperJar())!! - - val wrapperJarFromTo = createProjectSubFile("gradle/wrapper/gradle-wrapper.jar") - runWrite { - wrapperJarFromTo.setBinaryContent(wrapperJarFrom.contentsToByteArray()) - } - - val properties = Properties() - properties.setProperty("distributionBase", "GRADLE_USER_HOME") - properties.setProperty("distributionPath", "wrapper/dists") - properties.setProperty("zipStoreBase", "GRADLE_USER_HOME") - properties.setProperty("zipStorePath", "wrapper/dists") - properties.setProperty("distributionUrl", distributionUri.toString()) - - val writer = StringWriter() - properties.store(writer, null) - - createProjectSubFile("gradle/wrapper/gradle-wrapper.properties", writer.toString()) - } - - protected open fun testDataDirName(): String = "" - - protected fun testDataDirectory(): File { - val baseDir = "${PluginTestCaseBase.getTestDataPathBase()}/gradle/${testDataDirName()}/" - return File(baseDir, getTestName(true).substringBefore("_")) - } - - protected fun configureByFiles(): List { - val rootDir = testDataDirectory() - assert(rootDir.exists()) { "Directory ${rootDir.path} doesn't exist" } - - return rootDir.walk().mapNotNull { - when { - it.isDirectory -> null - !it.name.endsWith(SUFFIX) -> { - createProjectSubFile(it.path.substringAfter(rootDir.path + File.separator), it.readText()) - } - else -> null - } - }.toList() - } - - protected fun importProjectFromTestData(): List { - val files = configureByFiles() - importProject() - return files - } - - protected fun checkFiles(files: List) { - FileDocumentManager.getInstance().saveAllDocuments() - - files.filter { - it.name == GradleConstants.DEFAULT_SCRIPT_NAME - || it.name == GradleConstants.KOTLIN_DSL_SCRIPT_NAME - || it.name == GradleConstants.SETTINGS_FILE_NAME - } - .forEach { - if (it.name == GradleConstants.SETTINGS_FILE_NAME && !File(testDataDirectory(), it.name + SUFFIX).exists()) return@forEach - val actualText = LoadTextUtil.loadText(it).toString() - val expectedFileName = if (File(testDataDirectory(), it.name + ".$gradleVersion" + SUFFIX).exists()) { - it.name + ".$gradleVersion" + SUFFIX - } else { - it.name + SUFFIX - } - KotlinTestUtils.assertEqualsToFile(File(testDataDirectory(), expectedFileName), actualText) - } - } - - - private fun runWrite(f: () -> Unit) { - object : WriteAction() { - override fun run(result: Result) { - f() - } - }.execute() - } - - companion object { - const val GRADLE_JDK_NAME = "Gradle JDK" - private const val GRADLE_DAEMON_TTL_MS = 10000 - - @JvmStatic - protected val SUFFIX = ".after" - - @JvmStatic - @Parameterized.Parameters(name = "{index}: with Gradle-{0}") - fun data(): Collection> { - return Arrays.asList(*AbstractModelBuilderTest.SUPPORTED_GRADLE_VERSIONS) - } - - fun wrapperJar(): File { - return File(PathUtil.getJarPathForClass(GradleWrapperMain::class.java)) - } - - @JvmStatic - @BeforeClass - fun setLoggerFactory() { - Logger.setFactory(TestLoggerFactory::class.java) - } - } -} diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleImportingTestLogSaver.kt b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleImportingTestLogSaver.kt new file mode 100644 index 00000000000..32047cf1360 --- /dev/null +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleImportingTestLogSaver.kt @@ -0,0 +1,23 @@ +/* + * 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.codeInsight.gradle + +import com.intellij.openapi.diagnostic.Logger +import com.intellij.testFramework.TestLoggerFactory + +class GradleImportingTestLogSaver() { + private val persistedLoggerFactory: Logger.Factory? = Logger.getFactory() + + init { + Logger.setFactory(TestLoggerFactory::class.java) + } + + fun restore() { + if (persistedLoggerFactory != null) { + Logger.setFactory(persistedLoggerFactory) + } + } +} \ No newline at end of file diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleImportingTestLogSaver.kt.182 b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleImportingTestLogSaver.kt.182 new file mode 100644 index 00000000000..bbb2823d205 --- /dev/null +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleImportingTestLogSaver.kt.182 @@ -0,0 +1,18 @@ +/* + * 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.codeInsight.gradle + +import com.intellij.openapi.diagnostic.Logger +import com.intellij.testFramework.TestLoggerFactory + +class GradleImportingTestLogSaver() { + init { + Logger.setFactory(TestLoggerFactory::class.java) + } + + fun restore() { + } +} \ No newline at end of file