From 24be2e5f25e288620b675f79e1dc4cd74c962f13 Mon Sep 17 00:00:00 2001 From: Mark Harrah Date: Thu, 6 Dec 2012 12:15:34 -0500 Subject: [PATCH] Only make one call to test frameworks per test name. Fixes #520. - Requires selecting one fingerprint if there are more than one - The selected fingerprint is by reverse ordering of Framework.tests - Reverse ordering chosen to work with junit-interface without changes --- testing/TestFramework.scala | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/testing/TestFramework.scala b/testing/TestFramework.scala index 2261f497e..398dab528 100644 --- a/testing/TestFramework.scala +++ b/testing/TestFramework.scala @@ -158,7 +158,17 @@ object TestFramework } if(!frameworks.isEmpty) assignTests() - map.toMap transform { (framework, tests) => (tests.toSet, args(framework)) }; + map.toMap transform { (framework, tests) => ( mergeDuplicates(framework, tests.toSeq), args(framework)) }; + } + private[this] def mergeDuplicates(framework: Framework, tests: Seq[TestDefinition]): Set[TestDefinition] = + { + val frameworkPrints = framework.tests.reverse + def pickOne(prints: Seq[Fingerprint]): Fingerprint = + frameworkPrints.find(prints.toSet) getOrElse prints.head + val uniqueDefs = + for( (name, defs) <- tests.groupBy(_.name) ) yield + new TestDefinition(name, pickOne(defs.map(_.fingerprint))) + uniqueDefs.toSet } private def createTestTasks(loader: ClassLoader, tests: Map[Framework, (Set[TestDefinition], Seq[String])], log: Logger, listeners: Seq[TestReportListener]) =