diff --git a/AsyncDisplayKit.xcodeproj/project.pbxproj b/AsyncDisplayKit.xcodeproj/project.pbxproj index f096375ce4..ff78556ce4 100644 --- a/AsyncDisplayKit.xcodeproj/project.pbxproj +++ b/AsyncDisplayKit.xcodeproj/project.pbxproj @@ -233,6 +233,7 @@ 9CDC18CC1B910E12004965E2 /* ASLayoutablePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CDC18CB1B910E12004965E2 /* ASLayoutablePrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9CDC18CD1B910E12004965E2 /* ASLayoutablePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CDC18CB1B910E12004965E2 /* ASLayoutablePrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9F06E5CD1B4CAF4200F015D8 /* ASCollectionViewTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F06E5CC1B4CAF4200F015D8 /* ASCollectionViewTests.m */; }; + AC026B581BD3F61800BBC17E /* ASStaticLayoutSpecSnapshotTests.m in Sources */ = {isa = PBXBuildFile; fileRef = AC026B571BD3F61800BBC17E /* ASStaticLayoutSpecSnapshotTests.m */; }; AC21EC101B3D0BF600C8B19A /* ASStackLayoutDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = AC21EC0F1B3D0BF600C8B19A /* ASStackLayoutDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; AC3C4A511A1139C100143C57 /* ASCollectionView.h in Headers */ = {isa = PBXBuildFile; fileRef = AC3C4A4F1A1139C100143C57 /* ASCollectionView.h */; settings = {ATTRIBUTES = (Public, ); }; }; AC3C4A521A1139C100143C57 /* ASCollectionView.mm in Sources */ = {isa = PBXBuildFile; fileRef = AC3C4A501A1139C100143C57 /* ASCollectionView.mm */; }; @@ -590,6 +591,7 @@ 9C8221941BA237B80037F19A /* ASStackBaselinePositionedLayout.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ASStackBaselinePositionedLayout.mm; sourceTree = ""; }; 9CDC18CB1B910E12004965E2 /* ASLayoutablePrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ASLayoutablePrivate.h; path = AsyncDisplayKit/Layout/ASLayoutablePrivate.h; sourceTree = ""; }; 9F06E5CC1B4CAF4200F015D8 /* ASCollectionViewTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASCollectionViewTests.m; sourceTree = ""; }; + AC026B571BD3F61800BBC17E /* ASStaticLayoutSpecSnapshotTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASStaticLayoutSpecSnapshotTests.m; sourceTree = ""; }; AC21EC0F1B3D0BF600C8B19A /* ASStackLayoutDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ASStackLayoutDefines.h; path = AsyncDisplayKit/Layout/ASStackLayoutDefines.h; sourceTree = ""; }; AC3C4A4F1A1139C100143C57 /* ASCollectionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASCollectionView.h; sourceTree = ""; }; AC3C4A501A1139C100143C57 /* ASCollectionView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ASCollectionView.mm; sourceTree = ""; }; @@ -819,6 +821,7 @@ ACF6ED591B178DC700DA7C62 /* ASOverlayLayoutSpecSnapshotTests.mm */, ACF6ED5A1B178DC700DA7C62 /* ASRatioLayoutSpecSnapshotTests.mm */, ACF6ED5B1B178DC700DA7C62 /* ASStackLayoutSpecSnapshotTests.mm */, + AC026B571BD3F61800BBC17E /* ASStaticLayoutSpecSnapshotTests.m */, ACF6ED571B178DC700DA7C62 /* ASLayoutSpecSnapshotTestsHelper.h */, ACF6ED581B178DC700DA7C62 /* ASLayoutSpecSnapshotTestsHelper.m */, 242995D21B29743C00090100 /* ASBasicImageDownloaderTests.m */, @@ -1552,6 +1555,7 @@ 058D0A3A195D057000B7D73C /* ASDisplayNodeTests.m in Sources */, 058D0A3B195D057000B7D73C /* ASDisplayNodeTestsHelper.m in Sources */, 056D21551ABCEF50001107EF /* ASImageNodeSnapshotTests.m in Sources */, + AC026B581BD3F61800BBC17E /* ASStaticLayoutSpecSnapshotTests.m in Sources */, ACF6ED5E1B178DC700DA7C62 /* ASInsetLayoutSpecSnapshotTests.mm in Sources */, ACF6ED601B178DC700DA7C62 /* ASLayoutSpecSnapshotTestsHelper.m in Sources */, CC7FD9E11BB5F750005CCB2B /* ASPhotosFrameworkImageRequestTests.m in Sources */, diff --git a/AsyncDisplayKitTests/ASStaticLayoutSpecSnapshotTests.m b/AsyncDisplayKitTests/ASStaticLayoutSpecSnapshotTests.m new file mode 100644 index 0000000000..36efb324a3 --- /dev/null +++ b/AsyncDisplayKitTests/ASStaticLayoutSpecSnapshotTests.m @@ -0,0 +1,85 @@ +// +// ASStaticLayoutSpecSnapshotTests.m +// AsyncDisplayKit +// +// Created by Huy Nguyen on 18/10/15. +// Copyright (c) 2015 Facebook. All rights reserved. +// + +#import "ASLayoutSpecSnapshotTestsHelper.h" + +#import "ASStaticLayoutSpec.h" +#import "ASBackgroundLayoutSpec.h" + +@interface ASStaticLayoutSpecSnapshotTests : ASLayoutSpecSnapshotTestCase +@end + +@implementation ASStaticLayoutSpecSnapshotTests + +- (void)setUp +{ + [super setUp]; + self.recordMode = NO; +} + +- (void)testSizingBehaviour +{ + [self testWithSizeRange:ASSizeRangeMake(CGSizeMake(150, 200), CGSizeMake(FLT_MAX, FLT_MAX)) + identifier:@"underflowChildren"]; + [self testWithSizeRange:ASSizeRangeMake(CGSizeZero, CGSizeMake(50, 100)) + identifier:@"overflowChildren"]; + // Expect the spec to wrap its content because children sizes are between constrained size + [self testWithSizeRange:ASSizeRangeMake(CGSizeZero, CGSizeMake(FLT_MAX / 2, FLT_MAX / 2)) + identifier:@"wrappedChildren"]; +} + +- (void)testChildrenMeasuredWithAutoMaxSize +{ + ASStaticSizeDisplayNode *firstChild = ASDisplayNodeWithBackgroundColor([UIColor redColor]); + firstChild.layoutPosition = CGPointMake(0, 0); + firstChild.staticSize = CGSizeMake(50, 50); + + ASStaticSizeDisplayNode *secondChild = ASDisplayNodeWithBackgroundColor([UIColor blueColor]); + secondChild.layoutPosition = CGPointMake(10, 60); + secondChild.staticSize = CGSizeMake(100, 100); + + ASSizeRange sizeRange = ASSizeRangeMake(CGSizeMake(10, 10), CGSizeMake(110, 160)); + [self testWithChildren:@[firstChild, secondChild] sizeRange:sizeRange identifier:nil]; + + XCTAssertTrue(ASSizeRangeEqualToSizeRange(firstChild.constrainedSizeForCalculatedLayout, + ASSizeRangeMake(CGSizeZero, sizeRange.max))); + CGSize secondChildMaxSize = CGSizeMake(sizeRange.max.width - secondChild.layoutPosition.x, + sizeRange.max.height - secondChild.layoutPosition.y); + XCTAssertTrue(ASSizeRangeEqualToSizeRange(secondChild.constrainedSizeForCalculatedLayout, + ASSizeRangeMake(CGSizeZero, secondChildMaxSize))); +} + +- (void)testWithSizeRange:(ASSizeRange)sizeRange identifier:(NSString *)identifier +{ + ASDisplayNode *firstChild = ASDisplayNodeWithBackgroundColor([UIColor redColor]); + firstChild.layoutPosition = CGPointMake(0, 0); + firstChild.sizeRange = ASRelativeSizeRangeMakeWithExactCGSize(CGSizeMake(50, 50)); + + + ASDisplayNode *secondChild = ASDisplayNodeWithBackgroundColor([UIColor blueColor]); + secondChild.layoutPosition = CGPointMake(0, 50); + secondChild.sizeRange = ASRelativeSizeRangeMakeWithExactCGSize(CGSizeMake(100, 100)); + + [self testWithChildren:@[firstChild, secondChild] sizeRange:sizeRange identifier:identifier]; +} + +- (void)testWithChildren:(NSArray *)children sizeRange:(ASSizeRange)sizeRange identifier:(NSString *)identifier +{ + ASDisplayNode *backgroundNode = ASDisplayNodeWithBackgroundColor([UIColor whiteColor]); + + NSMutableArray *subnodes = [NSMutableArray arrayWithArray:children]; + [subnodes insertObject:backgroundNode atIndex:0]; + + ASStaticLayoutSpec *staticLayoutSpec = [ASStaticLayoutSpec staticLayoutSpecWithChildren:children]; + ASLayoutSpec *layoutSpec = [ASBackgroundLayoutSpec backgroundLayoutSpecWithChild:staticLayoutSpec + background:backgroundNode]; + + [self testLayoutSpec:layoutSpec sizeRange:sizeRange subnodes:subnodes identifier:identifier]; +} + +@end diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStaticLayoutSpecSnapshotTests/testChildrenMeasuredWithAutoMaxSize@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStaticLayoutSpecSnapshotTests/testChildrenMeasuredWithAutoMaxSize@2x.png new file mode 100644 index 0000000000..2b60cf2bcf Binary files /dev/null and b/AsyncDisplayKitTests/ReferenceImages_64/ASStaticLayoutSpecSnapshotTests/testChildrenMeasuredWithAutoMaxSize@2x.png differ diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStaticLayoutSpecSnapshotTests/testSizingBehaviour_overflowChildren@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStaticLayoutSpecSnapshotTests/testSizingBehaviour_overflowChildren@2x.png new file mode 100644 index 0000000000..1687dc24f6 Binary files /dev/null and b/AsyncDisplayKitTests/ReferenceImages_64/ASStaticLayoutSpecSnapshotTests/testSizingBehaviour_overflowChildren@2x.png differ diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStaticLayoutSpecSnapshotTests/testSizingBehaviour_underflowChildren@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStaticLayoutSpecSnapshotTests/testSizingBehaviour_underflowChildren@2x.png new file mode 100644 index 0000000000..2233813979 Binary files /dev/null and b/AsyncDisplayKitTests/ReferenceImages_64/ASStaticLayoutSpecSnapshotTests/testSizingBehaviour_underflowChildren@2x.png differ diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStaticLayoutSpecSnapshotTests/testSizingBehaviour_wrappedChildren@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStaticLayoutSpecSnapshotTests/testSizingBehaviour_wrappedChildren@2x.png new file mode 100644 index 0000000000..3d76853c01 Binary files /dev/null and b/AsyncDisplayKitTests/ReferenceImages_64/ASStaticLayoutSpecSnapshotTests/testSizingBehaviour_wrappedChildren@2x.png differ