| // | |
| // RACDisposableSpec.m | |
| // ReactiveCocoa | |
| // | |
| // Created by Justin Spahr-Summers on 2013-06-13. | |
| // Copyright (c) 2013 GitHub, Inc. All rights reserved. | |
| // | |
| #import "RACDisposable.h" | |
| #import "RACScopedDisposable.h" | |
| SpecBegin(RACDisposable) | |
| it(@"should initialize without a block", ^{ | |
| RACDisposable *disposable = [[RACDisposable alloc] init]; | |
| expect(disposable).notTo.beNil(); | |
| expect(disposable.disposed).to.beFalsy(); | |
| [disposable dispose]; | |
| expect(disposable.disposed).to.beTruthy(); | |
| }); | |
| it(@"should execute a block upon disposal", ^{ | |
| __block BOOL disposed = NO; | |
| RACDisposable *disposable = [RACDisposable disposableWithBlock:^{ | |
| disposed = YES; | |
| }]; | |
| expect(disposable).notTo.beNil(); | |
| expect(disposed).to.beFalsy(); | |
| expect(disposable.disposed).to.beFalsy(); | |
| [disposable dispose]; | |
| expect(disposed).to.beTruthy(); | |
| expect(disposable.disposed).to.beTruthy(); | |
| }); | |
| it(@"should not dispose upon deallocation", ^{ | |
| __block BOOL disposed = NO; | |
| __weak RACDisposable *weakDisposable = nil; | |
| @autoreleasepool { | |
| RACDisposable *disposable = [RACDisposable disposableWithBlock:^{ | |
| disposed = YES; | |
| }]; | |
| weakDisposable = disposable; | |
| expect(weakDisposable).notTo.beNil(); | |
| } | |
| expect(weakDisposable).to.beNil(); | |
| expect(disposed).to.beFalsy(); | |
| }); | |
| it(@"should create a scoped disposable", ^{ | |
| __block BOOL disposed = NO; | |
| __weak RACScopedDisposable *weakDisposable = nil; | |
| @autoreleasepool { | |
| RACScopedDisposable *disposable __attribute__((objc_precise_lifetime)) = [RACScopedDisposable disposableWithBlock:^{ | |
| disposed = YES; | |
| }]; | |
| weakDisposable = disposable; | |
| expect(weakDisposable).notTo.beNil(); | |
| expect(disposed).to.beFalsy(); | |
| } | |
| expect(weakDisposable).to.beNil(); | |
| expect(disposed).to.beTruthy(); | |
| }); | |
| SpecEnd |