| // |
| // RACCompoundDisposableSpec.m |
| // ReactiveCocoa |
| // |
| // Created by Josh Abernathy on 11/30/12. |
| // Copyright (c) 2012 GitHub, Inc. All rights reserved. |
| // |
| |
| #import "RACCompoundDisposable.h" |
| |
| SpecBegin(RACCompoundDisposable) |
| |
| it(@"should dispose of all its contained disposables", ^{ |
| __block BOOL d1Disposed = NO; |
| RACDisposable *d1 = [RACDisposable disposableWithBlock:^{ |
| d1Disposed = YES; |
| }]; |
| |
| __block BOOL d2Disposed = NO; |
| RACDisposable *d2 = [RACDisposable disposableWithBlock:^{ |
| d2Disposed = YES; |
| }]; |
| |
| __block BOOL d3Disposed = NO; |
| RACDisposable *d3 = [RACDisposable disposableWithBlock:^{ |
| d3Disposed = YES; |
| }]; |
| |
| __block BOOL d4Disposed = NO; |
| RACDisposable *d4 = [RACDisposable disposableWithBlock:^{ |
| d4Disposed = YES; |
| }]; |
| |
| RACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposableWithDisposables:@[ d1, d2, d3 ]]; |
| [disposable addDisposable:d4]; |
| |
| expect(d1Disposed).to.beFalsy(); |
| expect(d2Disposed).to.beFalsy(); |
| expect(d3Disposed).to.beFalsy(); |
| expect(d4Disposed).to.beFalsy(); |
| expect(disposable.disposed).to.beFalsy(); |
| |
| [disposable dispose]; |
| |
| expect(d1Disposed).to.beTruthy(); |
| expect(d2Disposed).to.beTruthy(); |
| expect(d3Disposed).to.beTruthy(); |
| expect(d4Disposed).to.beTruthy(); |
| expect(disposable.disposed).to.beTruthy(); |
| }); |
| |
| it(@"should dispose of any added disposables immediately if it's already been disposed", ^{ |
| RACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable]; |
| [disposable dispose]; |
| |
| RACDisposable *d = [[RACDisposable alloc] init]; |
| |
| expect(d.disposed).to.beFalsy(); |
| [disposable addDisposable:d]; |
| expect(d.disposed).to.beTruthy(); |
| }); |
| |
| it(@"should work when initialized with -init", ^{ |
| RACCompoundDisposable *disposable = [[RACCompoundDisposable alloc] init]; |
| |
| __block BOOL disposed = NO; |
| RACDisposable *d = [RACDisposable disposableWithBlock:^{ |
| disposed = YES; |
| }]; |
| |
| [disposable addDisposable:d]; |
| expect(disposed).to.beFalsy(); |
| |
| [disposable dispose]; |
| expect(disposed).to.beTruthy(); |
| }); |
| |
| it(@"should work when initialized with +disposableWithBlock:", ^{ |
| __block BOOL compoundDisposed = NO; |
| RACCompoundDisposable *disposable = [RACCompoundDisposable disposableWithBlock:^{ |
| compoundDisposed = YES; |
| }]; |
| |
| __block BOOL disposed = NO; |
| RACDisposable *d = [RACDisposable disposableWithBlock:^{ |
| disposed = YES; |
| }]; |
| |
| [disposable addDisposable:d]; |
| expect(disposed).to.beFalsy(); |
| expect(compoundDisposed).to.beFalsy(); |
| |
| [disposable dispose]; |
| expect(disposed).to.beTruthy(); |
| expect(compoundDisposed).to.beTruthy(); |
| }); |
| |
| it(@"should allow disposables to be removed", ^{ |
| RACCompoundDisposable *disposable = [[RACCompoundDisposable alloc] init]; |
| RACDisposable *d = [[RACDisposable alloc] init]; |
| |
| [disposable addDisposable:d]; |
| [disposable removeDisposable:d]; |
| |
| [disposable dispose]; |
| expect(d.disposed).to.beFalsy(); |
| }); |
| |
| SpecEnd |