RACDisposableSpec.m 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. //
  2. // RACDisposableSpec.m
  3. // ReactiveCocoa
  4. //
  5. // Created by Justin Spahr-Summers on 2013-06-13.
  6. // Copyright (c) 2013 GitHub, Inc. All rights reserved.
  7. //
  8. #import <Quick/Quick.h>
  9. #import <Nimble/Nimble.h>
  10. #import "RACDisposable.h"
  11. #import "RACScopedDisposable.h"
  12. QuickSpecBegin(RACDisposableSpec)
  13. qck_it(@"should initialize without a block", ^{
  14. RACDisposable *disposable = [[RACDisposable alloc] init];
  15. expect(disposable).notTo(beNil());
  16. expect(@(disposable.disposed)).to(beFalsy());
  17. [disposable dispose];
  18. expect(@(disposable.disposed)).to(beTruthy());
  19. });
  20. qck_it(@"should execute a block upon disposal", ^{
  21. __block BOOL disposed = NO;
  22. RACDisposable *disposable = [RACDisposable disposableWithBlock:^{
  23. disposed = YES;
  24. }];
  25. expect(disposable).notTo(beNil());
  26. expect(@(disposed)).to(beFalsy());
  27. expect(@(disposable.disposed)).to(beFalsy());
  28. [disposable dispose];
  29. expect(@(disposed)).to(beTruthy());
  30. expect(@(disposable.disposed)).to(beTruthy());
  31. });
  32. qck_it(@"should not dispose upon deallocation", ^{
  33. __block BOOL disposed = NO;
  34. __weak RACDisposable *weakDisposable = nil;
  35. @autoreleasepool {
  36. RACDisposable *disposable = [RACDisposable disposableWithBlock:^{
  37. disposed = YES;
  38. }];
  39. weakDisposable = disposable;
  40. expect(weakDisposable).notTo(beNil());
  41. }
  42. expect(weakDisposable).to(beNil());
  43. expect(@(disposed)).to(beFalsy());
  44. });
  45. qck_it(@"should create a scoped disposable", ^{
  46. __block BOOL disposed = NO;
  47. __weak RACScopedDisposable *weakDisposable = nil;
  48. @autoreleasepool {
  49. RACScopedDisposable *disposable __attribute__((objc_precise_lifetime)) = [RACScopedDisposable disposableWithBlock:^{
  50. disposed = YES;
  51. }];
  52. weakDisposable = disposable;
  53. expect(weakDisposable).notTo(beNil());
  54. expect(@(disposed)).to(beFalsy());
  55. }
  56. expect(weakDisposable).to(beNil());
  57. expect(@(disposed)).to(beTruthy());
  58. });
  59. QuickSpecEnd