Swiftgram/Tests/ASCornerLayoutSpecSnapshotTests.mm
appleguy 465abb1ded [License] Simplify the Texture license to be pure Apache 2 (removing ASDK-Licenses). (#1077)
* [License] Simplify the Texture license to be pure Apache 2 (removing ASDK-Licenses)

With permission of the Facebook Open Source team, we are simplifying the Texture
license so that clients can rely on the Apache 2 terms that most of Texture is
already covered by. This means that code originally forked from AsyncDisplayKit
will be re-licensed from "BSD 3-clause + PATENTS v2" to Apache 2 without a
PATENTS file.

After getting confirmation that the updates to these core files look good, we'll
propagate this new license header to all files (in this same PR) and get sign-off
from all parties before landing.

* [License] Update all Texture source files to be pure Apache 2.

* Changelog entry for Apache 2 license update.

* Revert "[License] Update all Texture source files to be pure Apache 2."

This reverts commit ffa0fbbba9717d871dd16c4b07539f2f8208fc2b.

* [License] Update all Texture source files to be pure Apache 2, maintaining copyrights.

* [License] Update CONTRIBUTING, README, Podspec & Dangerfile.
2018-08-28 07:39:18 -07:00

216 lines
8.3 KiB
Plaintext

//
// ASCornerLayoutSpecSnapshotTests.mm
// Texture
//
// Copyright (c) Pinterest, Inc. All rights reserved.
// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0
//
#import "ASLayoutSpecSnapshotTestsHelper.h"
#import <AsyncDisplayKit/ASCornerLayoutSpec.h>
#import <AsyncDisplayKit/ASBackgroundLayoutSpec.h>
typedef NS_ENUM(NSInteger, ASCornerLayoutSpecSnapshotTestsOffsetOption) {
ASCornerLayoutSpecSnapshotTestsOffsetOptionCenter,
ASCornerLayoutSpecSnapshotTestsOffsetOptionInner,
ASCornerLayoutSpecSnapshotTestsOffsetOptionOuter,
};
@interface ASCornerLayoutSpecSnapshotTests : ASLayoutSpecSnapshotTestCase
@property (nonatomic, copy) UIColor *boxColor;
@property (nonatomic, copy) UIColor *baseColor;
@property (nonatomic, copy) UIColor *cornerColor;
@property (nonatomic, copy) UIColor *contextColor;
@property (nonatomic) CGSize baseSize;
@property (nonatomic) CGSize cornerSize;
@property (nonatomic) CGSize contextSize;
@property (nonatomic) ASSizeRange contextSizeRange;
@end
@implementation ASCornerLayoutSpecSnapshotTests
- (void)setUp
{
[super setUp];
self.recordMode = NO;
_boxColor = [UIColor greenColor];
_baseColor = [UIColor blueColor];
_cornerColor = [UIColor orangeColor];
_contextColor = [UIColor lightGrayColor];
_baseSize = CGSizeMake(60, 60);
_cornerSize = CGSizeMake(20, 20);
_contextSize = CGSizeMake(120, 120);
_contextSizeRange = ASSizeRangeMake(CGSizeZero, _contextSize);
}
- (void)testCornerSpecForAllLocations
{
ASCornerLayoutSpecSnapshotTestsOffsetOption center = ASCornerLayoutSpecSnapshotTestsOffsetOptionCenter;
[self testCornerSpecWithLocation:ASCornerLayoutLocationTopLeft offsetOption:center wrapsCorner:NO];
[self testCornerSpecWithLocation:ASCornerLayoutLocationTopLeft offsetOption:center wrapsCorner:YES];
[self testCornerSpecWithLocation:ASCornerLayoutLocationTopRight offsetOption:center wrapsCorner:NO];
[self testCornerSpecWithLocation:ASCornerLayoutLocationTopRight offsetOption:center wrapsCorner:YES];
[self testCornerSpecWithLocation:ASCornerLayoutLocationBottomLeft offsetOption:center wrapsCorner:NO];
[self testCornerSpecWithLocation:ASCornerLayoutLocationBottomLeft offsetOption:center wrapsCorner:YES];
[self testCornerSpecWithLocation:ASCornerLayoutLocationBottomRight offsetOption:center wrapsCorner:NO];
[self testCornerSpecWithLocation:ASCornerLayoutLocationBottomRight offsetOption:center wrapsCorner:YES];
}
- (void)testCornerSpecForAllLocationsWithInnerOffset
{
ASCornerLayoutSpecSnapshotTestsOffsetOption inner = ASCornerLayoutSpecSnapshotTestsOffsetOptionInner;
[self testCornerSpecWithLocation:ASCornerLayoutLocationTopLeft offsetOption:inner wrapsCorner:NO];
[self testCornerSpecWithLocation:ASCornerLayoutLocationTopLeft offsetOption:inner wrapsCorner:YES];
[self testCornerSpecWithLocation:ASCornerLayoutLocationTopRight offsetOption:inner wrapsCorner:NO];
[self testCornerSpecWithLocation:ASCornerLayoutLocationTopRight offsetOption:inner wrapsCorner:YES];
[self testCornerSpecWithLocation:ASCornerLayoutLocationBottomLeft offsetOption:inner wrapsCorner:NO];
[self testCornerSpecWithLocation:ASCornerLayoutLocationBottomLeft offsetOption:inner wrapsCorner:YES];
[self testCornerSpecWithLocation:ASCornerLayoutLocationBottomRight offsetOption:inner wrapsCorner:NO];
[self testCornerSpecWithLocation:ASCornerLayoutLocationBottomRight offsetOption:inner wrapsCorner:YES];
}
- (void)testCornerSpecForAllLocationsWithOuterOffset
{
ASCornerLayoutSpecSnapshotTestsOffsetOption outer = ASCornerLayoutSpecSnapshotTestsOffsetOptionOuter;
[self testCornerSpecWithLocation:ASCornerLayoutLocationTopLeft offsetOption:outer wrapsCorner:NO];
[self testCornerSpecWithLocation:ASCornerLayoutLocationTopLeft offsetOption:outer wrapsCorner:YES];
[self testCornerSpecWithLocation:ASCornerLayoutLocationTopRight offsetOption:outer wrapsCorner:NO];
[self testCornerSpecWithLocation:ASCornerLayoutLocationTopRight offsetOption:outer wrapsCorner:YES];
[self testCornerSpecWithLocation:ASCornerLayoutLocationBottomLeft offsetOption:outer wrapsCorner:NO];
[self testCornerSpecWithLocation:ASCornerLayoutLocationBottomLeft offsetOption:outer wrapsCorner:YES];
[self testCornerSpecWithLocation:ASCornerLayoutLocationBottomRight offsetOption:outer wrapsCorner:NO];
[self testCornerSpecWithLocation:ASCornerLayoutLocationBottomRight offsetOption:outer wrapsCorner:YES];
}
- (void)testCornerSpecWithLocation:(ASCornerLayoutLocation)location
offsetOption:(ASCornerLayoutSpecSnapshotTestsOffsetOption)offsetOption
wrapsCorner:(BOOL)wrapsCorner
{
ASDisplayNode *baseNode = ASDisplayNodeWithBackgroundColor(_baseColor, _baseSize);
ASDisplayNode *cornerNode = ASDisplayNodeWithBackgroundColor(_cornerColor, _cornerSize);
ASDisplayNode *debugBoxNode = ASDisplayNodeWithBackgroundColor(_boxColor);
baseNode.style.layoutPosition = CGPointMake((_contextSize.width - _baseSize.width) / 2,
(_contextSize.height - _baseSize.height) / 2);
ASCornerLayoutSpec *cornerSpec = [ASCornerLayoutSpec cornerLayoutSpecWithChild:baseNode
corner:cornerNode
location:location];
CGPoint delta = (CGPoint){ _cornerSize.width / 2, _cornerSize.height / 2 };
cornerSpec.offset = [self offsetForOption:offsetOption location:location delta:delta];
cornerSpec.wrapsCorner = wrapsCorner;
ASBackgroundLayoutSpec *backgroundSpec = [ASBackgroundLayoutSpec backgroundLayoutSpecWithChild:cornerSpec
background:debugBoxNode];
[self testLayoutSpec:backgroundSpec
sizeRange:_contextSizeRange
subnodes:@[debugBoxNode, baseNode, cornerNode]
identifier:[self suffixWithLocation:location option:offsetOption wrapsCorner:wrapsCorner]];
}
- (CGPoint)offsetForOption:(ASCornerLayoutSpecSnapshotTestsOffsetOption)option
location:(ASCornerLayoutLocation)location
delta:(CGPoint)delta
{
CGFloat x = delta.x;
CGFloat y = delta.y;
switch (option) {
case ASCornerLayoutSpecSnapshotTestsOffsetOptionCenter:
return CGPointZero;
case ASCornerLayoutSpecSnapshotTestsOffsetOptionInner:
switch (location) {
case ASCornerLayoutLocationTopLeft: return (CGPoint){ x, y };
case ASCornerLayoutLocationTopRight: return (CGPoint){ -x, y };
case ASCornerLayoutLocationBottomLeft: return (CGPoint){ x, -y };
case ASCornerLayoutLocationBottomRight: return (CGPoint){ -x, -y };
}
case ASCornerLayoutSpecSnapshotTestsOffsetOptionOuter:
switch (location) {
case ASCornerLayoutLocationTopLeft: return (CGPoint){ -x, -y };
case ASCornerLayoutLocationTopRight: return (CGPoint){ x, -y };
case ASCornerLayoutLocationBottomLeft: return (CGPoint){ -x, y };
case ASCornerLayoutLocationBottomRight: return (CGPoint){ x, y };
}
}
}
- (NSString *)suffixWithLocation:(ASCornerLayoutLocation)location
option:(ASCornerLayoutSpecSnapshotTestsOffsetOption)option
wrapsCorner:(BOOL)wrapsCorner
{
NSMutableString *desc = [NSMutableString string];
switch (location) {
case ASCornerLayoutLocationTopLeft:
[desc appendString:@"topLeft"];
break;
case ASCornerLayoutLocationTopRight:
[desc appendString:@"topRight"];
break;
case ASCornerLayoutLocationBottomLeft:
[desc appendString:@"bottomLeft"];
break;
case ASCornerLayoutLocationBottomRight:
[desc appendString:@"bottomRight"];
break;
}
[desc appendString:@"_"];
switch (option) {
case ASCornerLayoutSpecSnapshotTestsOffsetOptionCenter:
[desc appendString:@"center"];
break;
case ASCornerLayoutSpecSnapshotTestsOffsetOptionInner:
[desc appendString:@"inner"];
break;
case ASCornerLayoutSpecSnapshotTestsOffsetOptionOuter:
[desc appendString:@"outer"];
break;
}
[desc appendString:@"_"];
if (wrapsCorner) {
[desc appendString:@"fullSize"];
} else {
[desc appendString:@"childSize"];
}
return desc.copy;
}
@end