blob: 8cde91792f2cc862525fab7dd937b9b92acb2cf7 [file] [log] [blame]
//
// 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