@@ -2996,6 +2996,62 @@ class SignalProducerSpec: QuickSpec {
29962996 it ( " should be able to fallback to SignalProducer for contextual lookups " ) {
29972997 _ = SignalProducer < Bool , Never > . empty
29982998 . and ( . init( value: true ) )
2999+ _ = SignalProducer < Bool , Never > . and ( . init( value: true ) )
3000+ }
3001+ }
3002+
3003+ describe ( " all attribute " ) {
3004+ it ( " should emit true when all producers emit the same value " ) {
3005+ let producer1 = SignalProducer < Bool , Never > { observer, _ in
3006+ observer. send ( value: true )
3007+ observer. sendCompleted ( )
3008+ }
3009+ let producer2 = SignalProducer < Bool , Never > { observer, _ in
3010+ observer. send ( value: true )
3011+ observer. sendCompleted ( )
3012+ }
3013+ let producer3 = SignalProducer < Bool , Never > { observer, _ in
3014+ observer. send ( value: true )
3015+ observer. sendCompleted ( )
3016+ }
3017+
3018+ SignalProducer . all ( [ producer1, producer2, producer3] ) . startWithValues { value in
3019+ expect ( value) . to ( beTrue ( ) )
3020+ }
3021+ }
3022+
3023+ it ( " should emit false when all producers emit opposite values " ) {
3024+ let producer1 = SignalProducer < Bool , Never > { observer, _ in
3025+ observer. send ( value: true )
3026+ observer. sendCompleted ( )
3027+ }
3028+ let producer2 = SignalProducer < Bool , Never > { observer, _ in
3029+ observer. send ( value: false )
3030+ observer. sendCompleted ( )
3031+ }
3032+ let producer3 = SignalProducer < Bool , Never > { observer, _ in
3033+ observer. send ( value: false )
3034+ observer. sendCompleted ( )
3035+ }
3036+
3037+ SignalProducer . all ( [ producer1, producer2, producer3] ) . startWithValues { value in
3038+ expect ( value) . to ( beFalse ( ) )
3039+ }
3040+ }
3041+
3042+ it ( " should work the same way when using array of signals instead of an array of producers " ) {
3043+ let ( signal1, observer1) = Signal < Bool , Never > . pipe ( )
3044+ let ( signal2, observer2) = Signal < Bool , Never > . pipe ( )
3045+ let ( signal3, observer3) = Signal < Bool , Never > . pipe ( )
3046+ SignalProducer . all ( [ signal1, signal2, signal3] ) . startWithValues { value in
3047+ expect ( value) . to ( beTrue ( ) )
3048+ }
3049+ observer1. send ( value: true )
3050+ observer1. sendCompleted ( )
3051+ observer2. send ( value: true )
3052+ observer2. sendCompleted ( )
3053+ observer3. send ( value: true )
3054+ observer3. sendCompleted ( )
29993055 }
30003056 }
30013057
@@ -3047,6 +3103,64 @@ class SignalProducerSpec: QuickSpec {
30473103 it ( " should be able to fallback to SignalProducer for contextual lookups " ) {
30483104 _ = SignalProducer < Bool , Never > . empty
30493105 . or ( . init( value: true ) )
3106+ _ = SignalProducer < Bool , Never > . or ( . init( value: true ) )
3107+ }
3108+ }
3109+
3110+ describe ( " any attribute " ) {
3111+ it ( " should emit true when at least one of the producers in array emits true " ) {
3112+ let producer1 = SignalProducer < Bool , Never > { observer, _ in
3113+ observer. send ( value: true )
3114+ observer. sendCompleted ( )
3115+ }
3116+ let producer2 = SignalProducer < Bool , Never > { observer, _ in
3117+ observer. send ( value: false )
3118+ observer. sendCompleted ( )
3119+ }
3120+ let producer3 = SignalProducer < Bool , Never > { observer, _ in
3121+ observer. send ( value: false )
3122+ observer. sendCompleted ( )
3123+ }
3124+
3125+ SignalProducer . any ( [ producer1, producer2, producer3] ) . startWithValues { value in
3126+ expect ( value) . to ( beTrue ( ) )
3127+ }
3128+ }
3129+
3130+ it ( " should emit false when all producers in array emit false " ) {
3131+ let producer1 = SignalProducer < Bool , Never > { observer, _ in
3132+ observer. send ( value: false )
3133+ observer. sendCompleted ( )
3134+ }
3135+ let producer2 = SignalProducer < Bool , Never > { observer, _ in
3136+ observer. send ( value: false )
3137+ observer. sendCompleted ( )
3138+ }
3139+ let producer3 = SignalProducer < Bool , Never > { observer, _ in
3140+ observer. send ( value: false )
3141+ observer. sendCompleted ( )
3142+ }
3143+
3144+ SignalProducer . any ( [ producer1, producer2, producer3] ) . startWithValues { value in
3145+ expect ( value) . to ( beFalse ( ) )
3146+ }
3147+ }
3148+
3149+ it ( " should work the same way when using array of signals instead of an array of producers " ) {
3150+ let ( signal1, observer1) = Signal < Bool , Never > . pipe ( )
3151+ let ( signal2, observer2) = Signal < Bool , Never > . pipe ( )
3152+ let ( signal3, observer3) = Signal < Bool , Never > . pipe ( )
3153+ let arrayOfSignals = [ signal1, signal2, signal3]
3154+
3155+ SignalProducer . any ( arrayOfSignals) . startWithValues { value in
3156+ expect ( value) . to ( beTrue ( ) )
3157+ }
3158+ observer1. send ( value: true )
3159+ observer1. sendCompleted ( )
3160+ observer2. send ( value: true )
3161+ observer2. sendCompleted ( )
3162+ observer3. send ( value: true )
3163+ observer3. sendCompleted ( )
30503164 }
30513165 }
30523166
0 commit comments