@@ -16,41 +16,51 @@ public func sendValue<T: Equatable, E: Equatable>(_ value: T?, sendError: E?, co
1616}
1717
1818public func sendValues< T: Equatable , E: Equatable > ( _ values: [ T ] , sendError maybeSendError: E ? , complete: Bool ) -> Predicate < SignalProducer < T , E > > {
19- return NonNilMatcherFunc { actualExpression, failureMessage in
19+ return Predicate < SignalProducer < T , E > > { actualExpression in
2020 precondition ( maybeSendError == nil || !complete, " Signals can't both send an error and complete " )
21+ guard let signalProducer = try actualExpression. evaluate ( ) else {
22+ let message = ExpectationMessage . fail ( " The SignalProducer was not created. " )
23+ . appendedBeNilHint ( )
24+ return PredicateResult ( status: . fail, message: message)
25+ }
2126
22- failureMessage. postfixMessage = " Send values \( values) . Send error \( String ( describing: maybeSendError) ) . Complete: \( complete) "
23- let maybeProducer = try actualExpression. evaluate ( )
24-
25- if let signalProducer = maybeProducer {
26- var sentValues : [ T ] = [ ]
27- var sentError : E ?
28- var signalCompleted = false
29-
30- signalProducer. start { event in
31- switch event {
32- case let . value( value) :
33- sentValues. append ( value)
34- case . completed:
35- signalCompleted = true
36- case let . failed( error) :
37- sentError = error
38- default :
39- break
40- }
41- }
27+ var sentValues : [ T ] = [ ]
28+ var sentError : E ?
29+ var signalCompleted = false
4230
43- if sentValues != values {
44- return false
31+ signalProducer. start { event in
32+ switch event {
33+ case let . value( value) :
34+ sentValues. append ( value)
35+ case . completed:
36+ signalCompleted = true
37+ case let . failed( error) :
38+ sentError = error
39+ default :
40+ break
4541 }
42+ }
4643
47- if sentError != maybeSendError {
48- return false
49- }
44+ if sentValues != values {
45+ let message = ExpectationMessage . expectedCustomValueTo (
46+ " send values < \( values) > " ,
47+ " < \( sentValues) > "
48+ )
49+ return PredicateResult ( status: . doesNotMatch, message: message)
50+ }
5051
51- return signalCompleted == complete
52- } else {
53- return false
52+ if sentError != maybeSendError {
53+ let message = ExpectationMessage . expectedCustomValueTo (
54+ " send error < \( String ( describing: maybeSendError) ) > " ,
55+ " < \( String ( describing: sentError) ) > "
56+ )
57+ return PredicateResult ( status: . doesNotMatch, message: message)
5458 }
55- } . predicate
59+
60+ let completeMessage = complete ?
61+ " complete, but the producer did not complete " :
62+ " not to complete, but the producer completed "
63+ let message = ExpectationMessage . expectedTo ( completeMessage)
64+ return PredicateResult ( bool: signalCompleted == complete, message: message)
65+ }
5666}
0 commit comments