diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/JUnitRunConfigurationProperties.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/JUnitRunConfigurationProperties.groovy index 86fa6bda1c2e..dd2226cd76ab 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/JUnitRunConfigurationProperties.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/JUnitRunConfigurationProperties.groovy @@ -15,6 +15,7 @@ class JUnitRunConfigurationProperties { final List testClassPatterns final List vmParameters final List requiredArtifacts + final Map envVariables static JUnitRunConfigurationProperties findRunConfiguration(String projectHome, String name, BuildMessages messages) { def file = new File(projectHome, ".idea/runConfigurations/${FileUtil.sanitizeFileName(name)}.xml") @@ -64,18 +65,21 @@ class JUnitRunConfigurationProperties { artifact?.collect { it.@name } ?: [] def vmParameters = options["VM_PARAMETERS"].tokenize() - return new JUnitRunConfigurationProperties(configuration.@name, moduleName, testClassPatterns, vmParameters, requiredArtifacts) + def envVariables = first(configuration.envs)?.env?.collectEntries { [it.@name, it.@value] } ?: [:] + return new JUnitRunConfigurationProperties(configuration.@name, moduleName, testClassPatterns, vmParameters, requiredArtifacts, envVariables) } private static T first(Collection collection) { collection == null || collection.isEmpty() ? null : collection.first() } - JUnitRunConfigurationProperties(String name, String moduleName, List testClassPatterns, List vmParameters, List requiredArtifacts) { + JUnitRunConfigurationProperties(String name, String moduleName, List testClassPatterns, List vmParameters, + List requiredArtifacts, Map envVariables) { this.name = name this.moduleName = moduleName this.testClassPatterns = testClassPatterns this.requiredArtifacts = requiredArtifacts this.vmParameters = vmParameters + this.envVariables = envVariables } } diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/TestingTasksImpl.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/TestingTasksImpl.groovy index 95fca980911d..a06aeed65750 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/TestingTasksImpl.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/TestingTasksImpl.groovy @@ -31,6 +31,7 @@ import org.jetbrains.jps.util.JpsPathUtil import java.util.function.Predicate import java.util.jar.Manifest + /** * @author nik */ @@ -106,7 +107,7 @@ class TestingTasksImpl extends TestingTasks { context.messages.progress("Running '${runConfigurationProperties.name}' run configuration") List filteredVmOptions = removeStandardJvmOptions(runConfigurationProperties.vmParameters) runTestsProcess(runConfigurationProperties.moduleName, null, runConfigurationProperties.testClassPatterns.join(";"), - filteredVmOptions + additionalJvmOptions, [:], false) + filteredVmOptions + additionalJvmOptions, [:], runConfigurationProperties.envVariables, false) } private static List removeStandardJvmOptions(List vmOptions) { @@ -136,7 +137,7 @@ class TestingTasksImpl extends TestingTasks { additionalSystemProperties["exclude.tests.roots.file"] = excludedRootsFile.absolutePath } - runTestsProcess(mainModule, options.testGroups, options.testPatterns, additionalJvmOptions, additionalSystemProperties, false) + runTestsProcess(mainModule, options.testGroups, options.testPatterns, additionalJvmOptions, additionalSystemProperties, [:], false) } private void debugTests(String remoteDebugJvmOptions, List additionalJvmOptions, String defaultMainModule, Predicate rootExcludeCondition) { @@ -161,11 +162,11 @@ class TestingTasksImpl extends TestingTasks { } def mainModule = options.mainModule ?: defaultMainModule def filteredOptions = removeStandardJvmOptions(remoteDebugJvmOptions.split(";").toList()) - runTestsProcess(mainModule, null, junitClass, filteredOptions + additionalJvmOptions, [:], true) + runTestsProcess(mainModule, null, junitClass, filteredOptions + additionalJvmOptions, [:], [:], true) } private void runTestsProcess(String mainModule, String testGroups, String testPatterns, - List additionalJvmOptions, Map additionalSystemProperties, boolean remoteDebugging) { + List additionalJvmOptions, Map additionalSystemProperties, Map envVariables, boolean remoteDebugging) { List testsClasspath = context.getModuleRuntimeClasspath(context.findRequiredModule(mainModule), true) List bootstrapClasspath = context.getModuleRuntimeClasspath(context.findRequiredModule("tests_bootstrap"), false) def classpathFile = new File("$context.paths.temp/junit.classpath") @@ -254,6 +255,9 @@ class TestingTasksImpl extends TestingTasks { context.messages.info("System properties: $systemProperties") context.messages.info("Bootstrap classpath: $bootstrapClasspath") context.messages.info("Tests classpath: $testsClasspath") + if (!envVariables.isEmpty()) { + context.messages.info("Environment variables: $envVariables") + } if (suspendDebugProcess) { context.messages.info(""" @@ -262,11 +266,11 @@ class TestingTasksImpl extends TestingTasks { """) } if (isBootstrapSuiteDefault()) { - runJUnitTask(jvmArgs, systemProperties, bootstrapClasspath) + runJUnitTask(jvmArgs, systemProperties, envVariables, bootstrapClasspath) } else { //run other suites instead of BootstrapTests - runJUnitTask(jvmArgs, systemProperties, testsClasspath) + runJUnitTask(jvmArgs, systemProperties, envVariables, testsClasspath) } if (new File(hprofSnapshotFilePath).exists()) { @@ -283,8 +287,9 @@ class TestingTasksImpl extends TestingTasks { return snapshotsDir } + @SuppressWarnings("GrUnresolvedAccess") @CompileDynamic - private void runJUnitTask(List jvmArgs, Map systemProperties, List bootstrapClasspath) { + private void runJUnitTask(List jvmArgs, Map systemProperties, Map envVariables, List bootstrapClasspath) { defineJunitTask(context.ant, "$context.paths.communityHome/lib") String junitTemp = "$context.paths.temp/junit" @@ -300,6 +305,9 @@ class TestingTasksImpl extends TestingTasks { sysproperty(key: key, value: value) } } + envVariables.each { + env(key: it.key, value: it.value) + } if (teamCityFormatterClasspath != null) { classpath { diff --git a/platform/build-scripts/tests/testResources/org/jetbrains/intellij/build/runConfigurations/test_class.xml b/platform/build-scripts/tests/testResources/org/jetbrains/intellij/build/runConfigurations/test_class.xml index bd86250ae070..11a2e5c6ef54 100644 --- a/platform/build-scripts/tests/testResources/org/jetbrains/intellij/build/runConfigurations/test_class.xml +++ b/platform/build-scripts/tests/testResources/org/jetbrains/intellij/build/runConfigurations/test_class.xml @@ -13,6 +13,10 @@ + + + +