@@ -270,11 +270,11 @@ class CurrentValuePublisherTests: XCTestCase {
270270 }
271271
272272 // ============================================================================ //
273- // MARK: - Published
273+ // MARK: - @ Published → CurrentValuePublisher
274274 // ============================================================================ //
275275
276276 func testPublishedToCurrentValuePublisher_accessingValue( ) {
277- let object = MutableObservableObject ( initialValue: " initial " )
277+ let object = OwnedObservableObject ( initialValue: " initial " )
278278 let publisher = CurrentValuePublisher ( object. $value)
279279
280280 XCTAssertEqual ( publisher. value, " initial " )
@@ -290,7 +290,7 @@ class CurrentValuePublisherTests: XCTestCase {
290290 var cancellables = Set < AnyCancellable > ( )
291291 var values = [ String] ( )
292292
293- let object = MutableObservableObject ( initialValue: " initial " )
293+ let object = OwnedObservableObject ( initialValue: " initial " )
294294
295295 CurrentValuePublisher ( object. $value)
296296 . sink { values. append ( $0) }
@@ -309,7 +309,7 @@ class CurrentValuePublisherTests: XCTestCase {
309309 var cancellables = Set < AnyCancellable > ( )
310310 var values = [ String] ( )
311311
312- let object = MutableObservableObject ( initialValue: " initial " )
312+ let object = OwnedObservableObject ( initialValue: " initial " )
313313
314314 CurrentValuePublisher ( object. $value)
315315 . sink { values. append ( $0) }
@@ -321,16 +321,19 @@ class CurrentValuePublisherTests: XCTestCase {
321321 XCTAssertEqual ( values, [ " initial " , " second " ] )
322322
323323 cancellables. forEach { $0. cancel ( ) }
324- XCTAssertEqual ( values, [ " initial " , " second " ] )
325324
326325 object. value = " third "
327326 XCTAssertEqual ( values, [ " initial " , " second " ] )
328327 }
329328
329+ // ============================================================================ //
330+ // MARK: - CurrentValuePublisher → @Published
331+ // ============================================================================ //
332+
330333 func testCurrentValuePublisherToPublished_accessingValue( ) {
331334 let subject = CurrentValueSubject < String , Never > ( " initial " )
332335 let publisher = CurrentValuePublisher < String , Never > ( subject)
333- let object = ImmutableObservableObject ( publisher: publisher)
336+ let object = BackedObservableObject ( publisher: publisher)
334337
335338 XCTAssertEqual ( object. value, " initial " )
336339
@@ -341,20 +344,78 @@ class CurrentValuePublisherTests: XCTestCase {
341344 XCTAssertEqual ( object. value, " third " )
342345 }
343346
347+ func testCurrentValuePublisherToPublished_receivingValues( ) {
348+ var cancellables = Set < AnyCancellable > ( )
349+ var values = [ String] ( )
350+
351+ let subject = CurrentValueSubject < String , Never > ( " initial " )
352+ let publisher = CurrentValuePublisher < String , Never > ( subject)
353+ let object = BackedObservableObject ( publisher: publisher)
354+
355+ object. $value
356+ . sink { values. append ( $0) }
357+ . store ( in: & cancellables)
358+
359+ XCTAssertEqual ( values, [ " initial " ] )
360+
361+ subject. value = " second "
362+ XCTAssertEqual ( values, [ " initial " , " second " ] )
363+
364+ subject. value = " third "
365+ XCTAssertEqual ( values, [ " initial " , " second " , " third " ] )
366+ }
367+
368+ func testCurrentValuePublisherToPublished_localOverride( ) {
369+ let subject = CurrentValueSubject < String , Never > ( " initial " )
370+ let publisher = CurrentValuePublisher < String , Never > ( subject)
371+ let object = BackedObservableObject ( publisher: publisher)
372+
373+ XCTAssertEqual ( object. value, " initial " )
374+
375+ object. value = " override "
376+ XCTAssertEqual ( object. value, " override " )
377+
378+ subject. value = " second "
379+ XCTAssertEqual ( object. value, " second " )
380+ }
381+
344382 func testCurrentValuePublisherToPublished_completionFinished( ) {
345383 let subject = CurrentValueSubject < String , Never > ( " initial " )
346384 let publisher = CurrentValuePublisher < String , Never > ( subject)
347- let object = ImmutableObservableObject ( publisher: publisher)
385+ let object = BackedObservableObject ( publisher: publisher)
348386
349387 XCTAssertEqual ( object. value, " initial " )
350388
351- subject. send ( " second " )
389+ subject. value = " second "
352390 XCTAssertEqual ( object. value, " second " )
353391
354392 subject. send ( completion: . finished)
355393 XCTAssertEqual ( object. value, " second " )
356394 }
357395
396+ func testCurrentValuePublisherToPublished_cancellation( ) {
397+ var cancellables = Set < AnyCancellable > ( )
398+ var values = [ String] ( )
399+
400+ let subject = CurrentValueSubject < String , Never > ( " initial " )
401+ let publisher = CurrentValuePublisher < String , Never > ( subject)
402+
403+ let object = BackedObservableObject ( publisher: publisher)
404+
405+ object. $value
406+ . sink { values. append ( $0) }
407+ . store ( in: & cancellables)
408+
409+ XCTAssertEqual ( values, [ " initial " ] )
410+
411+ subject. value = " second "
412+ XCTAssertEqual ( values, [ " initial " , " second " ] )
413+
414+ cancellables. forEach { $0. cancel ( ) }
415+ subject. value = " third "
416+ XCTAssertEqual ( values, [ " initial " , " second " ] )
417+ }
418+
358419 // ============================================================================ //
359420 // MARK: - Map Operator
360421 // ============================================================================ //
@@ -944,7 +1005,7 @@ class CurrentValuePublisherTests: XCTestCase {
9441005
9451006fileprivate struct TestError : Error , Equatable { }
9461007
947- fileprivate class MutableObservableObject : ObservableObject {
1008+ fileprivate class OwnedObservableObject : ObservableObject {
9481009
9491010 fileprivate init ( initialValue: String ) {
9501011 self . value = initialValue
@@ -955,13 +1016,13 @@ fileprivate class MutableObservableObject: ObservableObject {
9551016
9561017}
9571018
958- fileprivate class ImmutableObservableObject {
1019+ fileprivate class BackedObservableObject {
9591020
9601021 fileprivate init ( publisher: CurrentValuePublisher < String , Never > ) {
9611022 self . _value = Published ( publisher)
9621023 }
9631024
9641025 @Published
965- fileprivate private ( set ) var value : String
1026+ fileprivate var value : String
9661027
9671028}
0 commit comments