diff --git a/AsyncDisplayKit/ASVideoNode.mm b/AsyncDisplayKit/ASVideoNode.mm index 8290e9da4d..379a70955b 100644 --- a/AsyncDisplayKit/ASVideoNode.mm +++ b/AsyncDisplayKit/ASVideoNode.mm @@ -453,7 +453,9 @@ static NSString * const kStatus = @"status"; - (void)setDelegate:(id)delegate { + [super setDelegate:delegate]; _delegate = delegate; + if (_delegate == nil) { memset(&_delegateFlags, 0, sizeof(_delegateFlags)); } else { diff --git a/AsyncDisplayKitTests/ASVideoNodeTests.m b/AsyncDisplayKitTests/ASVideoNodeTests.m index d2ba042d6a..f7c4a6b079 100644 --- a/AsyncDisplayKitTests/ASVideoNodeTests.m +++ b/AsyncDisplayKitTests/ASVideoNodeTests.m @@ -15,7 +15,7 @@ #import #import -@interface ASVideoNodeTests : XCTestCase +@interface ASVideoNodeTests : XCTestCase { ASVideoNode *_videoNode; AVURLAsset *_firstAsset; @@ -25,10 +25,18 @@ } @end +@interface ASNetworkImageNode () { + @public __weak id _delegate; +} +@end + + @interface ASVideoNode () { ASDisplayNode *_playerNode; AVPlayer *_player; } + + @property (atomic, readwrite) ASInterfaceState interfaceState; @property (atomic, readonly) ASDisplayNode *spinner; @property (atomic, readwrite) ASDisplayNode *playerNode; @@ -405,4 +413,18 @@ XCTAssertNil(_videoNode.image); } +- (void)testDelegateProperlySetForClassHierarchy +{ + _videoNode.delegate = self; + + XCTAssertTrue([_videoNode.delegate conformsToProtocol:@protocol(ASVideoNodeDelegate)]); + XCTAssertTrue([_videoNode.delegate conformsToProtocol:@protocol(ASNetworkImageNodeDelegate)]); + XCTAssertTrue([((ASNetworkImageNode*)_videoNode).delegate conformsToProtocol:@protocol(ASNetworkImageNodeDelegate)]); + XCTAssertTrue([((ASNetworkImageNode*)_videoNode)->_delegate conformsToProtocol:@protocol(ASNetworkImageNodeDelegate)]); + + XCTAssertEqual(_videoNode.delegate, self); + XCTAssertEqual(((ASNetworkImageNode*)_videoNode).delegate, self); + XCTAssertEqual(((ASNetworkImageNode*)_videoNode)->_delegate, self); +} + @end