From 0c9182a4b9f5a5794b6b2b6a3ee1996743e22c6b Mon Sep 17 00:00:00 2001 From: Paul Draper Date: Fri, 22 Jul 2016 10:17:24 -0600 Subject: [PATCH] Fix #2677: Tags.ForkedTestGroup doesn't work Move tag to correct task --- .../src/main/scala/sbt/ForkTests.scala | 5 ++-- main/src/main/scala/sbt/Defaults.scala | 2 +- .../tests/fork-test-group-parallel/build.sbt | 18 +++++++++++++++ .../src/test/scala/example/Test.scala | 23 +++++++++++++++++++ .../tests/fork-test-group-parallel/test | 3 +++ 5 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 sbt/src/sbt-test/tests/fork-test-group-parallel/build.sbt create mode 100644 sbt/src/sbt-test/tests/fork-test-group-parallel/src/test/scala/example/Test.scala create mode 100644 sbt/src/sbt-test/tests/fork-test-group-parallel/test diff --git a/main/actions/src/main/scala/sbt/ForkTests.scala b/main/actions/src/main/scala/sbt/ForkTests.scala index bb85025ab..47510fca0 100755 --- a/main/actions/src/main/scala/sbt/ForkTests.scala +++ b/main/actions/src/main/scala/sbt/ForkTests.scala @@ -9,9 +9,10 @@ import java.net.ServerSocket import java.io._ import Tests.{ Output => TestOutput, _ } import ForkMain._ +import sbt.ConcurrentRestrictions.Tag private[sbt] object ForkTests { - def apply(runners: Map[TestFramework, Runner], tests: List[TestDefinition], config: Execution, classpath: Seq[File], fork: ForkOptions, log: Logger): Task[TestOutput] = { + def apply(runners: Map[TestFramework, Runner], tests: List[TestDefinition], config: Execution, classpath: Seq[File], fork: ForkOptions, log: Logger, tag: Tag): Task[TestOutput] = { val opts = processOptions(config, tests, log) import std.TaskExtra._ @@ -23,7 +24,7 @@ private[sbt] object ForkTests { constant(TestOutput(TestResult.Passed, Map.empty[String, SuiteResult], Iterable.empty)) else mainTestTask(runners, opts, classpath, fork, log, config.parallel).tagw(config.tags: _*) - main.dependsOn(all(opts.setup): _*) flatMap { results => + main.tag(tag).dependsOn(all(opts.setup): _*) flatMap { results => all(opts.cleanup).join.map(_ => results) } } diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 4b34f0957..26e13f1fe 100755 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -566,7 +566,7 @@ object Defaults extends BuildCommon { s.log.debug(s"javaOptions: ${opts.runJVMOptions}") val forkedConfig = config.copy(parallel = config.parallel && forkedParallelExecution) s.log.debug(s"Forking tests - parallelism = ${forkedConfig.parallel}") - ForkTests(runners, tests.toList, forkedConfig, cp.files, opts, s.log) tag Tags.ForkedTestGroup + ForkTests(runners, tests.toList, forkedConfig, cp.files, opts, s.log, Tags.ForkedTestGroup) case Tests.InProcess => if (javaOptions.nonEmpty) { s.log.warn("javaOptions will be ignored, fork is set to false") diff --git a/sbt/src/sbt-test/tests/fork-test-group-parallel/build.sbt b/sbt/src/sbt-test/tests/fork-test-group-parallel/build.sbt new file mode 100644 index 000000000..12b577589 --- /dev/null +++ b/sbt/src/sbt-test/tests/fork-test-group-parallel/build.sbt @@ -0,0 +1,18 @@ +concurrentRestrictions in Global := Seq(Tags.limitAll(4)) + +libraryDependencies += "org.specs2" %% "specs2-core" % "3.8.4" % Test + +inConfig(Test)(Seq( + testGrouping := definedTests.value.map { test => new Tests.Group(test.name, Seq(test), Tests.SubProcess( + ForkOptions( + javaHome.value, + outputStrategy.value, + Nil, + Some(baseDirectory.value), + javaOptions.value, + connectInput.value, + envVars.value + ) + ))}, + TaskKey[Unit]("test-failure") := test.failure.value +)) diff --git a/sbt/src/sbt-test/tests/fork-test-group-parallel/src/test/scala/example/Test.scala b/sbt/src/sbt-test/tests/fork-test-group-parallel/src/test/scala/example/Test.scala new file mode 100644 index 000000000..2bd327399 --- /dev/null +++ b/sbt/src/sbt-test/tests/fork-test-group-parallel/src/test/scala/example/Test.scala @@ -0,0 +1,23 @@ +package example + +import java.io.File +import org.specs2.mutable.Specification + +trait Test extends Specification { + "spec" should { + "be run one at time" in { + val lock = new File("lock") + lock.mkdir() should beTrue + Thread.sleep(2000) + lock.delete() should beTrue + } + } +} + +class Test0 extends Test + +class Test1 extends Test + +class Test2 extends Test + +class Test3 extends Test diff --git a/sbt/src/sbt-test/tests/fork-test-group-parallel/test b/sbt/src/sbt-test/tests/fork-test-group-parallel/test new file mode 100644 index 000000000..1dc891feb --- /dev/null +++ b/sbt/src/sbt-test/tests/fork-test-group-parallel/test @@ -0,0 +1,3 @@ +> test-failure +> set concurrentRestrictions in Global += Tags.limit(Tags.ForkedTestGroup, 1) +> test \ No newline at end of file