diff --git a/akka-actor-tests/src/test/scala/akka/actor/SupervisorHierarchySpec.scala b/akka-actor-tests/src/test/scala/akka/actor/SupervisorHierarchySpec.scala index bdd379519b..183712d889 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/SupervisorHierarchySpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/SupervisorHierarchySpec.scala @@ -8,7 +8,6 @@ import language.postfixOps import java.util.concurrent.{ TimeUnit, CountDownLatch } import scala.concurrent.Await import scala.concurrent.duration._ -import scala.math.BigInt.int2bigInt import scala.util.Random import scala.util.control.NoStackTrace import com.typesafe.config.{ ConfigFactory, Config } @@ -17,7 +16,7 @@ import akka.actor.SupervisorStrategy.seqThrowable2Decider import akka.dispatch.{ MessageDispatcher, DispatcherPrerequisites, DispatcherConfigurator, Dispatcher } import akka.pattern.ask import akka.testkit.{ ImplicitSender, EventFilter, DefaultTimeout, AkkaSpec } -import akka.testkit.{ filterException, filterEvents, duration2TestDuration, TestLatch } +import akka.testkit.{ filterException, filterEvents, TestDuration, TestLatch } import akka.testkit.TestEvent.Mute import java.util.concurrent.ConcurrentHashMap import java.lang.ref.WeakReference diff --git a/akka-docs/rst/java/testing.rst b/akka-docs/rst/java/testing.rst index 0f42cab5d6..42a23ec65d 100644 --- a/akka-docs/rst/java/testing.rst +++ b/akka-docs/rst/java/testing.rst @@ -364,8 +364,8 @@ invariably lead to spurious test failures on the heavily loaded Jenkins server internally scaled by a factor taken from the :ref:`configuration`, ``akka.test.timefactor``, which defaults to 1. -You can scale other durations with the same factor by using the implicit conversion -in ``akka.testkit`` package object to add dilated function to :class:`Duration`. +You can scale other durations with the same factor by using ``dilated`` method +in :class:`JavaTestKit`. .. includecode:: code/docs/testkit/TestKitDocTest.java#duration-dilation diff --git a/akka-testkit/src/main/java/akka/testkit/JavaTestKit.java b/akka-testkit/src/main/java/akka/testkit/JavaTestKit.java index 8f68bb4804..fa919494aa 100644 --- a/akka-testkit/src/main/java/akka/testkit/JavaTestKit.java +++ b/akka-testkit/src/main/java/akka/testkit/JavaTestKit.java @@ -100,7 +100,7 @@ public class JavaTestKit { } public Duration dilated(Duration d) { - return d.mul(TestKitExtension.get(p.system()).TestTimeFactor()); + return d.mul(TestKitExtension.get(getSystem()).TestTimeFactor()); } /** @@ -671,8 +671,7 @@ public class JavaTestKit { public void shutdown(ActorSystem actorSystem, Duration duration, Boolean verifySystemShutdown) { boolean vss = verifySystemShutdown != null ? verifySystemShutdown : false; Duration dur = duration != null ? duration : - TestKit.dilated(FiniteDuration.create(5, TimeUnit.SECONDS), - getSystem()).min(FiniteDuration.create(10, TimeUnit.SECONDS)); + dilated(FiniteDuration.create(5, TimeUnit.SECONDS)).min(FiniteDuration.create(10, TimeUnit.SECONDS)); JavaTestKit.shutdownActorSystem(actorSystem, dur, vss); } diff --git a/akka-testkit/src/main/scala/akka/testkit/TestKit.scala b/akka-testkit/src/main/scala/akka/testkit/TestKit.scala index 17ed7372e5..bd0d99dd30 100644 --- a/akka-testkit/src/main/scala/akka/testkit/TestKit.scala +++ b/akka-testkit/src/main/scala/akka/testkit/TestKit.scala @@ -742,6 +742,7 @@ object TestKit { * Java API: Scale timeouts (durations) during tests with the configured * 'akka.test.timefactor'. */ + @deprecated("Use JavaTestKit.dilated", "2.3") def dilated(duration: Duration, system: ActorSystem): Duration = duration * TestKitExtension(system).TestTimeFactor @@ -834,14 +835,4 @@ private[testkit] abstract class CachingPartialFunction[A, B <: AnyRef] extends s var cache: B = _ final def isDefinedAt(x: A): Boolean = try { cache = `match`(x); true } catch { case NoMatch ⇒ cache = null.asInstanceOf[B]; false } final override def apply(x: A): B = cache -} - -/** - * Wrapper for implicit conversion to add dilated function to Duration. - */ -class TestDuration(duration: FiniteDuration) { - def dilated(implicit system: ActorSystem): FiniteDuration = { - // this cast will succeed unless TestTimeFactor is non-finite (which would be a misconfiguration) - (duration * TestKitExtension(system).TestTimeFactor).asInstanceOf[FiniteDuration] - } -} +} \ No newline at end of file diff --git a/akka-testkit/src/main/scala/akka/testkit/TestKitExtension.scala b/akka-testkit/src/main/scala/akka/testkit/TestKitExtension.scala index 50dab3f164..de295f98ae 100644 --- a/akka-testkit/src/main/scala/akka/testkit/TestKitExtension.scala +++ b/akka-testkit/src/main/scala/akka/testkit/TestKitExtension.scala @@ -4,9 +4,7 @@ package akka.testkit import com.typesafe.config.Config -import scala.concurrent.duration.Duration import akka.util.Timeout -import java.util.concurrent.TimeUnit.MILLISECONDS import akka.actor.{ ExtensionId, ActorSystem, Extension, ExtendedActorSystem } import scala.concurrent.duration.FiniteDuration @@ -17,9 +15,10 @@ object TestKitExtension extends ExtensionId[TestKitSettings] { class TestKitSettings(val config: Config) extends Extension { - import akka.util.Helpers.ConfigOps + import akka.util.Helpers._ - val TestTimeFactor = config.getDouble("akka.test.timefactor") + val TestTimeFactor = config.getDouble("akka.test.timefactor"). + requiring(tf ⇒ !tf.isInfinite && tf > 0, "akka.test.timefactor must be positive finite double") val SingleExpectDefaultTimeout: FiniteDuration = config.getMillisDuration("akka.test.single-expect-default") val TestEventFilterLeeway: FiniteDuration = config.getMillisDuration("akka.test.filter-leeway") val DefaultTimeout: Timeout = Timeout(config.getMillisDuration("akka.test.default-timeout")) diff --git a/akka-testkit/src/main/scala/akka/testkit/package.scala b/akka-testkit/src/main/scala/akka/testkit/package.scala index 6b9b055735..3a7bbecf7b 100644 --- a/akka-testkit/src/main/scala/akka/testkit/package.scala +++ b/akka-testkit/src/main/scala/akka/testkit/package.scala @@ -39,12 +39,17 @@ package object testkit { /** * Scala API. Scale timeouts (durations) during tests with the configured * 'akka.test.timefactor'. - * Implicit conversion to add dilated function to Duration. + * Implicit class providing `dilated` method. + * {{{ * import scala.concurrent.duration._ * import akka.testkit._ * 10.milliseconds.dilated - * - * Corresponding Java API is available in TestKit.dilated + * }}} + * Corresponding Java API is available in JavaTestKit.dilated() */ - implicit def duration2TestDuration(duration: FiniteDuration) = new TestDuration(duration) -} + implicit class TestDuration(val duration: FiniteDuration) extends AnyVal { + def dilated(implicit system: ActorSystem): FiniteDuration = + (duration * TestKitExtension(system).TestTimeFactor).asInstanceOf[FiniteDuration] + } + +} \ No newline at end of file diff --git a/akka-testkit/src/test/scala/akka/testkit/TestTimeSpec.scala b/akka-testkit/src/test/scala/akka/testkit/TestTimeSpec.scala index 7bc893ba96..794f485870 100644 --- a/akka-testkit/src/test/scala/akka/testkit/TestTimeSpec.scala +++ b/akka-testkit/src/test/scala/akka/testkit/TestTimeSpec.scala @@ -1,13 +1,10 @@ package akka.testkit -import org.scalatest.Matchers -import org.scalatest.{ BeforeAndAfterEach, WordSpec } import scala.concurrent.duration._ -import com.typesafe.config.Config import org.scalatest.exceptions.TestFailedException @org.junit.runner.RunWith(classOf[org.scalatest.junit.JUnitRunner]) -class TestTimeSpec extends AkkaSpec(Map("akka.test.timefactor" -> 2.0)) with BeforeAndAfterEach { +class TestTimeSpec extends AkkaSpec(Map("akka.test.timefactor" -> 2.0)) { "A TestKit" must {