/* * Copyright (c) 2015, 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 #import @implementation FBSnapshotTestCase { FBSnapshotTestController *_snapshotController; } #pragma mark - Overrides - (void)setUp { [super setUp]; _snapshotController = [[FBSnapshotTestController alloc] initWithTestName:NSStringFromClass([self class])]; } - (void)tearDown { _snapshotController = nil; [super tearDown]; } - (BOOL)recordMode { return _snapshotController.recordMode; } - (void)setRecordMode:(BOOL)recordMode { NSAssert1(_snapshotController, @"%s cannot be called before [super setUp]", __FUNCTION__); _snapshotController.recordMode = recordMode; } - (BOOL)isDeviceAgnostic { return _snapshotController.deviceAgnostic; } - (void)setDeviceAgnostic:(BOOL)deviceAgnostic { NSAssert1(_snapshotController, @"%s cannot be called before [super setUp]", __FUNCTION__); _snapshotController.deviceAgnostic = deviceAgnostic; } - (BOOL)usesDrawViewHierarchyInRect { return _snapshotController.usesDrawViewHierarchyInRect; } - (void)setUsesDrawViewHierarchyInRect:(BOOL)usesDrawViewHierarchyInRect { NSAssert1(_snapshotController, @"%s cannot be called before [super setUp]", __FUNCTION__); _snapshotController.usesDrawViewHierarchyInRect = usesDrawViewHierarchyInRect; } #pragma mark - Public API - (BOOL)compareSnapshotOfLayer:(CALayer *)layer referenceImagesDirectory:(NSString *)referenceImagesDirectory identifier:(NSString *)identifier tolerance:(CGFloat)tolerance error:(NSError **)errorPtr { return [self _compareSnapshotOfViewOrLayer:layer referenceImagesDirectory:referenceImagesDirectory identifier:identifier tolerance:tolerance error:errorPtr]; } - (BOOL)compareSnapshotOfView:(UIView *)view referenceImagesDirectory:(NSString *)referenceImagesDirectory identifier:(NSString *)identifier tolerance:(CGFloat)tolerance error:(NSError **)errorPtr { return [self _compareSnapshotOfViewOrLayer:view referenceImagesDirectory:referenceImagesDirectory identifier:identifier tolerance:tolerance error:errorPtr]; } - (BOOL)referenceImageRecordedInDirectory:(NSString *)referenceImagesDirectory identifier:(NSString *)identifier error:(NSError **)errorPtr { NSAssert1(_snapshotController, @"%s cannot be called before [super setUp]", __FUNCTION__); _snapshotController.referenceImagesDirectory = referenceImagesDirectory; UIImage *referenceImage = [_snapshotController referenceImageForSelector:self.invocation.selector identifier:identifier error:errorPtr]; return (referenceImage != nil); } - (NSString *)getReferenceImageDirectoryWithDefault:(NSString *)dir { NSString *envReferenceImageDirectory = [NSProcessInfo processInfo].environment[@"FB_REFERENCE_IMAGE_DIR"]; if (envReferenceImageDirectory) { return envReferenceImageDirectory; } if (dir && dir.length > 0) { return dir; } return [[NSBundle bundleForClass:self.class].resourcePath stringByAppendingPathComponent:@"ReferenceImages"]; } #pragma mark - Private API - (BOOL)_compareSnapshotOfViewOrLayer:(id)viewOrLayer referenceImagesDirectory:(NSString *)referenceImagesDirectory identifier:(NSString *)identifier tolerance:(CGFloat)tolerance error:(NSError **)errorPtr { _snapshotController.referenceImagesDirectory = referenceImagesDirectory; return [_snapshotController compareSnapshotOfViewOrLayer:viewOrLayer selector:self.invocation.selector identifier:identifier tolerance:tolerance error:errorPtr]; } @end