From b869d025ff24e7134c9aae5afe47f71d676b73f5 Mon Sep 17 00:00:00 2001 From: Nadine Salter Date: Fri, 20 Mar 2015 17:01:10 -0700 Subject: [PATCH] [tests] ASSnapshotTestCase. --- AsyncDisplayKit.xcodeproj/project.pbxproj | 17 ++++++ .../ASImageNodeSnapshotTests.m | 35 ++++++++++++ AsyncDisplayKitTests/ASSnapshotTestCase.h | 26 +++++++++ AsyncDisplayKitTests/ASSnapshotTestCase.mm | 54 ++++++++++++++++++ .../testRenderLogoSquare@2x.png | Bin 0 -> 14527 bytes Podfile | 1 + Podfile.lock | 3 + 7 files changed, 136 insertions(+) create mode 100644 AsyncDisplayKitTests/ASImageNodeSnapshotTests.m create mode 100644 AsyncDisplayKitTests/ASSnapshotTestCase.h create mode 100644 AsyncDisplayKitTests/ASSnapshotTestCase.mm create mode 100644 AsyncDisplayKitTests/ReferenceImages/ASImageNodeSnapshotTests/testRenderLogoSquare@2x.png diff --git a/AsyncDisplayKit.xcodeproj/project.pbxproj b/AsyncDisplayKit.xcodeproj/project.pbxproj index c0e7fd0173..021f2aaf63 100644 --- a/AsyncDisplayKit.xcodeproj/project.pbxproj +++ b/AsyncDisplayKit.xcodeproj/project.pbxproj @@ -27,6 +27,7 @@ 055F1A3919ABD413004DAFF1 /* ASRangeController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 055F1A3719ABD413004DAFF1 /* ASRangeController.mm */; }; 055F1A3C19ABD43F004DAFF1 /* ASCellNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 055F1A3A19ABD43F004DAFF1 /* ASCellNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; 055F1A3D19ABD43F004DAFF1 /* ASCellNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 055F1A3B19ABD43F004DAFF1 /* ASCellNode.m */; }; + 056D21551ABCEF50001107EF /* ASImageNodeSnapshotTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 056D21541ABCEF50001107EF /* ASImageNodeSnapshotTests.m */; }; 0574D5E219C110940097DC25 /* ASTableViewProtocols.h in Headers */ = {isa = PBXBuildFile; fileRef = 0574D5E119C110610097DC25 /* ASTableViewProtocols.h */; settings = {ATTRIBUTES = (Public, ); }; }; 0587F9BD1A7309ED00AFF0BA /* ASEditableTextNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 0587F9BB1A7309ED00AFF0BA /* ASEditableTextNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; 0587F9BE1A7309ED00AFF0BA /* ASEditableTextNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0587F9BC1A7309ED00AFF0BA /* ASEditableTextNode.mm */; }; @@ -135,6 +136,7 @@ 058D0A84195D060300B7D73C /* ASDisplayNodeExtraIvars.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D0A45195D058D00B7D73C /* ASDisplayNodeExtraIvars.h */; settings = {ATTRIBUTES = (Public, ); }; }; 05A6D05A19D0EB64002DD95E /* ASDealloc2MainObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 05A6D05819D0EB64002DD95E /* ASDealloc2MainObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; 05A6D05B19D0EB64002DD95E /* ASDealloc2MainObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 05A6D05919D0EB64002DD95E /* ASDealloc2MainObject.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 05EA6FE71AC0966E00E35788 /* ASSnapshotTestCase.mm in Sources */ = {isa = PBXBuildFile; fileRef = 05EA6FE61AC0966E00E35788 /* ASSnapshotTestCase.mm */; }; 05F20AA41A15733C00DCA68A /* ASImageProtocols.h in Headers */ = {isa = PBXBuildFile; fileRef = 05F20AA31A15733C00DCA68A /* ASImageProtocols.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1950C4491A3BB5C1005C8279 /* ASEqualityHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = 1950C4481A3BB5C1005C8279 /* ASEqualityHelpers.h */; }; 2911485C1A77147A005D0878 /* ASControlNodeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 2911485B1A77147A005D0878 /* ASControlNodeTests.m */; }; @@ -210,6 +212,8 @@ 055F1A3719ABD413004DAFF1 /* ASRangeController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ASRangeController.mm; sourceTree = ""; }; 055F1A3A19ABD43F004DAFF1 /* ASCellNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASCellNode.h; sourceTree = ""; }; 055F1A3B19ABD43F004DAFF1 /* ASCellNode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASCellNode.m; sourceTree = ""; }; + 056D21501ABCEDA1001107EF /* ASSnapshotTestCase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASSnapshotTestCase.h; sourceTree = ""; }; + 056D21541ABCEF50001107EF /* ASImageNodeSnapshotTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASImageNodeSnapshotTests.m; sourceTree = ""; }; 0574D5E119C110610097DC25 /* ASTableViewProtocols.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASTableViewProtocols.h; sourceTree = ""; }; 0587F9BB1A7309ED00AFF0BA /* ASEditableTextNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASEditableTextNode.h; sourceTree = ""; }; 0587F9BC1A7309ED00AFF0BA /* ASEditableTextNode.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ASEditableTextNode.mm; sourceTree = ""; }; @@ -295,6 +299,7 @@ 058D0A45195D058D00B7D73C /* ASDisplayNodeExtraIvars.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASDisplayNodeExtraIvars.h; sourceTree = ""; }; 05A6D05819D0EB64002DD95E /* ASDealloc2MainObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ASDealloc2MainObject.h; path = ../Details/ASDealloc2MainObject.h; sourceTree = ""; }; 05A6D05919D0EB64002DD95E /* ASDealloc2MainObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ASDealloc2MainObject.m; path = ../Details/ASDealloc2MainObject.m; sourceTree = ""; }; + 05EA6FE61AC0966E00E35788 /* ASSnapshotTestCase.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ASSnapshotTestCase.mm; sourceTree = ""; }; 05F20AA31A15733C00DCA68A /* ASImageProtocols.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASImageProtocols.h; sourceTree = ""; }; 1950C4481A3BB5C1005C8279 /* ASEqualityHelpers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASEqualityHelpers.h; sourceTree = ""; }; 2911485B1A77147A005D0878 /* ASControlNodeTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASControlNodeTests.m; sourceTree = ""; }; @@ -443,6 +448,9 @@ 058D09C5195D04C000B7D73C /* AsyncDisplayKitTests */ = { isa = PBXGroup; children = ( + 056D21501ABCEDA1001107EF /* ASSnapshotTestCase.h */, + 05EA6FE61AC0966E00E35788 /* ASSnapshotTestCase.mm */, + 056D21541ABCEF50001107EF /* ASImageNodeSnapshotTests.m */, 29CDC2E11AAE70D000833CA4 /* ASBasicImageDownloaderContextTests.m */, 296A0A341A951ABF005ACEAA /* ASBatchFetchingTests.m */, 2911485B1A77147A005D0878 /* ASControlNodeTests.m */, @@ -865,6 +873,8 @@ 058D0A3C195D057000B7D73C /* ASMutableAttributedStringBuilderTests.m in Sources */, 058D0A3F195D057000B7D73C /* ASTextNodeShadowerTests.m in Sources */, 29CDC2E21AAE70D000833CA4 /* ASBasicImageDownloaderContextTests.m in Sources */, + 056D21551ABCEF50001107EF /* ASImageNodeSnapshotTests.m in Sources */, + 05EA6FE71AC0966E00E35788 /* ASSnapshotTestCase.mm in Sources */, 058D0A3B195D057000B7D73C /* ASDisplayNodeTestsHelper.m in Sources */, 058D0A3A195D057000B7D73C /* ASDisplayNodeTests.m in Sources */, 052EE0661A159FEF002C6279 /* ASMultiplexImageNodeTests.m in Sources */, @@ -1014,6 +1024,8 @@ GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", + "COCOAPODS=1", + "FB_REFERENCE_IMAGE_DIR=\"\\\"$(SOURCE_ROOT)/$(PROJECT_NAME)Tests/ReferenceImages\\\"\"", ); GCC_TREAT_WARNINGS_AS_ERRORS = YES; GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; @@ -1034,6 +1046,11 @@ ); GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "AsyncDisplayKit/AsyncDisplayKit-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "COCOAPODS=1", + "FB_REFERENCE_IMAGE_DIR=\"\\\"$(SOURCE_ROOT)/$(PROJECT_NAME)Tests/ReferenceImages\\\"\"", + ); GCC_TREAT_WARNINGS_AS_ERRORS = YES; GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; INFOPLIST_FILE = "AsyncDisplayKitTests/AsyncDisplayKitTests-Info.plist"; diff --git a/AsyncDisplayKitTests/ASImageNodeSnapshotTests.m b/AsyncDisplayKitTests/ASImageNodeSnapshotTests.m new file mode 100644 index 0000000000..e5a48b5e5c --- /dev/null +++ b/AsyncDisplayKitTests/ASImageNodeSnapshotTests.m @@ -0,0 +1,35 @@ +/* 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 "ASSnapshotTestCase.h" + +#import + +@interface ASImageNodeSnapshotTests : ASSnapshotTestCase +@end + +@implementation ASImageNodeSnapshotTests + +- (UIImage *)testImage +{ + NSString *path = [[NSBundle bundleForClass:[self class]] pathForResource:@"logo-square" + ofType:@"png" inDirectory:@"TestResources"]; + return [UIImage imageWithContentsOfFile:path]; +} + +- (void)testRenderLogoSquare +{ + // trivial test case to ensure ASSnapshotTestCase works + ASImageNode *imageNode = [[ASImageNode alloc] init]; + imageNode.image = [self testImage]; + imageNode.frame = CGRectMake(0, 0, 100, 100); + + ASSnapshotVerifyNode(imageNode, nil); +} + +@end diff --git a/AsyncDisplayKitTests/ASSnapshotTestCase.h b/AsyncDisplayKitTests/ASSnapshotTestCase.h new file mode 100644 index 0000000000..a523f57e03 --- /dev/null +++ b/AsyncDisplayKitTests/ASSnapshotTestCase.h @@ -0,0 +1,26 @@ +/* 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 "FBSnapshotTestCase.h" + +#import + +#define ASSnapshotVerifyNode(node__, identifier__) \ +{ \ + [ASSnapshotTestCase hackilySynchronouslyRecursivelyRenderNode:node__]; \ + FBSnapshotVerifyLayer(node__.layer, identifier__); \ +} + +@interface ASSnapshotTestCase : FBSnapshotTestCase + +/** + * Hack for testing. ASDisplayNode lacks an explicit -render method, so we manually hit its layout & display codepaths. + */ ++ (void)hackilySynchronouslyRecursivelyRenderNode:(ASDisplayNode *)node; + +@end diff --git a/AsyncDisplayKitTests/ASSnapshotTestCase.mm b/AsyncDisplayKitTests/ASSnapshotTestCase.mm new file mode 100644 index 0000000000..cce364ab34 --- /dev/null +++ b/AsyncDisplayKitTests/ASSnapshotTestCase.mm @@ -0,0 +1,54 @@ +/* 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 "ASSnapshotTestCase.h" + +#import + +@implementation ASSnapshotTestCase + ++ (void)_layoutAndDisplayNode:(ASDisplayNode *)node +{ + if (![node __shouldLoadViewOrLayer]) { + return; + } + + CALayer *layer = node.layer; + + [layer setNeedsLayout]; + [layer layoutIfNeeded]; + + [layer setNeedsDisplay]; + [layer displayIfNeeded]; +} + ++ (void)_recursivelyLayoutAndDisplayNode:(ASDisplayNode *)node +{ + for (ASDisplayNode *subnode in node.subnodes) { + [self _recursivelyLayoutAndDisplayNode:subnode]; + } + + [self _layoutAndDisplayNode:node]; +} + ++ (void)_recursivelySetDisplaysAsynchronously:(BOOL)flag forNode:(ASDisplayNode *)node +{ + node.displaysAsynchronously = flag; + + for (ASDisplayNode *subnode in node.subnodes) { + subnode.displaysAsynchronously = flag; + } +} + ++ (void)hackilySynchronouslyRecursivelyRenderNode:(ASDisplayNode *)node +{ + [self _recursivelySetDisplaysAsynchronously:NO forNode:node]; + [self _recursivelyLayoutAndDisplayNode:node]; +} + +@end diff --git a/AsyncDisplayKitTests/ReferenceImages/ASImageNodeSnapshotTests/testRenderLogoSquare@2x.png b/AsyncDisplayKitTests/ReferenceImages/ASImageNodeSnapshotTests/testRenderLogoSquare@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..896dc7abf09a39cb792b6ed956e39c11b3019f20 GIT binary patch literal 14527 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 literal 0 HcmV?d00001 diff --git a/Podfile b/Podfile index cb95bcd97b..eb7cb4bb47 100644 --- a/Podfile +++ b/Podfile @@ -4,4 +4,5 @@ platform :ios, '7.0' target :'AsyncDisplayKitTests', :exclusive => true do pod 'OCMock', '~> 2.2' + pod 'FBSnapshotTestCase' end diff --git a/Podfile.lock b/Podfile.lock index acabe8b1c3..14f152df04 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,10 +1,13 @@ PODS: + - FBSnapshotTestCase (1.5) - OCMock (2.2.4) DEPENDENCIES: + - FBSnapshotTestCase - OCMock (~> 2.2) SPEC CHECKSUMS: + FBSnapshotTestCase: e2914fbaabccea1dcc773d6a16b1c24540642488 OCMock: 6db79185520e24f9f299548f2b8b07e41d881bd5 COCOAPODS: 0.35.0