@@ -71,6 +71,9 @@ @interface ASTestDisplayNode : ASDisplayNode
7171@property (atomic , copy ) CGSize(^calculateSizeBlock)(ASTestDisplayNode *node, CGSize size);
7272@end
7373
74+ @interface ASTestResponderNode : ASTestDisplayNode
75+ @end
76+
7477@implementation ASTestDisplayNode
7578
7679- (CGSize)calculateSizeThatFits : (CGSize)constrainedSize
@@ -91,9 +94,57 @@ - (void)dealloc
9194@interface UIDisplayNodeTestView : UIView
9295@end
9396
97+ @interface UIResponderNodeTestView : _ASDisplayView
98+ @property (nonatomic ) BOOL isFirstResponder;
99+ @end
100+
94101@implementation UIDisplayNodeTestView
95102@end
96103
104+ @interface ASTestWindow : UIWindow
105+ @end
106+
107+ @implementation ASTestWindow
108+
109+ - (id )firstResponder {
110+ return self.subviews .firstObject ;
111+ }
112+
113+ @end
114+
115+ @implementation ASTestResponderNode
116+
117+ + (Class )viewClass {
118+ return [UIResponderNodeTestView class ];
119+ }
120+
121+ - (BOOL )canBecomeFirstResponder {
122+ return YES ;
123+ }
124+
125+ @end
126+
127+ @implementation UIResponderNodeTestView
128+
129+ - (BOOL )becomeFirstResponder {
130+ self.isFirstResponder = YES ;
131+ return YES ;
132+ }
133+
134+ - (BOOL )canResignFirstResponder {
135+ return YES ;
136+ }
137+
138+ - (BOOL )resignFirstResponder {
139+ if (self.isFirstResponder ) {
140+ self.isFirstResponder = NO ;
141+ return YES ;
142+ }
143+ return NO ;
144+ }
145+
146+ @end
147+
97148@interface ASDisplayNodeTests : XCTestCase
98149@end
99150
@@ -102,6 +153,25 @@ @implementation ASDisplayNodeTests
102153 dispatch_queue_t queue;
103154}
104155
156+ - (void )testOverriddenFirstResponderBehavior {
157+ ASTestDisplayNode *node = [[ASTestResponderNode alloc ] init ];
158+ XCTAssertTrue ([node canBecomeFirstResponder ]);
159+ XCTAssertTrue ([node becomeFirstResponder ]);
160+ }
161+
162+ - (void )testDefaultFirstResponderBehavior {
163+ ASTestDisplayNode *node = [[ASTestDisplayNode alloc ] init ];
164+ XCTAssertFalse ([node canBecomeFirstResponder ]);
165+ XCTAssertFalse ([node becomeFirstResponder ]);
166+ }
167+
168+ - (void )testLayerBackedFirstResponderBehavior {
169+ ASTestDisplayNode *node = [[ASTestResponderNode alloc ] init ];
170+ node.layerBacked = YES ;
171+ XCTAssertTrue ([node canBecomeFirstResponder ]);
172+ XCTAssertFalse ([node becomeFirstResponder ]);
173+ }
174+
105175- (void )setUp
106176{
107177 [super setUp ];
0 commit comments