Fix synchronous state of node if +viewClass or +layerClass is overwritten #trivial (#776)

* Fix synchronous state of node if +viewClass is overwritten

* Also check for _layerClass overwrite for synchronous flag

* Update some code style
This commit is contained in:
Michael Schneider
2018-01-31 07:07:38 -08:00
committed by GitHub
parent fef965f78e
commit 20e31f7d70
2 changed files with 39 additions and 0 deletions

View File

@@ -253,6 +253,11 @@ static ASDisplayNodeMethodOverrides GetASDisplayNodeMethodOverrides(Class c)
_viewClass = [self.class viewClass];
_layerClass = [self.class layerClass];
BOOL isSynchronous = ![_viewClass isSubclassOfClass:[_ASDisplayView class]]
|| ![_layerClass isSubclassOfClass:[_ASDisplayLayer class]];
setFlag(Synchronous, isSynchronous);
_contentsScaleForDisplay = ASScreenScale();
_drawingPriority = ASDefaultDrawingPriority;

View File

@@ -173,6 +173,28 @@ for (ASDisplayNode *n in @[ nodes ]) {\
@end
@interface ASSynchronousTestDisplayNodeViaViewClass : ASDisplayNode
@end
@implementation ASSynchronousTestDisplayNodeViaViewClass
+ (Class)viewClass {
return [UIView class];
}
@end
@interface ASSynchronousTestDisplayNodeViaLayerClass : ASDisplayNode
@end
@implementation ASSynchronousTestDisplayNodeViaLayerClass
+ (Class)layerClass {
return [CALayer class];
}
@end
@interface UIDisplayNodeTestView : UIView
@end
@@ -2354,4 +2376,16 @@ static bool stringContainsPointer(NSString *description, id p) {
XCTAssertEqual(ASScreenScale(), UIScreen.mainScreen.scale);
}
- (void)testThatIfViewClassIsOverwrittenItsSynchronous
{
ASSynchronousTestDisplayNodeViaViewClass *node = [[ASSynchronousTestDisplayNodeViaViewClass alloc] init];
XCTAssertTrue([node isSynchronous], @"Node should be synchronous if viewClass is ovewritten and not a subclass of _ASDisplayView");
}
- (void)testThatIfLayerClassIsOverwrittenItsSynchronous
{
ASSynchronousTestDisplayNodeViaLayerClass *node = [[ASSynchronousTestDisplayNodeViaLayerClass alloc] init];
XCTAssertTrue([node isSynchronous], @"Node should be synchronous if viewClass is ovewritten and not a subclass of _ASDisplayView");
}
@end