mirror of
https://github.com/HackPlan/AsyncDisplayKit.git
synced 2026-04-24 03:45:58 +08:00
Unit tests for batch fetching
This commit is contained in:
102
AsyncDisplayKitTests/ASBatchFetchingTests.m
Normal file
102
AsyncDisplayKitTests/ASBatchFetchingTests.m
Normal file
@@ -0,0 +1,102 @@
|
||||
/* Copyright (c) 2014-present, Facebook, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
* LICENSE file in the root directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the PATENTS file in the same directory.
|
||||
*/
|
||||
|
||||
#import <XCTest/XCTest.h>
|
||||
|
||||
#import "ASBatchFetching.h"
|
||||
|
||||
@interface ASBatchFetchingTests : XCTestCase
|
||||
|
||||
@end
|
||||
|
||||
@implementation ASBatchFetchingTests
|
||||
|
||||
#define PASSING_RECT (CGRect){0,0,1,1}
|
||||
#define PASSING_SIZE (CGSize){1,1}
|
||||
#define PASSING_POINT (CGPoint){1,1}
|
||||
#define VERTICAL_RECT(h) (CGRect){0,0,0,h}
|
||||
#define VERTICAL_SIZE(h) (CGSize){0,h}
|
||||
#define VERTICAL_OFFSET(y) (CGPoint){0,y}
|
||||
#define HORIZONTAL_RECT(w) (CGRect){0,0,w,0}
|
||||
#define HORIZONTAL_SIZE(w) (CGSize){w,0}
|
||||
#define HORIZONTAL_OFFSET(x) (CGPoint){x,0}
|
||||
|
||||
- (void)testBatchNullState {
|
||||
ASBatchContext *context = [[ASBatchContext alloc] init];
|
||||
BOOL shouldFetch = ASDisplayShouldFetchBatchForContext(context, ASScrollDirectionUp, CGRectZero, CGSizeZero, CGPointZero, 0.0);
|
||||
XCTAssert(shouldFetch == NO, @"Should not fetch in the null state");
|
||||
}
|
||||
|
||||
- (void)testBatchAlreadyFetching {
|
||||
ASBatchContext *context = [[ASBatchContext alloc] init];
|
||||
[context beginBatchFetching];
|
||||
BOOL shouldFetch = ASDisplayShouldFetchBatchForContext(context, ASScrollDirectionUp, PASSING_RECT, PASSING_SIZE, PASSING_POINT, 1.0);
|
||||
XCTAssert(shouldFetch == NO, @"Should not fetch when context is already fetching");
|
||||
}
|
||||
|
||||
- (void)testUnsupportedScrollDirections {
|
||||
ASBatchContext *context = [[ASBatchContext alloc] init];
|
||||
BOOL fetchRight = ASDisplayShouldFetchBatchForContext(context, ASScrollDirectionRight, PASSING_RECT, PASSING_SIZE, PASSING_POINT, 1.0);
|
||||
XCTAssert(fetchRight == NO, @"Should not fetch for scrolling right");
|
||||
BOOL fetchDown = ASDisplayShouldFetchBatchForContext(context, ASScrollDirectionDown, PASSING_RECT, PASSING_SIZE, PASSING_POINT, 1.0);
|
||||
XCTAssert(fetchDown == NO, @"Should not fetch for scrolling down");
|
||||
BOOL fetchUp = ASDisplayShouldFetchBatchForContext(context, ASScrollDirectionUp, PASSING_RECT, PASSING_SIZE, PASSING_POINT, 1.0);
|
||||
XCTAssert(fetchUp == YES, @"Should fetch for scrolling up");
|
||||
BOOL fetchLeft = ASDisplayShouldFetchBatchForContext(context, ASScrollDirectionLeft, PASSING_RECT, PASSING_SIZE, PASSING_POINT, 1.0);
|
||||
XCTAssert(fetchLeft == YES, @"Should fetch for scrolling left");
|
||||
}
|
||||
|
||||
- (void)testVerticalScrollToExactLeading {
|
||||
CGFloat screen = 1.0;
|
||||
ASBatchContext *context = [[ASBatchContext alloc] init];
|
||||
// scroll to 1-screen top offset, height is 1 screen, so bottom is 1 screen away from end of content
|
||||
BOOL shouldFetch = ASDisplayShouldFetchBatchForContext(context, ASScrollDirectionUp, VERTICAL_RECT(screen), VERTICAL_SIZE(screen * 3.0), VERTICAL_OFFSET(screen * 1.0), 1.0);
|
||||
XCTAssert(shouldFetch == YES, @"Fetch should begin when vertically scrolling to exactly 1 leading screen away");
|
||||
}
|
||||
|
||||
- (void)testVerticalScrollToLessThanLeading {
|
||||
CGFloat screen = 1.0;
|
||||
ASBatchContext *context = [[ASBatchContext alloc] init];
|
||||
// 3 screens of content, scroll only 1/2 of one screen
|
||||
BOOL shouldFetch = ASDisplayShouldFetchBatchForContext(context, ASScrollDirectionUp, VERTICAL_RECT(screen), VERTICAL_SIZE(screen * 3.0), VERTICAL_OFFSET(screen * 0.5), 1.0);
|
||||
XCTAssert(shouldFetch == NO, @"Fetch should not begin when vertically scrolling less than the leading distance away");
|
||||
}
|
||||
|
||||
- (void)testVerticalScrollingPastContentSize {
|
||||
CGFloat screen = 1.0;
|
||||
ASBatchContext *context = [[ASBatchContext alloc] init];
|
||||
// 3 screens of content, top offset to 3-screens, height 1 screen, so its 1 screen past the leading
|
||||
BOOL shouldFetch = ASDisplayShouldFetchBatchForContext(context, ASScrollDirectionUp, VERTICAL_RECT(screen), VERTICAL_SIZE(screen * 3.0), VERTICAL_OFFSET(screen * 3.0), 1.0);
|
||||
XCTAssert(shouldFetch == YES, @"Fetch should begin when vertically scrolling past the content size");
|
||||
}
|
||||
|
||||
- (void)testHorizontalScrollToExactLeading {
|
||||
CGFloat screen = 1.0;
|
||||
ASBatchContext *context = [[ASBatchContext alloc] init];
|
||||
// scroll to 1-screen left offset, width is 1 screen, so right is 1 screen away from end of content
|
||||
BOOL shouldFetch = ASDisplayShouldFetchBatchForContext(context, ASScrollDirectionLeft, HORIZONTAL_RECT(screen), HORIZONTAL_SIZE(screen * 3.0), HORIZONTAL_OFFSET(screen * 1.0), 1.0);
|
||||
XCTAssert(shouldFetch == YES, @"Fetch should begin when horizontally scrolling to exactly 1 leading screen away");
|
||||
}
|
||||
|
||||
- (void)testHorizontalScrollToLessThanLeading {
|
||||
CGFloat screen = 1.0;
|
||||
ASBatchContext *context = [[ASBatchContext alloc] init];
|
||||
// 3 screens of content, scroll only 1/2 of one screen
|
||||
BOOL shouldFetch = ASDisplayShouldFetchBatchForContext(context, ASScrollDirectionRight, HORIZONTAL_RECT(screen), HORIZONTAL_SIZE(screen * 3.0), HORIZONTAL_OFFSET(screen * 0.5), 1.0);
|
||||
XCTAssert(shouldFetch == NO, @"Fetch should not begin when horizontally scrolling less than the leading distance away");
|
||||
}
|
||||
|
||||
- (void)testHorizontalScrollingPastContentSize {
|
||||
CGFloat screen = 1.0;
|
||||
ASBatchContext *context = [[ASBatchContext alloc] init];
|
||||
// 3 screens of content, left offset to 3-screens, width 1 screen, so its 1 screen past the leading
|
||||
BOOL shouldFetch = ASDisplayShouldFetchBatchForContext(context, ASScrollDirectionUp, HORIZONTAL_RECT(screen), HORIZONTAL_SIZE(screen * 3.0), HORIZONTAL_OFFSET(screen * 3.0), 1.0);
|
||||
XCTAssert(shouldFetch == YES, @"Fetch should begin when vertically scrolling past the content size");
|
||||
}
|
||||
|
||||
@end
|
||||
Reference in New Issue
Block a user