Swiftgram/AsyncDisplayKitTests/ASTextNodeShadowerTests.m
2014-06-26 22:32:55 -07:00

157 lines
8.3 KiB
Objective-C

/* 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 "ASTextNodeShadower.h"
@interface ASTextNodeShadowerTests : XCTestCase
@property (nonatomic, readwrite, strong) ASTextNodeShadower *shadower;
@end
@implementation ASTextNodeShadowerTests
- (void)testInstantiation
{
CGSize shadowOffset = CGSizeMake(3, 5);
CGColorRef shadowColor = CGColorRetain([UIColor blackColor].CGColor);
CGFloat shadowOpacity = 0.3;
CGFloat shadowRadius = 4.2;
_shadower = [[ASTextNodeShadower alloc] initWithShadowOffset:shadowOffset
shadowColor:shadowColor
shadowOpacity:shadowOpacity
shadowRadius:shadowRadius];
XCTAssertNotNil(_shadower, @"Couldn't instantiate shadow drawer");
XCTAssertTrue(CGSizeEqualToSize(_shadower.shadowOffset, shadowOffset), @"Failed to set shadowOffset (%@) to %@", NSStringFromCGSize(_shadower.shadowOffset), NSStringFromCGSize(shadowOffset));
XCTAssertTrue(_shadower.shadowColor == shadowColor, @"Failed to set shadowColor (%@) to %@", _shadower.shadowColor, shadowColor);
XCTAssertTrue(_shadower.shadowOpacity == shadowOpacity, @"Failed to set shadowOpacity (%f) to %f", _shadower.shadowOpacity, shadowOpacity);
XCTAssertTrue(_shadower.shadowRadius == shadowRadius, @"Failed to set shadowRadius (%f) to %f", _shadower.shadowRadius, shadowRadius);
CGColorRelease(shadowColor);
}
- (void)testNoShadowIfNoRadiusAndNoOffset
{
CGSize shadowOffset = CGSizeZero;
CGColorRef shadowColor = CGColorRetain([UIColor blackColor].CGColor);
CGFloat shadowOpacity = 0.3;
CGFloat shadowRadius = 0;
_shadower = [[ASTextNodeShadower alloc] initWithShadowOffset:shadowOffset
shadowColor:shadowColor
shadowOpacity:shadowOpacity
shadowRadius:shadowRadius];
UIEdgeInsets shadowPadding = [_shadower shadowPadding];
XCTAssertTrue(UIEdgeInsetsEqualToEdgeInsets(shadowPadding, UIEdgeInsetsZero), @"There should be no shadow padding if shadow radius is zero");
CGColorRelease(shadowColor);
}
- (void)testShadowIfOffsetButNoRadius
{
CGSize shadowOffset = CGSizeMake(3, 5);
CGColorRef shadowColor = CGColorRetain([UIColor blackColor].CGColor);
CGFloat shadowOpacity = 0.3;
CGFloat shadowRadius = 0;
_shadower = [[ASTextNodeShadower alloc] initWithShadowOffset:shadowOffset
shadowColor:shadowColor
shadowOpacity:shadowOpacity
shadowRadius:shadowRadius];
UIEdgeInsets shadowPadding = [_shadower shadowPadding];
UIEdgeInsets expectedInsets = UIEdgeInsetsMake(0, 0, -5, -3);
XCTAssertTrue(UIEdgeInsetsEqualToEdgeInsets(shadowPadding, expectedInsets), @"Expected insets %@, encountered insets %@", NSStringFromUIEdgeInsets(expectedInsets), NSStringFromUIEdgeInsets(shadowPadding));
CGColorRelease(shadowColor);
}
- (void)testNoShadowIfNoOpacity
{
CGSize shadowOffset = CGSizeMake(3, 5);
CGColorRef shadowColor = CGColorRetain([UIColor blackColor].CGColor);
CGFloat shadowOpacity = 0;
CGFloat shadowRadius = 4;
_shadower = [[ASTextNodeShadower alloc] initWithShadowOffset:shadowOffset
shadowColor:shadowColor
shadowOpacity:shadowOpacity
shadowRadius:shadowRadius];
UIEdgeInsets shadowPadding = [_shadower shadowPadding];
XCTAssertTrue(UIEdgeInsetsEqualToEdgeInsets(shadowPadding, UIEdgeInsetsZero), @"There should be no shadow padding if shadow opacity is zero");
CGColorRelease(shadowColor);
}
- (void)testShadowPaddingForRadiusOf4
{
CGSize shadowOffset = CGSizeZero;
CGColorRef shadowColor = CGColorRetain([UIColor blackColor].CGColor);
CGFloat shadowOpacity = 1;
CGFloat shadowRadius = 4;
_shadower = [[ASTextNodeShadower alloc] initWithShadowOffset:shadowOffset
shadowColor:shadowColor
shadowOpacity:shadowOpacity
shadowRadius:shadowRadius];
UIEdgeInsets shadowPadding = [_shadower shadowPadding];
UIEdgeInsets expectedInsets = UIEdgeInsetsMake(-shadowRadius, -shadowRadius, -shadowRadius, -shadowRadius);
XCTAssertTrue(UIEdgeInsetsEqualToEdgeInsets(shadowPadding, expectedInsets), @"Unexpected edge insets %@ for radius of %f ", NSStringFromUIEdgeInsets(shadowPadding), shadowRadius);
CGColorRelease(shadowColor);
}
- (void)testShadowPaddingForRadiusOf4OffsetOf11
{
CGSize shadowOffset = CGSizeMake(1, 1);
CGColorRef shadowColor = CGColorRetain([UIColor blackColor].CGColor);
CGFloat shadowOpacity = 1;
CGFloat shadowRadius = 4;
_shadower = [[ASTextNodeShadower alloc] initWithShadowOffset:shadowOffset
shadowColor:shadowColor
shadowOpacity:shadowOpacity
shadowRadius:shadowRadius];
UIEdgeInsets shadowPadding = [_shadower shadowPadding];
UIEdgeInsets expectedInsets = UIEdgeInsetsMake(-shadowRadius + shadowOffset.height, // Top: -3
-shadowRadius + shadowOffset.width, // Left: -3
-shadowRadius - shadowOffset.height, // Bottom: -5
-shadowRadius - shadowOffset.width); // Right: -5
XCTAssertTrue(UIEdgeInsetsEqualToEdgeInsets(shadowPadding, expectedInsets), @"Unexpected edge insets %@ for radius of %f ", NSStringFromUIEdgeInsets(shadowPadding), shadowRadius);
CGColorRelease(shadowColor);
}
- (void)testShadowPaddingForRadiusOf4OffsetOfNegative11
{
CGSize shadowOffset = CGSizeMake(-1, -1);
CGColorRef shadowColor = CGColorRetain([UIColor blackColor].CGColor);
CGFloat shadowOpacity = 1;
CGFloat shadowRadius = 4;
_shadower = [[ASTextNodeShadower alloc] initWithShadowOffset:shadowOffset
shadowColor:shadowColor
shadowOpacity:shadowOpacity
shadowRadius:shadowRadius];
UIEdgeInsets shadowPadding = [_shadower shadowPadding];
UIEdgeInsets expectedInsets = UIEdgeInsetsMake(-shadowRadius + shadowOffset.height, // Top: -3
-shadowRadius + shadowOffset.width, // Left: -5
-shadowRadius - shadowOffset.height, // Bottom: -5
-shadowRadius - shadowOffset.width); // Right: -3
XCTAssertTrue(UIEdgeInsetsEqualToEdgeInsets(shadowPadding, expectedInsets), @"Unexpected edge insets %@ for radius of %f ", NSStringFromUIEdgeInsets(shadowPadding), shadowRadius);
CGColorRelease(shadowColor);
}
- (void)testASDNEdgeInsetsInvert
{
UIEdgeInsets insets = UIEdgeInsetsMake(-5, -7, -3, -2);
UIEdgeInsets invertedInsets = ASDNEdgeInsetsInvert(insets);
UIEdgeInsets expectedInsets = UIEdgeInsetsMake(5, 7, 3, 2);
XCTAssertTrue(UIEdgeInsetsEqualToEdgeInsets(invertedInsets, expectedInsets), @"Expected %@, actual result %@", NSStringFromUIEdgeInsets(expectedInsets), NSStringFromUIEdgeInsets(invertedInsets));
}
- (void)testASDNEdgeInsetsInvertDoubleNegation
{
CGRect originalRect = CGRectMake(31, 32, 33, 34);
UIEdgeInsets insets = UIEdgeInsetsMake(-5, -7, -3, -2);
CGRect insettedRect = UIEdgeInsetsInsetRect(originalRect, insets);
CGRect outsettedInsettedRect = UIEdgeInsetsInsetRect(insettedRect, ASDNEdgeInsetsInvert(insets));
XCTAssertTrue(CGRectEqualToRect(originalRect, outsettedInsettedRect), @"Insetting a CGRect, and then outsetting it (insetting with the negated edge insets) should return the original CGRect");
}
@end