| // |
| // RACChannelSpec.m |
| // ReactiveCocoa |
| // |
| // Created by Uri Baghin on 30/12/2012. |
| // Copyright (c) 2012 GitHub, Inc. All rights reserved. |
| // |
| |
| #import "RACChannelExamples.h" |
| |
| #import "NSObject+RACDeallocating.h" |
| #import "RACChannel.h" |
| #import "RACCompoundDisposable.h" |
| #import "RACDisposable.h" |
| #import "RACSignal.h" |
| |
| SpecBegin(RACChannel) |
| |
| describe(@"RACChannel", ^{ |
| itShouldBehaveLike(RACChannelExamples, @{ |
| RACChannelExampleCreateBlock: [^{ |
| return [[RACChannel alloc] init]; |
| } copy] |
| }); |
| |
| describe(@"memory management", ^{ |
| it(@"should dealloc when its subscribers are disposed", ^{ |
| RACDisposable *leadingDisposable = nil; |
| RACDisposable *followingDisposable = nil; |
| |
| __block BOOL deallocated = NO; |
| |
| @autoreleasepool { |
| RACChannel *channel __attribute__((objc_precise_lifetime)) = [[RACChannel alloc] init]; |
| [channel.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ |
| deallocated = YES; |
| }]]; |
| |
| leadingDisposable = [channel.leadingTerminal subscribeCompleted:^{}]; |
| followingDisposable = [channel.followingTerminal subscribeCompleted:^{}]; |
| } |
| |
| [leadingDisposable dispose]; |
| [followingDisposable dispose]; |
| expect(deallocated).will.beTruthy(); |
| }); |
| |
| it(@"should dealloc when its subscriptions are disposed", ^{ |
| RACDisposable *leadingDisposable = nil; |
| RACDisposable *followingDisposable = nil; |
| |
| __block BOOL deallocated = NO; |
| |
| @autoreleasepool { |
| RACChannel *channel __attribute__((objc_precise_lifetime)) = [[RACChannel alloc] init]; |
| [channel.rac_deallocDisposable addDisposable:[RACDisposable disposableWithBlock:^{ |
| deallocated = YES; |
| }]]; |
| |
| leadingDisposable = [[RACSignal never] subscribe:channel.leadingTerminal]; |
| followingDisposable = [[RACSignal never] subscribe:channel.followingTerminal]; |
| } |
| |
| [leadingDisposable dispose]; |
| [followingDisposable dispose]; |
| expect(deallocated).will.beTruthy(); |
| }); |
| }); |
| }); |
| |
| SpecEnd |