!str #15271 make transform() take a factory instead of Transformer
+ Makes reusing flows safe + Adds timerTransform for ops which need TimerTransformer + Adds TransformerLike in order to keep transform/timerTransform typesafe in respect to the passed in type og Transformer Resolves #15271
This commit is contained in:
parent
24254c6b48
commit
5b1c05f3fe
26 changed files with 368 additions and 281 deletions
|
|
@ -3,28 +3,22 @@
|
|||
*/
|
||||
package akka.stream
|
||||
|
||||
import scala.concurrent.duration._
|
||||
import akka.stream.testkit.StreamTestKit
|
||||
import akka.stream.testkit.AkkaSpec
|
||||
import akka.testkit.EventFilter
|
||||
import com.typesafe.config.ConfigFactory
|
||||
import akka.stream.scaladsl.Flow
|
||||
import akka.testkit.TestProbe
|
||||
import akka.stream.testkit.{ AkkaSpec, StreamTestKit }
|
||||
|
||||
import scala.concurrent.duration._
|
||||
import scala.util.control.NoStackTrace
|
||||
import scala.collection.immutable
|
||||
|
||||
@org.junit.runner.RunWith(classOf[org.scalatest.junit.JUnitRunner])
|
||||
class FlowTimerTransformerSpec extends AkkaSpec {
|
||||
|
||||
import system.dispatcher
|
||||
|
||||
implicit val materializer = FlowMaterializer(MaterializerSettings(dispatcher = "akka.test.stream-dispatcher"))
|
||||
|
||||
"A Flow with TimerTransformer operations" must {
|
||||
"produce scheduled ticks as expected" in {
|
||||
val p = StreamTestKit.PublisherProbe[Int]()
|
||||
val p2 = Flow(p).
|
||||
transform(new TimerTransformer[Int, Int] {
|
||||
timerTransform("timer", () ⇒ new TimerTransformer[Int, Int] {
|
||||
schedulePeriodically("tick", 100.millis)
|
||||
var tickCount = 0
|
||||
override def onNext(elem: Int) = List(elem)
|
||||
|
|
@ -49,7 +43,7 @@ class FlowTimerTransformerSpec extends AkkaSpec {
|
|||
"schedule ticks when last transformation step (consume)" in {
|
||||
val p = StreamTestKit.PublisherProbe[Int]()
|
||||
val p2 = Flow(p).
|
||||
transform(new TimerTransformer[Int, Int] {
|
||||
timerTransform("timer", () ⇒ new TimerTransformer[Int, Int] {
|
||||
schedulePeriodically("tick", 100.millis)
|
||||
var tickCount = 0
|
||||
override def onNext(elem: Int) = List(elem)
|
||||
|
|
@ -62,7 +56,7 @@ class FlowTimerTransformerSpec extends AkkaSpec {
|
|||
override def isComplete: Boolean = !isTimerActive("tick")
|
||||
}).
|
||||
consume()
|
||||
val pSub = p.expectSubscription
|
||||
val pSub = p.expectSubscription()
|
||||
expectMsg("tick-1")
|
||||
expectMsg("tick-2")
|
||||
expectMsg("tick-3")
|
||||
|
|
@ -73,7 +67,7 @@ class FlowTimerTransformerSpec extends AkkaSpec {
|
|||
val exception = new Exception("Expected exception to the rule") with NoStackTrace
|
||||
val p = StreamTestKit.PublisherProbe[Int]()
|
||||
val p2 = Flow(p).
|
||||
transform(new TimerTransformer[Int, Int] {
|
||||
timerTransform("timer", () ⇒ new TimerTransformer[Int, Int] {
|
||||
scheduleOnce("tick", 100.millis)
|
||||
|
||||
def onNext(element: Int) = Nil
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue