RACCompoundDisposableSpec.m 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. //
  2. // RACCompoundDisposableSpec.m
  3. // ReactiveCocoa
  4. //
  5. // Created by Josh Abernathy on 11/30/12.
  6. // Copyright (c) 2012 GitHub, Inc. All rights reserved.
  7. //
  8. #import <Quick/Quick.h>
  9. #import <Nimble/Nimble.h>
  10. #import "RACCompoundDisposable.h"
  11. QuickSpecBegin(RACCompoundDisposableSpec)
  12. qck_it(@"should dispose of all its contained disposables", ^{
  13. __block BOOL d1Disposed = NO;
  14. RACDisposable *d1 = [RACDisposable disposableWithBlock:^{
  15. d1Disposed = YES;
  16. }];
  17. __block BOOL d2Disposed = NO;
  18. RACDisposable *d2 = [RACDisposable disposableWithBlock:^{
  19. d2Disposed = YES;
  20. }];
  21. __block BOOL d3Disposed = NO;
  22. RACDisposable *d3 = [RACDisposable disposableWithBlock:^{
  23. d3Disposed = YES;
  24. }];
  25. __block BOOL d4Disposed = NO;
  26. RACDisposable *d4 = [RACDisposable disposableWithBlock:^{
  27. d4Disposed = YES;
  28. }];
  29. RACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposableWithDisposables:@[ d1, d2, d3 ]];
  30. [disposable addDisposable:d4];
  31. expect(@(d1Disposed)).to(beFalsy());
  32. expect(@(d2Disposed)).to(beFalsy());
  33. expect(@(d3Disposed)).to(beFalsy());
  34. expect(@(d4Disposed)).to(beFalsy());
  35. expect(@(disposable.disposed)).to(beFalsy());
  36. [disposable dispose];
  37. expect(@(d1Disposed)).to(beTruthy());
  38. expect(@(d2Disposed)).to(beTruthy());
  39. expect(@(d3Disposed)).to(beTruthy());
  40. expect(@(d4Disposed)).to(beTruthy());
  41. expect(@(disposable.disposed)).to(beTruthy());
  42. });
  43. qck_it(@"should dispose of any added disposables immediately if it's already been disposed", ^{
  44. RACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable];
  45. [disposable dispose];
  46. RACDisposable *d = [[RACDisposable alloc] init];
  47. expect(@(d.disposed)).to(beFalsy());
  48. [disposable addDisposable:d];
  49. expect(@(d.disposed)).to(beTruthy());
  50. });
  51. qck_it(@"should work when initialized with -init", ^{
  52. RACCompoundDisposable *disposable = [[RACCompoundDisposable alloc] init];
  53. __block BOOL disposed = NO;
  54. RACDisposable *d = [RACDisposable disposableWithBlock:^{
  55. disposed = YES;
  56. }];
  57. [disposable addDisposable:d];
  58. expect(@(disposed)).to(beFalsy());
  59. [disposable dispose];
  60. expect(@(disposed)).to(beTruthy());
  61. });
  62. qck_it(@"should work when initialized with +disposableWithBlock:", ^{
  63. __block BOOL compoundDisposed = NO;
  64. RACCompoundDisposable *disposable = [RACCompoundDisposable disposableWithBlock:^{
  65. compoundDisposed = YES;
  66. }];
  67. __block BOOL disposed = NO;
  68. RACDisposable *d = [RACDisposable disposableWithBlock:^{
  69. disposed = YES;
  70. }];
  71. [disposable addDisposable:d];
  72. expect(@(disposed)).to(beFalsy());
  73. expect(@(compoundDisposed)).to(beFalsy());
  74. [disposable dispose];
  75. expect(@(disposed)).to(beTruthy());
  76. expect(@(compoundDisposed)).to(beTruthy());
  77. });
  78. qck_it(@"should allow disposables to be removed", ^{
  79. RACCompoundDisposable *disposable = [[RACCompoundDisposable alloc] init];
  80. RACDisposable *d = [[RACDisposable alloc] init];
  81. [disposable addDisposable:d];
  82. [disposable removeDisposable:d];
  83. [disposable dispose];
  84. expect(@(d.disposed)).to(beFalsy());
  85. });
  86. QuickSpecEnd