pekko/akka-docs-dev/rst/scala/code/docs/stream/cookbook/RecipeMissedTicks.scala

52 lines
1.1 KiB
Scala
Raw Normal View History

2014-12-08 17:29:40 +01:00
package docs.stream.cookbook
import akka.stream.scaladsl.{ Sink, Source }
2015-04-24 11:45:03 +03:00
import akka.stream.testkit._
2014-12-08 17:29:40 +01:00
import scala.concurrent.duration._
class RecipeMissedTicks extends RecipeSpec {
"Recipe for collecting missed ticks" must {
"work" in {
type Tick = Unit
2015-04-24 11:45:03 +03:00
val pub = TestPublisher.probe[Tick]()
val sub = TestSubscriber.manualProbe[Int]()
2014-12-08 17:29:40 +01:00
val tickStream = Source(pub)
val sink = Sink(sub)
//#missed-ticks
// tickStream is a Source[Tick]
val missedTicks: Source[Int, Unit] =
2014-12-08 17:29:40 +01:00
tickStream.conflate(seed = (_) => 0)(
(missedTicks, tick) => missedTicks + 1)
//#missed-ticks
missedTicks.to(sink).run()
2015-04-24 11:45:03 +03:00
pub.sendNext(())
pub.sendNext(())
pub.sendNext(())
pub.sendNext(())
2014-12-08 17:29:40 +01:00
val subscription = sub.expectSubscription()
subscription.request(1)
sub.expectNext(3)
subscription.request(1)
sub.expectNoMsg(100.millis)
2015-04-24 11:45:03 +03:00
pub.sendNext(())
2014-12-08 17:29:40 +01:00
sub.expectNext(0)
2015-04-24 11:45:03 +03:00
pub.sendComplete()
2014-12-08 17:29:40 +01:00
subscription.request(1)
sub.expectComplete()
}
}
}