Only allow a single task to run at any point in time if parallelExecution in Test is false.

This commit is contained in:
Eugene Vigdorchik 2012-05-11 12:24:00 +04:00 committed by Mark Harrah
parent 6f03b83446
commit c795511e13
2 changed files with 16 additions and 5 deletions

View File

@ -383,7 +383,7 @@ object Defaults extends BuildCommon
Tests(frameworks, loader, tests, config, s.log)
}
}
Tests.foldTasks(groupTasks)
Tests.foldTasks(groupTasks, config.parallel)
}
def selectedFilter(args: Seq[String]): String => Boolean =

View File

@ -122,10 +122,21 @@ object Tests
def processResults(results: Iterable[(String, TestResult.Value)]): (TestResult.Value, Map[String, TestResult.Value]) =
(overall(results.map(_._2)), results.toMap)
def foldTasks(results: Seq[Task[Output]]): Task[Output] =
reduced(results.toIndexedSeq, {
case ((v1, m1), (v2, m2)) => (if (v1.id < v2.id) v2 else v1, m1 ++ m2)
})
def foldTasks(results: Seq[Task[Output]], parallel: Boolean): Task[Output] =
if (parallel)
reduced(results.toIndexedSeq, {
case ((v1, m1), (v2, m2)) => (if (v1.id < v2.id) v2 else v1, m1 ++ m2)
})
else {
def sequence(tasks: List[Task[Output]], acc: List[Output]): Task[List[Output]] = tasks match {
case Nil => task(acc.reverse)
case hd::tl => hd flatMap { out => sequence(tl, out::acc) }
}
sequence(results.toList, List()) map { ress =>
val (rs, ms) = ress.unzip
(overall(rs), ms reduce (_ ++ _))
}
}
def overall(results: Iterable[TestResult.Value]): TestResult.Value =
(TestResult.Passed /: results) { (acc, result) => if(acc.id < result.id) result else acc }
def discover(frameworks: Seq[Framework], analysis: Analysis, log: Logger): (Seq[TestDefinition], Set[String]) =