forked from TextureGroup/Texture
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathASLayoutSpecTests.m
120 lines (97 loc) · 3.84 KB
/
ASLayoutSpecTests.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
//
// ASLayoutSpecTests.m
// Texture
//
// 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 /ASDK-Licenses directory of this source tree. An additional
// grant of patent rights can be found in the PATENTS file in the same directory.
//
// Modifications to this file made after 4/13/2017 are: Copyright (c) 2017-present,
// Pinterest, Inc. Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
#import <XCTest/XCTest.h>
#import <AsyncDisplayKit/AsyncDisplayKit.h>
#import <AsyncDisplayKit/ASLayoutElementExtensibility.h>
#pragma mark - ASDKExtendedLayoutSpec
/*
* Extend the ASDKExtendedLayoutElement
* It adds a
* - primitive / CGFloat (extendedWidth)
* - struct / ASDimension (extendedDimension)
* - primitive / ASStackLayoutDirection (extendedDirection)
*/
@protocol ASDKExtendedLayoutElement <NSObject>
@property (nonatomic) CGFloat extendedWidth;
@property (nonatomic) ASDimension extendedDimension;
@property (copy, nonatomic) NSString *extendedName;
@end
/*
* Let the ASLayoutElementStyle conform to the ASDKExtendedLayoutElement protocol and add properties implementation
*/
@interface ASLayoutElementStyle (ASDKExtendedLayoutElement) <ASDKExtendedLayoutElement>
@end
@implementation ASLayoutElementStyle (ASDKExtendedLayoutElement)
ASDK_STYLE_PROP_PRIM(CGFloat, extendedWidth, setExtendedWidth, 0);
ASDK_STYLE_PROP_STR(ASDimension, extendedDimension, setExtendedDimension, ASDimensionMake(ASDimensionUnitAuto, 0));
ASDK_STYLE_PROP_OBJ(NSString *, extendedName, setExtendedName);
@end
/*
* As the ASLayoutElementStyle conforms to the ASDKExtendedLayoutElement protocol now, ASDKExtendedLayoutElement properties
* can be accessed in ASDKExtendedLayoutSpec
*/
@interface ASDKExtendedLayoutSpec : ASLayoutSpec
@end
@implementation ASDKExtendedLayoutSpec
- (void)doSetSomeStyleValuesToChildren
{
for (id<ASLayoutElement> child in self.children) {
child.style.extendedWidth = 100;
child.style.extendedDimension = ASDimensionMake(100);
child.style.extendedName = @"ASDK";
}
}
- (void)doUseSomeStyleValuesFromChildren
{
for (id<ASLayoutElement> child in self.children) {
__unused CGFloat extendedWidth = child.style.extendedWidth;
__unused ASDimension extendedDimension = child.style.extendedDimension;
__unused NSString *extendedName = child.style.extendedName;
}
}
@end
#pragma mark - ASLayoutSpecTests
@interface ASLayoutSpecTests : XCTestCase
@end
@implementation ASLayoutSpecTests
- (void)testSetPrimitiveToExtendedStyle
{
ASDisplayNode *node = [[ASDisplayNode alloc] init];
node.style.extendedWidth = 100;
XCTAssert(node.style.extendedWidth == 100, @"Primitive value should be set on extended style");
}
- (void)testSetStructToExtendedStyle
{
ASDisplayNode *node = [[ASDisplayNode alloc] init];
node.style.extendedDimension = ASDimensionMake(100);
XCTAssertTrue(ASDimensionEqualToDimension(node.style.extendedDimension, ASDimensionMake(100)), @"Struct should be set on extended style");
}
- (void)testSetObjectToExtendedStyle
{
NSString *extendedName = @"ASDK";
ASDisplayNode *node = [[ASDisplayNode alloc] init];
node.style.extendedName = extendedName;
XCTAssertEqualObjects(node.style.extendedName, extendedName, @"Object should be set on extended style");
}
- (void)testUseOfExtendedStyleProperties
{
ASDKExtendedLayoutSpec *extendedLayoutSpec = [ASDKExtendedLayoutSpec new];
extendedLayoutSpec.children = @[[[ASDisplayNode alloc] init], [[ASDisplayNode alloc] init]];
XCTAssertNoThrow([extendedLayoutSpec doSetSomeStyleValuesToChildren]);
XCTAssertNoThrow([extendedLayoutSpec doUseSomeStyleValuesFromChildren]);
}
@end