IJI-347 Use main module as root dir for batch tests
authorIlia Shulgin <ilia.shulgin@jetbrains.com>
Thu, 13 Aug 2020 13:02:16 +0000 (16:02 +0300)
committerintellij-monorepo-bot <intellij-monorepo-bot-no-reply@jetbrains.com>
Thu, 13 Aug 2020 14:04:05 +0000 (14:04 +0000)
GitOrigin-RevId: b4edf12ab2065c9e7590be3b139f37ed66cfcb47

platform/build-scripts/groovy/org/jetbrains/intellij/build/TestingOptions.groovy
platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/TestingTasksImpl.groovy

index 9a9369c0b20920baf63c358298993aec64c34b6a..d605fe83f1aa2e1f24652086d7841a26cee985d4 100644 (file)
@@ -95,14 +95,10 @@ class TestingOptions {
   boolean enableCausalProfiling = SystemProperties.getBooleanProperty("intellij.build.test.enable.causal.profiling", false)
 
   /**
-   * Specifies a directory to define tests based on pattern matching.
+   * Pattern to match tests in {@link #mainModule} or default main module tests compilation outputs.
+   * Tests from each matched class will be executed in a fresh JVM.
    *
-   * Note that it should not include package folders.
-   */
-  String batchTestDir = System.getProperty("intellij.build.test.batchTest.dir")
-
-  /**
-   * Pattern to match tests in {@link #batchTestDir}.
+   * E.g. "com/intellij/util/ui/standalone/**Test.class"
    */
   String batchTestIncludes = System.getProperty("intellij.build.test.batchTest.includes")
 
index 887cd2e2bdec8cd8458156f738f50e94f424ca71..8f0ddfcf08e1f05091f605c32799e320bc0fade7 100644 (file)
@@ -85,19 +85,28 @@ class TestingTasksImpl extends TestingTasks {
 
   private void checkOptions() {
     if (options.testConfigurations != null) {
+      def testConfigurationsOptionName = "intellij.build.test.configurations"
       if (options.testPatterns != null) {
-        context.messages.warning("'intellij.build.test.configurations' option is specified so 'intellij.build.test.patterns' will be ignored.")
+        warnOptionIgnored(testConfigurationsOptionName, "intellij.build.test.patterns")
       }
       if (options.testGroups != TestingOptions.ALL_EXCLUDE_DEFINED_GROUP) {
-        context.messages.warning("'intellij.build.test.configurations' option is specified so 'intellij.build.test.groups' will be ignored.")
+        warnOptionIgnored(testConfigurationsOptionName, "intellij.build.test.groups")
       }
-      if (options.testConfigurations != null && options.mainModule != null) {
-        context.messages.warning("'intellij.build.test.configurations' option is specified so 'intellij.build.test.main.module' will be ignored.")
+      if (options.mainModule != null) {
+        warnOptionIgnored(testConfigurationsOptionName, "intellij.build.test.main.module")
       }
     }
     else if (options.testPatterns != null && options.testGroups != TestingOptions.ALL_EXCLUDE_DEFINED_GROUP) {
-      context.messages.warning("'intellij.build.test.patterns' option is specified so 'intellij.build.test.groups' will be ignored.")
+      warnOptionIgnored("intellij.build.test.patterns", "intellij.build.test.groups")
     }
+
+    if (options.batchTestIncludes != null && !isRunningInBatchMode()) {
+      context.messages.warning("'intellij.build.test.batchTest.includes' option will be ignored as other tests matching options are specified.")
+    }
+  }
+
+  private void warnOptionIgnored(String specifiedOption, String ignoredOption) {
+    context.messages.warning("'$specifiedOption' option is specified so '$ignoredOption' will be ignored.")
   }
 
   private void runTestsFromRunConfigurations(List<String> additionalJvmOptions,
@@ -277,7 +286,7 @@ class TestingTasksImpl extends TestingTasks {
     prepareEnvForTestRun(allJvmArgs, allSystemProperties, bootstrapClasspath, remoteDebugging)
 
     if (isRunningInBatchMode()) {
-      context.messages.info("Running tests from ${options.batchTestDir} matched by '${options.batchTestIncludes}' pattern.")
+      context.messages.info("Running tests from ${mainModule} matched by '${options.batchTestIncludes}' pattern.")
     } else {
       context.messages.info("Starting ${testGroups != null ? "test from groups '${testGroups}'" : "all tests"}")
     }
@@ -292,7 +301,7 @@ class TestingTasksImpl extends TestingTasks {
       context.messages.info("Environment variables: $envVariables")
     }
 
-    runJUnitTask(allJvmArgs, allSystemProperties, envVariables, isBootstrapSuiteDefault() && !isRunningInBatchMode() ? bootstrapClasspath : testsClasspath)
+    runJUnitTask(mainModule, allJvmArgs, allSystemProperties, envVariables, isBootstrapSuiteDefault() && !isRunningInBatchMode() ? bootstrapClasspath : testsClasspath)
 
     notifySnapshotBuilt(allJvmArgs)
   }
@@ -403,7 +412,8 @@ class TestingTasksImpl extends TestingTasks {
 
   @SuppressWarnings("GrUnresolvedAccess")
   @CompileDynamic
-  private void runJUnitTask(List<String> jvmArgs, Map<String, String> systemProperties, Map<String, String> envVariables, List<String> bootstrapClasspath) {
+  private void runJUnitTask(String mainModule, List<String> jvmArgs, Map<String, String> systemProperties,
+                            Map<String, String> envVariables, List<String> bootstrapClasspath) {
     defineJunitTask(context.ant, "$context.paths.communityHome/lib")
 
     String junitTemp = "$context.paths.temp/junit"
@@ -454,8 +464,9 @@ class TestingTasksImpl extends TestingTasks {
       }
 
       if (isRunningInBatchMode()) {
+        def mainModuleTestsOutput = context.getModuleTestsOutputPath(context.project.modules.find { it.name == mainModule })
         batchtest {
-          fileset dir: options.batchTestDir, includes: options.batchTestIncludes
+          fileset dir: mainModuleTestsOutput, includes: options.batchTestIncludes
         }
       } else {
         test(name: options.bootstrapSuite)
@@ -540,7 +551,10 @@ class TestingTasksImpl extends TestingTasks {
   }
 
   protected boolean isRunningInBatchMode() {
-    return options.batchTestDir != null
+    return options.batchTestIncludes != null &&
+           options.testPatterns == null &&
+           options.testConfigurations == null &&
+           options.testGroups == TestingOptions.ALL_EXCLUDE_DEFINED_GROUP
   }
 
   private List<String> buildCausalProfilingAgentJvmArg(CausalProfilingOptions options) {