diff --git a/akka-actor-typed-tests/src/test/java/akka/actor/typed/javadsl/AdapterTest.java b/akka-actor-typed-tests/src/test/java/akka/actor/typed/javadsl/AdapterTest.java index a66cc0d2da..f3fd53dc41 100644 --- a/akka-actor-typed-tests/src/test/java/akka/actor/typed/javadsl/AdapterTest.java +++ b/akka-actor-typed-tests/src/test/java/akka/actor/typed/javadsl/AdapterTest.java @@ -9,6 +9,8 @@ import org.junit.Test; import org.scalatest.junit.JUnitSuite; import scala.concurrent.duration.FiniteDuration; + +import java.time.Duration; import java.util.concurrent.TimeUnit; import akka.actor.ActorSystem; import akka.testkit.AkkaJUnitActorSystemResource; @@ -316,7 +318,7 @@ public class AdapterTest extends JUnitSuite { } finally { system.eventStream().setLogLevel(originalLogLevel); } - probe.expectNoMsg(FiniteDuration.create(100, TimeUnit.MILLISECONDS)); // no pong + probe.expectNoMessage(Duration.ofMillis(100)); // no pong } @Test diff --git a/akka-docs/src/main/paradox/testing.md b/akka-docs/src/main/paradox/testing.md index 63fabc3eed..2cde012a26 100644 --- a/akka-docs/src/main/paradox/testing.md +++ b/akka-docs/src/main/paradox/testing.md @@ -81,7 +81,7 @@ out, in which case they use the default value from configuration item `akka.test.single-expect-default` which itself defaults to 3 seconds (or they obey the innermost enclosing `Within` as detailed [below](#testkit-within)). The full signatures are: -* @scala[`expectMsg[T](d: Duration, msg: T): T`]@java[`public  T expectMsgEquals(FiniteDuration max, T msg)`] +* @scala[`expectMsg[T](d: Duration, msg: T): T`]@java[`public  T expectMsgEquals(Duration max, T msg)`] The given message object must be received within the specified time; the object will be returned. * @scala[`expectMsgPF[T](d: Duration)(pf: PartialFunction[Any, T]): T`]@java[`public  T expectMsgPF(Duration max, String hint, Function f)`] @@ -91,7 +91,7 @@ the @scala[partial] function to the received message is returned. @scala[The dur be left unspecified (empty parentheses are required in this case) to use the deadline from the innermost enclosing [within](#testkit-within) block instead.] -* @scala[`expectMsgClass[T](d: Duration, c: Class[T]): T`]@java[`public  T expectMsgClass(FiniteDuration max, Class c)`] +* @scala[`expectMsgClass[T](d: Duration, c: Class[T]): T`]@java[`public  T expectMsgClass(Duration max, Class c)`] An object which is an instance of the given `Class` must be received within the allotted time frame; the object will be returned. Note that this does a conformance check; if you need the class to be equal, @scala[have a look at @@ -111,12 +111,12 @@ method is approximately equivalent to An object must be received within the given time, and it must be equal ( compared with @scala[`==`]@java[`equals()`]) to at least one of the passed reference objects; the received object will be returned. -* @scala[`expectMsgAnyClassOf[T](d: Duration, obj: Class[_ <: T]*): T`]@java[`public  T expectMsgAnyClassOf(FiniteDuration max, Class... c)`] +* @scala[`expectMsgAnyClassOf[T](d: Duration, obj: Class[_ <: T]*): T`]@java[`public  T expectMsgAnyClassOf(Duration max, Class... c)`] An object must be received within the given time, and it must be an instance of at least one of the supplied `Class` objects; the received object will be returned. Note that this does a conformance check, if you need the class to be equal you need to verify that afterwards. -* @scala[`expectMsgAllOf[T](d: Duration, obj: T*): Seq[T]`]@java[`public List expectMsgAllOf(FiniteDuration max, Object... msg)`] +* @scala[`expectMsgAllOf[T](d: Duration, obj: T*): Seq[T]`]@java[`public List expectMsgAllOf(Duration max, Object... msg)`] A number of objects matching the size of the supplied object array must be received within the given time, and for each of the given objects there must exist at least one among the received ones which equals (compared with @@ -139,11 +139,11 @@ instance of this class. The full sequence of received objects is returned. @@@ -* @scala[`expectNoMsg(d: Duration)`]@java[`public void expectNoMsg(FiniteDuration max)`] +* @scala[`expectNoMessage(d: Duration)`]@java[`public void expectNoMessage(Duration max)`] No message must be received within the given time. This also fails if a message has been received before calling this method which has not been removed from the queue using one of the other methods. -* @scala[`receiveN(n: Int, d: Duration): Seq[AnyRef]`]@java[`List receiveN(int n, FiniteDuration max)`] +* @scala[`receiveN(n: Int, d: Duration): Seq[AnyRef]`]@java[`List receiveN(int n, Duration max)`] `n` messages must be received within the given time; the received messages are returned. @@ -272,11 +272,7 @@ checked external to the examination, which is facilitated by a new construct for managing time constraints: Scala -: ```scala -within([min, ]max) { - ... -} -``` +: @@snip [TestkitDocSpec.scala]($code$/scala/docs/testkit/TestkitDocSpec.scala) { #test-within } Java : @@snip [TestKitDocTest.java]($code$/java/jdocs/testkit/TestKitDocTest.java) { #test-within } @@ -289,13 +285,11 @@ you do not specify it, it is inherited from the innermost enclosing `within` block. It should be noted that if the last message-receiving assertion of the block is -`expectNoMsg` or `receiveWhile`, the final check of the +`expectNoMessage` or `receiveWhile`, the final check of the `within` is skipped in order to avoid false positives due to wake-up latencies. This means that while individual contained assertions still use the maximum time bound, the overall block may take arbitrarily longer in this case. -Scala -: @@snip [TestkitDocSpec.scala]($code$/scala/docs/testkit/TestkitDocSpec.scala) { #test-within } @@@ note diff --git a/akka-docs/src/test/java/jdocs/testkit/TestKitDocTest.java b/akka-docs/src/test/java/jdocs/testkit/TestKitDocTest.java index 0091c6bb4f..122ceb6442 100644 --- a/akka-docs/src/test/java/jdocs/testkit/TestKitDocTest.java +++ b/akka-docs/src/test/java/jdocs/testkit/TestKitDocTest.java @@ -31,16 +31,12 @@ import akka.actor.PoisonPill; import akka.actor.Props; import akka.actor.Terminated; import akka.actor.AbstractActor; -import akka.actor.AbstractActor.Receive; import akka.testkit.TestActor.AutoPilot; -import scala.concurrent.duration.Duration; -import scala.concurrent.duration.FiniteDuration; -import java.util.Arrays; import java.util.List; import java.util.concurrent.CompletableFuture; -import java.util.concurrent.TimeUnit; +import java.time.Duration; public class TestKitDocTest extends AbstractJavaTest { @@ -92,8 +88,7 @@ public class TestKitDocTest extends AbstractJavaTest { void triggerScheduling() { getTimers().startSingleTimer( SCHED_KEY, - new ScheduledMessage(), - Duration.create(500, TimeUnit.MILLISECONDS) + new ScheduledMessage(), Duration.ofMillis(500) ); } } @@ -129,7 +124,7 @@ public class TestKitDocTest extends AbstractJavaTest { //#test-within new TestKit(system) {{ getRef().tell(42, ActorRef.noSender()); - within(java.time.Duration.ZERO, java.time.Duration.ofSeconds(1), () -> { + within(Duration.ZERO, Duration.ofSeconds(1), () -> { assertEquals((Integer) 42, expectMsgClass(Integer.class)); return null; }); @@ -162,7 +157,7 @@ public class TestKitDocTest extends AbstractJavaTest { getRef().tell(43, ActorRef.noSender()); getRef().tell("hello", ActorRef.noSender()); - final List out = receiveWhile(duration("1 second"), in -> { + final List out = receiveWhile(Duration.ofSeconds(1), in -> { if (in instanceof Integer) { return in.toString(); } else { @@ -176,7 +171,7 @@ public class TestKitDocTest extends AbstractJavaTest { //#test-receivewhile new TestKit(system) {{ //#test-receivewhile-full - receiveWhile(duration("100 millis"), duration("50 millis"), 12, in -> { + receiveWhile(Duration.ofMillis(100), Duration.ofMillis(50), 12, in -> { //#match-elided throw JavaPartialFunction.noMatch(); //#match-elided @@ -190,7 +185,7 @@ public class TestKitDocTest extends AbstractJavaTest { //#test-awaitCond new TestKit(system) {{ getRef().tell(42, ActorRef.noSender()); - awaitCond(java.time.Duration.ofSeconds(1), java.time.Duration.ofMillis(100), this::msgAvailable); + awaitCond(Duration.ofSeconds(1), Duration.ofMillis(100), this::msgAvailable); }}; //#test-awaitCond } @@ -200,7 +195,7 @@ public class TestKitDocTest extends AbstractJavaTest { //#test-awaitAssert new TestKit(system) {{ getRef().tell(42, ActorRef.noSender()); - awaitAssert(duration("1 second"), duration("100 millis"), () -> { + awaitAssert(Duration.ofSeconds(1), Duration.ofMillis(100), () -> { assertEquals(msgAvailable(), true); return null; }); @@ -260,8 +255,8 @@ public class TestKitDocTest extends AbstractJavaTest { public void demonstrateDilated() { //#duration-dilation new TestKit(system) {{ - final java.time.Duration original = java.time.Duration.ofSeconds(1); - final java.time.Duration stretched = dilated(original); + final Duration original = Duration.ofSeconds(1); + final Duration stretched = dilated(original); assertTrue("dilated", stretched.compareTo(original) >= 0); }}; //#duration-dilation @@ -399,7 +394,7 @@ public class TestKitDocTest extends AbstractJavaTest { //#test-within-probe new TestKit(system) {{ final TestKit probe = new TestKit(system); - within(java.time.Duration.ofSeconds(1), () -> probe.expectMsgEquals("hello")); + within(Duration.ofSeconds(1), () -> probe.expectMsgEquals("hello")); }}; //#test-within-probe } catch (AssertionError e) { diff --git a/akka-docs/src/test/java/jdocs/testkit/TestKitSampleTest.java b/akka-docs/src/test/java/jdocs/testkit/TestKitSampleTest.java index 4641a2a613..cb3cfa4e6b 100644 --- a/akka-docs/src/test/java/jdocs/testkit/TestKitSampleTest.java +++ b/akka-docs/src/test/java/jdocs/testkit/TestKitSampleTest.java @@ -16,7 +16,8 @@ import akka.actor.ActorRef; import akka.actor.ActorSystem; import akka.actor.Props; import akka.actor.AbstractActor; -import scala.concurrent.duration.Duration; + +import java.time.Duration; public class TestKitSampleTest extends AbstractJavaTest { @@ -67,10 +68,10 @@ public class TestKitSampleTest extends AbstractJavaTest { // like a real resource would be passed in production subject.tell(probe.getRef(), getRef()); // await the correct response - expectMsg(java.time.Duration.ofSeconds(1), "done"); + expectMsg(Duration.ofSeconds(1), "done"); // the run() method needs to finish within 3 seconds - within(java.time.Duration.ofSeconds(3), () -> { + within(Duration.ofSeconds(3), () -> { subject.tell("hello", getRef()); // This is a demo: would normally use expectMsgEquals(). @@ -78,13 +79,13 @@ public class TestKitSampleTest extends AbstractJavaTest { awaitCond(probe::msgAvailable); // response must have been enqueued to us before probe - expectMsg(java.time.Duration.ZERO, "world"); + expectMsg(Duration.ZERO, "world"); // check that the probe we injected earlier got the msg - probe.expectMsg(java.time.Duration.ZERO, "hello"); + probe.expectMsg(Duration.ZERO, "hello"); Assert.assertEquals(getRef(), probe.getLastSender()); // Will wait for the rest of the 3 seconds - expectNoMsg(); + expectNoMessage(); return null; }); }}; diff --git a/akka-persistence/src/test/java/akka/persistence/fsm/AbstractPersistentFSMTest.java b/akka-persistence/src/test/java/akka/persistence/fsm/AbstractPersistentFSMTest.java index e6b99bf812..a744c27038 100644 --- a/akka-persistence/src/test/java/akka/persistence/fsm/AbstractPersistentFSMTest.java +++ b/akka-persistence/src/test/java/akka/persistence/fsm/AbstractPersistentFSMTest.java @@ -18,11 +18,11 @@ import java.util.Collections; import java.util.List; import java.util.UUID; import java.util.concurrent.TimeUnit; +import java.time.Duration; import akka.persistence.fsm.PersistentFSM.CurrentState; import org.junit.Test; import org.scalatest.junit.JUnitSuite; -import scala.concurrent.duration.Duration; import static akka.persistence.fsm.PersistentFSM.FSMState; @@ -129,13 +129,13 @@ public class AbstractPersistentFSMTest extends JUnitSuite { PersistentFSM.Transition stateTransition = expectMsgClass(PersistentFSM.Transition.class); assertTransition(stateTransition, fsmRef, UserState.LOOKING_AROUND, UserState.SHOPPING); - within(duration("0.9 seconds"), remainingOrDefault(), () -> { + within(Duration.ofMillis(900), getRemainingOrDefault(), () -> { PersistentFSM.Transition st = expectMsgClass(PersistentFSM.Transition.class); assertTransition(st, fsmRef, UserState.SHOPPING, UserState.INACTIVE); return null; }); - within(duration("1.9 seconds"), remainingOrDefault(), () -> expectTerminated(fsmRef)); + within(Duration.ofMillis(1900), getRemainingOrDefault(), () -> expectTerminated(fsmRef)); }}; } @@ -296,7 +296,7 @@ public class AbstractPersistentFSMTest extends JUnitSuite { PersistentFSM.Transition stateTransition = expectMsgClass(PersistentFSM.Transition.class); assertTransition(stateTransition, fsmRef, UserState.LOOKING_AROUND, UserState.SHOPPING); - expectNoMsg(duration("0.6seconds")); //randomly chosen delay, less than the timeout, before stopping the FSM + expectNoMessage(Duration.ofMillis(600)); //randomly chosen delay, less than the timeout, before stopping the FSM fsmRef.tell(PoisonPill.getInstance(), ActorRef.noSender()); expectTerminated(fsmRef); @@ -308,13 +308,13 @@ public class AbstractPersistentFSMTest extends JUnitSuite { currentState = expectMsgClass(akka.persistence.fsm.PersistentFSM.CurrentState.class); assertEquals(currentState.state(), UserState.SHOPPING); - within(duration("0.9 seconds"), remainingOrDefault(), () -> { + within(Duration.ofMillis(900), getRemainingOrDefault(), () -> { PersistentFSM.Transition st = expectMsgClass(PersistentFSM.Transition.class); assertTransition(st, recoveredFsmRef, UserState.SHOPPING, UserState.INACTIVE); return null; }); - expectNoMsg(duration("0.9 seconds")); //randomly chosen delay, less than the timeout, before stopping the FSM + expectNoMessage(Duration.ofMillis(900)); //randomly chosen delay, less than the timeout, before stopping the FSM recoveredFsmRef.tell(PoisonPill.getInstance(), ActorRef.noSender()); expectTerminated(recoveredFsmRef); @@ -325,7 +325,7 @@ public class AbstractPersistentFSMTest extends JUnitSuite { currentState = expectMsgClass(akka.persistence.fsm.PersistentFSM.CurrentState.class); assertEquals(currentState.state(), UserState.INACTIVE); - within(duration("1.9 seconds"), remainingOrDefault(), () -> expectTerminated(recoveredFsmRef2)); + within(Duration.ofMillis(1900), getRemainingOrDefault(), () -> expectTerminated(recoveredFsmRef2)); }}; } @@ -511,7 +511,7 @@ public class AbstractPersistentFSMTest extends JUnitSuite { matchEvent(AddItem.class, (event, data) -> goTo(UserState.SHOPPING).applying(new ItemAdded(event.getItem())) - .forMax(Duration.create(1, TimeUnit.SECONDS)) + .forMax(scala.concurrent.duration.Duration.create(1, TimeUnit.SECONDS)) ) .event(GetCurrentCart.class, (event, data) -> stay().replying(data)) ); @@ -520,7 +520,7 @@ public class AbstractPersistentFSMTest extends JUnitSuite { matchEvent(AddItem.class, (event, data) -> stay().applying(new ItemAdded(event.getItem())) - .forMax(Duration.create(1, TimeUnit.SECONDS))) + .forMax(scala.concurrent.duration.Duration.create(1, TimeUnit.SECONDS))) .event(Buy.class, //#customer-andthen-example (event, data) -> @@ -544,7 +544,7 @@ public class AbstractPersistentFSMTest extends JUnitSuite { .event(GetCurrentCart.class, (event, data) -> stay().replying(data)) .event(StateTimeout$.class, (event, data) -> - goTo(UserState.INACTIVE).forMax(Duration.create(2, TimeUnit.SECONDS))) + goTo(UserState.INACTIVE).forMax(scala.concurrent.duration.Duration.create(2, TimeUnit.SECONDS))) ); @@ -552,7 +552,7 @@ public class AbstractPersistentFSMTest extends JUnitSuite { matchEvent(AddItem.class, (event, data) -> goTo(UserState.SHOPPING).applying(new ItemAdded(event.getItem())) - .forMax(Duration.create(1, TimeUnit.SECONDS))) + .forMax(scala.concurrent.duration.Duration.create(1, TimeUnit.SECONDS))) .event(GetCurrentCart.class, (event, data) -> stay().replying(data)) .event(StateTimeout$.class, (event, data) -> @@ -641,7 +641,7 @@ public class AbstractPersistentFSMTest extends JUnitSuite { new TestKit(system) {{ ActorRef persistentActor = system.actorOf(Props.create(PFSMwithLog.class)); persistentActor.tell("check", getRef()); - expectMsg(duration("1000 millis"), "started"); + expectMsg(Duration.ofSeconds(1), "started"); }}; } } diff --git a/akka-stream-tests/src/test/java/akka/stream/io/OutputStreamSourceTest.java b/akka-stream-tests/src/test/java/akka/stream/io/OutputStreamSourceTest.java index 5ee95bb605..f845591f90 100644 --- a/akka-stream-tests/src/test/java/akka/stream/io/OutputStreamSourceTest.java +++ b/akka-stream-tests/src/test/java/akka/stream/io/OutputStreamSourceTest.java @@ -7,7 +7,7 @@ package akka.stream.io; import static org.junit.Assert.assertEquals; import java.io.OutputStream; -import java.util.concurrent.TimeUnit; +import java.time.Duration; import akka.testkit.javadsl.TestKit; import org.junit.ClassRule; @@ -22,7 +22,6 @@ import akka.stream.javadsl.Source; import akka.stream.javadsl.StreamConverters; import akka.stream.testkit.Utils; import akka.util.ByteString; -import scala.concurrent.duration.FiniteDuration; public class OutputStreamSourceTest extends StreamTest { public OutputStreamSourceTest() { @@ -34,8 +33,8 @@ public class OutputStreamSourceTest extends StreamTest { Utils.UnboundedMailboxConfig()); @Test public void mustSendEventsViaOutputStream() throws Exception { - final FiniteDuration timeout = FiniteDuration.create(3, TimeUnit.SECONDS); final TestKit probe = new TestKit(system); + final Duration timeout = Duration.ofSeconds(3); final Source source = StreamConverters.asOutputStream(timeout); final OutputStream s = source.to(Sink.foreach(new Procedure() { diff --git a/akka-stream-tests/src/test/java/akka/stream/javadsl/FlowTest.java b/akka-stream-tests/src/test/java/akka/stream/javadsl/FlowTest.java index 7a6b84ee90..f33e09f86d 100644 --- a/akka-stream-tests/src/test/java/akka/stream/javadsl/FlowTest.java +++ b/akka-stream-tests/src/test/java/akka/stream/javadsl/FlowTest.java @@ -22,8 +22,6 @@ import akka.testkit.javadsl.TestKit; import org.junit.ClassRule; import org.junit.Test; import org.reactivestreams.Publisher; -import scala.concurrent.duration.Duration; -import scala.concurrent.duration.FiniteDuration; import akka.testkit.AkkaJUnitActorSystemResource; import java.util.*; @@ -34,6 +32,7 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.stream.Stream; +import java.time.Duration; import static akka.stream.testkit.StreamTestKit.PublisherProbeSubscription; import static org.junit.Assert.*; @@ -190,9 +189,9 @@ public class FlowTest extends StreamTest { probe.expectMsgEquals(0); probe.expectMsgEquals(1); - FiniteDuration duration = Duration.apply(200, TimeUnit.MILLISECONDS); + Duration duration = Duration.ofMillis(200); - probe.expectNoMsg(duration); + probe.expectNoMessage(duration); future.toCompletableFuture().get(3, TimeUnit.SECONDS); } @@ -1013,7 +1012,7 @@ public class FlowTest extends StreamTest { public void mustBeAbleToUseInitialTimeout() throws Throwable { try { try { - Source. maybe().via(Flow.of(Integer.class).initialTimeout(Duration.create(1, "second"))) + Source. maybe().via(Flow.of(Integer.class).initialTimeout(Duration.ofSeconds(1))) .runWith(Sink. head(), materializer).toCompletableFuture().get(3, TimeUnit.SECONDS); org.junit.Assert.fail("A TimeoutException was expected"); } catch (ExecutionException e) { @@ -1029,7 +1028,7 @@ public class FlowTest extends StreamTest { public void mustBeAbleToUseCompletionTimeout() throws Throwable { try { try { - Source. maybe().via(Flow.of(Integer.class).completionTimeout(Duration.create(1, "second"))) + Source. maybe().via(Flow.of(Integer.class).completionTimeout(Duration.ofSeconds(1))) .runWith(Sink. head(), materializer).toCompletableFuture().get(3, TimeUnit.SECONDS); org.junit.Assert.fail("A TimeoutException was expected"); } catch (ExecutionException e) { @@ -1044,7 +1043,7 @@ public class FlowTest extends StreamTest { public void mustBeAbleToUseIdleTimeout() throws Throwable { try { try { - Source. maybe().via(Flow.of(Integer.class).idleTimeout(Duration.create(1, "second"))) + Source. maybe().via(Flow.of(Integer.class).idleTimeout(Duration.ofSeconds(1))) .runWith(Sink. head(), materializer).toCompletableFuture().get(3, TimeUnit.SECONDS); org.junit.Assert.fail("A TimeoutException was expected"); } catch (ExecutionException e) { @@ -1060,9 +1059,9 @@ public class FlowTest extends StreamTest { Integer result = Source.maybe() .via(Flow.of(Integer.class) - .keepAlive(Duration.create(1, "second"), (Creator) () -> 0) + .keepAlive(Duration.ofSeconds(1), (Creator) () -> 0) ) - .takeWithin(Duration.create(1500, "milliseconds")) + .takeWithin(Duration.ofMillis(1500)) .runWith(Sink.head(), materializer) .toCompletableFuture().get(3, TimeUnit.SECONDS); diff --git a/akka-stream-tests/src/test/java/akka/stream/javadsl/SourceTest.java b/akka-stream-tests/src/test/java/akka/stream/javadsl/SourceTest.java index e0ba11e044..308620cdca 100644 --- a/akka-stream-tests/src/test/java/akka/stream/javadsl/SourceTest.java +++ b/akka-stream-tests/src/test/java/akka/stream/javadsl/SourceTest.java @@ -440,11 +440,11 @@ public class SourceTest extends StreamTest { probe.getRef().tell(elem, ActorRef.noSender()); } })).run(materializer); - probe.expectNoMsg(FiniteDuration.create(600, TimeUnit.MILLISECONDS)); + probe.expectNoMessage(Duration.ofMillis(600)); probe.expectMsgEquals("tick"); - probe.expectNoMsg(FiniteDuration.create(200, TimeUnit.MILLISECONDS)); + probe.expectNoMessage(Duration.ofMillis(200)); probe.expectMsgEquals("tick"); - probe.expectNoMsg(FiniteDuration.create(200, TimeUnit.MILLISECONDS)); + probe.expectNoMessage(Duration.ofMillis(200)); } @Test @@ -642,9 +642,9 @@ public class SourceTest extends StreamTest { probe.expectMsgEquals(0); probe.expectMsgEquals(1); - FiniteDuration duration = FiniteDuration.apply(200, TimeUnit.MILLISECONDS); + Duration duration = Duration.ofMillis(200); - probe.expectNoMsg(duration); + probe.expectNoMessage(duration); future.toCompletableFuture().get(3, TimeUnit.SECONDS); } diff --git a/akka-testkit/src/main/scala/akka/testkit/javadsl/TestKit.scala b/akka-testkit/src/main/scala/akka/testkit/javadsl/TestKit.scala index d065bcd325..a4539b1896 100644 --- a/akka-testkit/src/main/scala/akka/testkit/javadsl/TestKit.scala +++ b/akka-testkit/src/main/scala/akka/testkit/javadsl/TestKit.scala @@ -615,6 +615,7 @@ class TestKit(system: ActorSystem) { * one of the given classes. Wait time is bounded by the given duration, * with an AssertionFailure being thrown in case of timeout. */ + @varargs def expectMsgAnyClassOf[T](max: java.time.Duration, objs: Class[_]*): T = expectMsgAnyClassOf(max.asScala, objs: _*) @@ -732,8 +733,18 @@ class TestKit(system: ActorSystem) { * * This method does NOT automatically scale its Duration parameter! */ + @Deprecated + @deprecated("Use the overloaded one which accepts java.time.Duration instead.", since = "2.5.13") def receiveOne(max: Duration): AnyRef = tp.receiveOne(max) + /** + * Receive one message from the internal queue of the TestActor. If the given + * duration is zero, the queue is polled (non-blocking). + * + * This method does NOT automatically scale its Duration parameter! + */ + def receiveOne(max: java.time.Duration): AnyRef = tp.receiveOne(max.asScala) + /** * Receive a series of messages until one does not match the given partial * function or the idle timeout is met (disabled by default) or the overall @@ -746,6 +757,8 @@ class TestKit(system: ActorSystem) { * certain characteristics are generated at a certain rate: * */ + @Deprecated + @deprecated("Use the overloaded one which accepts java.time.Duration instead.", since = "2.5.13") def receiveWhile[T](max: Duration, idle: Duration, messages: Int, f: JFunction[AnyRef, T]): JList[T] = { tp.receiveWhile(max, idle, messages)(new CachingPartialFunction[AnyRef, T] { @throws(classOf[Exception]) @@ -753,6 +766,27 @@ class TestKit(system: ActorSystem) { }).asJava } + /** + * Receive a series of messages until one does not match the given partial + * function or the idle timeout is met (disabled by default) or the overall + * maximum duration is elapsed or expected messages count is reached. + * Returns the sequence of messages. + * + * Note that it is not an error to hit the `max` duration in this case. + * + * One possible use of this method is for testing whether messages of + * certain characteristics are generated at a certain rate: + * + */ + def receiveWhile[T](max: java.time.Duration, idle: java.time.Duration, messages: Int, f: JFunction[AnyRef, T]): JList[T] = { + tp.receiveWhile(max.asScala, idle.asScala, messages)(new CachingPartialFunction[AnyRef, T] { + @throws(classOf[Exception]) + override def `match`(x: AnyRef): T = f.apply(x) + }).asJava + } + + @Deprecated + @deprecated("Use the overloaded one which accepts java.time.Duration instead.", since = "2.5.13") def receiveWhile[T](max: Duration, f: JFunction[AnyRef, T]): JList[T] = { tp.receiveWhile(max = max)(new CachingPartialFunction[AnyRef, T] { @throws(classOf[Exception]) @@ -760,6 +794,13 @@ class TestKit(system: ActorSystem) { }).asJava } + def receiveWhile[T](max: java.time.Duration, f: JFunction[AnyRef, T]): JList[T] = { + tp.receiveWhile(max = max.asScala)(new CachingPartialFunction[AnyRef, T] { + @throws(classOf[Exception]) + override def `match`(x: AnyRef): T = f.apply(x) + }).asJava + } + /** * Spawns an actor as a child of this test actor, and returns the child's ActorRef. */