Swiftgram/AsyncDisplayKitTests/ASInsetLayoutSpecSnapshotTests.mm

119 lines
4.1 KiB
Plaintext

/*
* 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 "ASLayoutSpecSnapshotTestsHelper.h"
#import "ASBackgroundLayoutSpec.h"
#import "ASInsetLayoutSpec.h"
typedef NS_OPTIONS(NSUInteger, ASInsetLayoutSpecTestEdge) {
ASInsetLayoutSpecTestEdgeTop = 1 << 0,
ASInsetLayoutSpecTestEdgeLeft = 1 << 1,
ASInsetLayoutSpecTestEdgeBottom = 1 << 2,
ASInsetLayoutSpecTestEdgeRight = 1 << 3,
};
static CGFloat insetForEdge(NSUInteger combination, ASInsetLayoutSpecTestEdge edge, CGFloat insetValue)
{
return combination & edge ? INFINITY : insetValue;
}
static UIEdgeInsets insetsForCombination(NSUInteger combination, CGFloat insetValue)
{
return {
.top = insetForEdge(combination, ASInsetLayoutSpecTestEdgeTop, insetValue),
.left = insetForEdge(combination, ASInsetLayoutSpecTestEdgeLeft, insetValue),
.bottom = insetForEdge(combination, ASInsetLayoutSpecTestEdgeBottom, insetValue),
.right = insetForEdge(combination, ASInsetLayoutSpecTestEdgeRight, insetValue),
};
}
static NSString *nameForInsets(UIEdgeInsets insets)
{
return [NSString stringWithFormat:@"%.f-%.f-%.f-%.f", insets.top, insets.left, insets.bottom, insets.right];
}
@interface ASInsetLayoutSpecSnapshotTests : ASLayoutSpecSnapshotTestCase
@end
@implementation ASInsetLayoutSpecSnapshotTests
- (void)setUp
{
[super setUp];
self.recordMode = NO;
}
- (void)testInsetsWithVariableSize
{
for (NSUInteger combination = 0; combination < 16; combination++) {
UIEdgeInsets insets = insetsForCombination(combination, 10);
ASDisplayNode *backgroundNode = ASDisplayNodeWithBackgroundColor([UIColor grayColor]);
ASStaticSizeDisplayNode *foregroundNode = ASDisplayNodeWithBackgroundColor([UIColor greenColor]);
foregroundNode.staticSize = {10, 10};
ASLayoutSpec *layoutSpec =
[ASBackgroundLayoutSpec
newWithChild:[ASInsetLayoutSpec newWithInsets:insets child:foregroundNode]
background:backgroundNode];
static ASSizeRange kVariableSize = {{0, 0}, {300, 300}};
[self testLayoutSpec:layoutSpec
sizeRange:kVariableSize
subnodes:@[backgroundNode, foregroundNode]
identifier:nameForInsets(insets)];
}
}
- (void)testInsetsWithFixedSize
{
for (NSUInteger combination = 0; combination < 16; combination++) {
UIEdgeInsets insets = insetsForCombination(combination, 10);
ASDisplayNode *backgroundNode = ASDisplayNodeWithBackgroundColor([UIColor grayColor]);
ASStaticSizeDisplayNode *foregroundNode = ASDisplayNodeWithBackgroundColor([UIColor greenColor]);
foregroundNode.staticSize = {10, 10};
ASLayoutSpec *layoutSpec =
[ASBackgroundLayoutSpec
newWithChild:[ASInsetLayoutSpec newWithInsets:insets child:foregroundNode]
background:backgroundNode];
static ASSizeRange kFixedSize = {{300, 300}, {300, 300}};
[self testLayoutSpec:layoutSpec
sizeRange:kFixedSize
subnodes:@[backgroundNode, foregroundNode]
identifier:nameForInsets(insets)];
}
}
/** Regression test, there was a bug mixing insets with infinite and zero sizes */
- (void)testInsetsWithInfinityAndZeroInsetValue
{
for (NSUInteger combination = 0; combination < 16; combination++) {
UIEdgeInsets insets = insetsForCombination(combination, 0);
ASDisplayNode *backgroundNode = ASDisplayNodeWithBackgroundColor([UIColor grayColor]);
ASStaticSizeDisplayNode *foregroundNode = ASDisplayNodeWithBackgroundColor([UIColor greenColor]);
foregroundNode.staticSize = {10, 10};
ASLayoutSpec *layoutSpec =
[ASBackgroundLayoutSpec
newWithChild:[ASInsetLayoutSpec newWithInsets:insets child:foregroundNode]
background:backgroundNode];
static ASSizeRange kFixedSize = {{300, 300}, {300, 300}};
[self testLayoutSpec:layoutSpec
sizeRange:kFixedSize
subnodes:@[backgroundNode, foregroundNode]
identifier:nameForInsets(insets)];
}
}
@end