From e28802fbfa3b565235fbae80041f6463c3c0fc80 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Thu, 11 Jul 2019 17:17:48 +0300 Subject: [PATCH] Fix test failure because of duplicates file templates in classpath There're two ways for getting templates in test runtime. One is from sources resource files, the second one is from compiled jar. Remove the first entry manually. A better fix is to extract tests to separate module. This will leave only jar in the test runtime classpath. --- .../kotlin/utils/PrintingLogger.java | 5 +- idea/idea-gradle/build.gradle.kts | 12 +++ .../AbstractGradleMultiplatformWizardTest.kt | 98 ++++++++----------- 3 files changed, 56 insertions(+), 59 deletions(-) diff --git a/compiler/util/src/org/jetbrains/kotlin/utils/PrintingLogger.java b/compiler/util/src/org/jetbrains/kotlin/utils/PrintingLogger.java index dafc012c8ec..f68a8cc5457 100644 --- a/compiler/util/src/org/jetbrains/kotlin/utils/PrintingLogger.java +++ b/compiler/util/src/org/jetbrains/kotlin/utils/PrintingLogger.java @@ -48,8 +48,9 @@ public class PrintingLogger extends Logger { @Override public void debug(@Nullable Throwable t) { - //noinspection ConstantConditions - t.printStackTrace(out); + if (t != null) { + t.printStackTrace(out); + } } @Override diff --git a/idea/idea-gradle/build.gradle.kts b/idea/idea-gradle/build.gradle.kts index 06b540a1e0c..18f8d63d100 100644 --- a/idea/idea-gradle/build.gradle.kts +++ b/idea/idea-gradle/build.gradle.kts @@ -78,6 +78,18 @@ testsJar() projectTest(parallel = true) { workingDir = rootDir useAndroidSdk() + + doFirst { + val mainResourceDirPath = File(project.buildDir, "resources/main").absolutePath + sourceSets["test"].runtimeClasspath = sourceSets["test"].runtimeClasspath.filter { file -> + if (!file.absolutePath.contains(mainResourceDirPath)) { + true + } else { + println("Remove `${file.path}` from the test runtime classpath") + false + } + } + } } configureFormInstrumentation() diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/AbstractGradleMultiplatformWizardTest.kt b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/AbstractGradleMultiplatformWizardTest.kt index dcd13973777..32fc0bb3c33 100644 --- a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/AbstractGradleMultiplatformWizardTest.kt +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/AbstractGradleMultiplatformWizardTest.kt @@ -45,7 +45,7 @@ import com.intellij.util.containers.ContainerUtil import com.intellij.util.containers.ContainerUtilRt import junit.framework.TestCase import org.jetbrains.kotlin.idea.codeInsight.gradle.GradleImportingTestCase -import org.jetbrains.kotlin.idea.configuration.KotlinGradleAbstractMultiplatformModuleBuilder +import org.jetbrains.kotlin.idea.configuration.* import org.jetbrains.kotlin.utils.PrintingLogger import org.jetbrains.plugins.gradle.service.execution.GradleExecutionHelper import org.jetbrains.plugins.gradle.settings.DistributionType @@ -85,66 +85,50 @@ abstract class AbstractGradleMultiplatformWizardTest : ProjectWizardTestCase + if (step is ProjectTypeStep) { + TestCase.assertTrue(step.setSelectedTemplate("Kotlin", builder.presentableName)) + val steps = myWizard.sequence.selectedSteps + TestCase.assertEquals(4, steps.size) + val projectBuilder = myWizard.projectBuilder + UsefulTestCase.assertInstanceOf(projectBuilder, builder::class.java) + with(projectBuilder as KotlinGradleAbstractMultiplatformModuleBuilder) { + explicitPluginVersion = pluginVersion + } - val oldFactory = Logger.getFactory().javaClass - - try { - Logger.setFactory(PrintingFactory::class.java) - - val project = createProject { step -> - if (step is ProjectTypeStep) { - TestCase.assertTrue(step.setSelectedTemplate("Kotlin", builder.presentableName)) - val steps = myWizard.sequence.selectedSteps - TestCase.assertEquals(4, steps.size) - val projectBuilder = myWizard.projectBuilder - UsefulTestCase.assertInstanceOf(projectBuilder, builder::class.java) - with(projectBuilder as KotlinGradleAbstractMultiplatformModuleBuilder) { - explicitPluginVersion = pluginVersion - } - - myProject.reconfigureGradleSettings { - distributionType = DistributionType.DEFAULT_WRAPPED - } + myProject.reconfigureGradleSettings { + distributionType = DistributionType.DEFAULT_WRAPPED } } - - val modules = ModuleManager.getInstance(project).modules - TestCase.assertEquals(1, modules.size) - val module = modules[0] - TestCase.assertTrue(ModuleRootManager.getInstance(module).isSdkInherited) - - val root = ProjectRootManager.getInstance(project).contentRoots[0] - - val settingsScript = VfsUtilCore.findRelativeFile("settings.gradle", root) - TestCase.assertNotNull(settingsScript) - val settingsScriptText = StringUtil.convertLineSeparators(VfsUtilCore.loadText(settingsScript!!)) - TestCase.assertTrue("rootProject.name = " in settingsScriptText) - if (metadataInside) { - TestCase.assertTrue("enableFeaturePreview('GRADLE_METADATA')" in settingsScriptText) - } - - File(root.canonicalPath).assertNoEmptyChildren() - - val buildScript = VfsUtilCore.findRelativeFile("build.gradle", root)!! - val buildScriptText = StringUtil.convertLineSeparators(VfsUtilCore.loadText(buildScript)) - println(buildScriptText) - - if (!performImport) return project - doImportProject(project, useQualifiedModuleNames) - if (testClassNames.isNotEmpty()) { - doTestProject(project, *testClassNames) - } - return project - } finally { - Logger.setFactory(oldFactory) } + + val modules = ModuleManager.getInstance(project).modules + TestCase.assertEquals(1, modules.size) + val module = modules[0] + TestCase.assertTrue(ModuleRootManager.getInstance(module).isSdkInherited) + + val root = ProjectRootManager.getInstance(project).contentRoots[0] + + val settingsScript = VfsUtilCore.findRelativeFile("settings.gradle", root) + TestCase.assertNotNull(settingsScript) + val settingsScriptText = StringUtil.convertLineSeparators(VfsUtilCore.loadText(settingsScript!!)) + TestCase.assertTrue("rootProject.name = " in settingsScriptText) + if (metadataInside) { + TestCase.assertTrue("enableFeaturePreview('GRADLE_METADATA')" in settingsScriptText) + } + + File(root.canonicalPath).assertNoEmptyChildren() + + val buildScript = VfsUtilCore.findRelativeFile("build.gradle", root)!! + val buildScriptText = StringUtil.convertLineSeparators(VfsUtilCore.loadText(buildScript)) + println(buildScriptText) + + if (!performImport) return project + doImportProject(project, useQualifiedModuleNames) + if (testClassNames.isNotEmpty()) { + doTestProject(project, *testClassNames) + } + return project } private fun File.assertNoEmptyChildren() {