@@ -343,14 +343,54 @@ class RxScalaDemo extends JUnitSuite {
343
343
344
344
@ Test def exampleWithReplay () {
345
345
val numbers = Observable .interval(1000 millis).take(6 )
346
- val (startFunc, sharedNumbers) = numbers.replay
346
+ val sharedNumbers = numbers.replay
347
347
sharedNumbers.subscribe(n => println(s " subscriber 1 gets $n" ))
348
- startFunc()
348
+ sharedNumbers.connect
349
349
// subscriber 2 subscribes later but still gets all numbers
350
350
doLater(3500 millis, () => { sharedNumbers.subscribe(n => println(s " subscriber 2 gets $n" )) })
351
351
waitFor(sharedNumbers)
352
352
}
353
353
354
+ @ Test def exampleWithReplay2 () {
355
+ val numbers = Observable .interval(100 millis).take(10 )
356
+ val sharedNumbers = numbers.replay(3 )
357
+ sharedNumbers.subscribe(n => println(s " subscriber 1 gets $n" ))
358
+ sharedNumbers.connect
359
+ // subscriber 2 subscribes later but only gets the 3 buffered numbers and the following numbers
360
+ Thread .sleep(700 )
361
+ sharedNumbers.subscribe(n => println(s " subscriber 2 gets $n" ))
362
+ waitFor(sharedNumbers)
363
+ }
364
+
365
+ @ Test def exampleWithReplay3 () {
366
+ val numbers = Observable .interval(100 millis).take(10 )
367
+ val sharedNumbers = numbers.replay(300 millis)
368
+ sharedNumbers.subscribe(n => println(s " subscriber 1 gets $n" ))
369
+ sharedNumbers.connect
370
+ // subscriber 2 subscribes later but only gets the buffered numbers and the following numbers
371
+ Thread .sleep(700 )
372
+ sharedNumbers.subscribe(n => println(s " subscriber 2 gets $n" ))
373
+ waitFor(sharedNumbers)
374
+ }
375
+
376
+ @ Test def exampleWithReplay4 () {
377
+ val numbers = Observable .interval(100 millis).take(10 )
378
+ val sharedNumbers = numbers.replay(2 , 300 millis)
379
+ sharedNumbers.subscribe(n => println(s " subscriber 1 gets $n" ))
380
+ sharedNumbers.connect
381
+ // subscriber 2 subscribes later but only gets the buffered numbers and the following numbers
382
+ Thread .sleep(700 )
383
+ sharedNumbers.subscribe(n => println(s " subscriber 2 gets $n" ))
384
+ waitFor(sharedNumbers)
385
+ }
386
+
387
+ @ Test def exampleWithReplay5 () {
388
+ val numbers = Observable .interval(100 millis).take(10 )
389
+ val sharedNumbers = numbers.replay[Long , Long ]((o : Observable [Long ]) => o.map(_ * 2 ))
390
+ sharedNumbers.subscribe(n => println(s " subscriber gets $n" ))
391
+ waitFor(sharedNumbers)
392
+ }
393
+
354
394
@ Test def testSingleOption () {
355
395
assertEquals(None , List (1 , 2 ).toObservable.toBlockingObservable.singleOption)
356
396
assertEquals(Some (1 ), List (1 ).toObservable.toBlockingObservable.singleOption)
@@ -720,7 +760,7 @@ class RxScalaDemo extends JUnitSuite {
720
760
}
721
761
722
762
@ Test def repeatExample1 (): Unit = {
723
- val o : Observable [String ] = List (" alice" , " bob" , " carol" ).toObservable.repeat() .take(6 )
763
+ val o : Observable [String ] = List (" alice" , " bob" , " carol" ).toObservable.repeat.take(6 )
724
764
assertEquals(List (" alice" , " bob" , " carol" , " alice" , " bob" , " carol" ), o.toBlockingObservable.toList)
725
765
}
726
766
@@ -802,6 +842,21 @@ class RxScalaDemo extends JUnitSuite {
802
842
}
803
843
}
804
844
845
+ @ Test def multicastExample1 (): Unit = {
846
+ val unshared = Observable .from(1 to 4 )
847
+ val shared = unshared.multicast(Subject ())
848
+ shared.subscribe(n => println(s " subscriber 1 gets $n" ))
849
+ shared.subscribe(n => println(s " subscriber 2 gets $n" ))
850
+ shared.connect
851
+ }
852
+
853
+ @ Test def multicastExample2 (): Unit = {
854
+ val unshared = Observable .from(1 to 4 )
855
+ val shared = unshared.multicast[Int , String ](() => Subject (), o => o.map(" No. " + _))
856
+ shared.subscribe(n => println(s " subscriber 1 gets $n" ))
857
+ shared.subscribe(n => println(s " subscriber 2 gets $n" ))
858
+ }
859
+
805
860
@ Test def startWithExample (): Unit = {
806
861
val o1 = List (3 , 4 ).toObservable
807
862
val o2 = 1 +: 2 +: o1
0 commit comments