blob: 5ffe1608609d9775e0a257352399b306fb86811b [file] [log] [blame]
//
// UICollectionViewCellRACSupportSpec.m
// ReactiveCocoa
//
// Created by Kent Wong on 2013-10-04.
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
//
#import "RACAppDelegate.h"
#import "RACSignal.h"
#import "RACUnit.h"
#import "UICollectionReusableView+RACSignalSupport.h"
@interface TestCollectionViewController : UICollectionViewController
@end
SpecBegin(UICollectionReusableViewRACSupport)
__block UICollectionViewFlowLayout *collectionViewFlowLayout;
__block TestCollectionViewController *collectionViewController;
beforeEach(^{
collectionViewFlowLayout = [[UICollectionViewFlowLayout alloc] init];
CGSize screenSize = UIScreen.mainScreen.bounds.size;
collectionViewFlowLayout.itemSize = CGSizeMake(screenSize.width, screenSize.height / 2);
collectionViewController = [[TestCollectionViewController alloc] initWithCollectionViewLayout:collectionViewFlowLayout];
expect(collectionViewController).notTo.beNil();
[collectionViewController.collectionView registerClass:UICollectionViewCell.class forCellWithReuseIdentifier:NSStringFromClass(collectionViewController.class)];
RACAppDelegate.delegate.window.rootViewController = collectionViewController;
expect(collectionViewController.collectionView.visibleCells.count).will.beGreaterThan(0);
});
it(@"should send on rac_prepareForReuseSignal", ^{
UICollectionViewCell *cell = collectionViewController.collectionView.visibleCells[0];
__block NSUInteger invocationCount = 0;
[cell.rac_prepareForReuseSignal subscribeNext:^(id value) {
expect(value).to.equal(RACUnit.defaultUnit);
++invocationCount;
}];
expect(invocationCount).to.equal(0);
// The following two expectations will fail in the iOS 7 simulator, but pass on an iPad 4th gen device running iOS 7.
// This appears to be a known issue with the iOS 7 simulator. See http://openradar.appspot.com/14973972
// These tests will pass with iOS 6.0 and 6.1.
if ([UIDevice.currentDevice.systemVersion compare:@"7.0" options:NSNumericSearch] == NSOrderedAscending ||
(!TARGET_IPHONE_SIMULATOR && UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)) {
[collectionViewController.collectionView reloadData];
expect(invocationCount).will.equal(1);
[collectionViewController.collectionView reloadData];
expect(invocationCount).will.equal(2);
}
});
SpecEnd
@implementation TestCollectionViewController
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
return [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass(self.class) forIndexPath:indexPath];
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return 20;
}
@end