/* * Copyright (c) 2013, 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 typedef NS_ENUM(NSInteger, FBSnapshotTestControllerErrorCode) { FBSnapshotTestControllerErrorCodeUnknown, FBSnapshotTestControllerErrorCodeNeedsRecord, FBSnapshotTestControllerErrorCodePNGCreationFailed, FBSnapshotTestControllerErrorCodeImagesDifferentSizes, FBSnapshotTestControllerErrorCodeImagesDifferent, }; /** Errors returned by the methods of FBSnapshotTestController use this domain. */ extern NSString *const FBSnapshotTestControllerErrorDomain; /** Errors returned by the methods of FBSnapshotTestController sometimes contain this key in the `userInfo` dictionary. */ extern NSString *const FBReferenceImageFilePathKey; /** Provides the heavy-lifting for FBSnapshotTestCase. It loads and saves images, along with performing the actual pixel- by-pixel comparison of images. Instances are initialized with the test class, and directories to read and write to. */ @interface FBSnapshotTestController : NSObject /** Record snapshots. **/ @property(readwrite, nonatomic, assign) BOOL recordMode; /** @param testClass The subclass of FBSnapshotTestCase that is using this controller. @param referenceImagesDirectory The directory where the reference images are stored. @returns An instance of FBSnapshotTestController. */ - (id)initWithTestClass:(Class)testClass; /** Designated initializer. @param testName The name of the tests. @param referenceImagesDirectory The directory where the reference images are stored. @returns An instance of FBSnapshotTestController. */ - (id)initWithTestName:(NSString *)testName; /** Performs the comparison of the layer. @param layer The Layer to snapshot. @param referenceImagesDirectory The directory in which reference images are stored. @param identifier An optional identifier, used is there are muliptle snapshot tests in a given -test method. @param error An error to log in an XCTAssert() macro if the method fails (missing reference image, images differ, etc). @returns YES if the comparison (or saving of the reference image) succeeded. */ - (BOOL)compareSnapshotOfLayer:(CALayer *)layer selector:(SEL)selector identifier:(NSString *)identifier error:(NSError **)errorPtr; /** Performs the comparison of the view. @param view The view to snapshot. @param referenceImagesDirectory The directory in which reference images are stored. @param identifier An optional identifier, used is there are muliptle snapshot tests in a given -test method. @param error An error to log in an XCTAssert() macro if the method fails (missing reference image, images differ, etc). @returns YES if the comparison (or saving of the reference image) succeeded. */ - (BOOL)compareSnapshotOfView:(UIView *)view selector:(SEL)selector identifier:(NSString *)identifier error:(NSError **)errorPtr; /** Performs the comparison of a view or layer. @param view The view or layer to snapshot. @param referenceImagesDirectory The directory in which reference images are stored. @param identifier An optional identifier, used is there are muliptle snapshot tests in a given -test method. @param error An error to log in an XCTAssert() macro if the method fails (missing reference image, images differ, etc). @returns YES if the comparison (or saving of the reference image) succeeded. */ - (BOOL)compareSnapshotOfViewOrLayer:(id)viewOrLayer selector:(SEL)selector identifier:(NSString *)identifier error:(NSError **)errorPtr; /** The directory in which referfence images are stored. */ @property (readwrite, nonatomic, copy) NSString *referenceImagesDirectory; /** Loads a reference image. @param selector The test method being run. @param identifier The optional identifier, used when multiple images are tested in a single -test method. @param error An error, if this methods returns nil, the error will be something useful. @returns An image. */ - (UIImage *)referenceImageForSelector:(SEL)selector identifier:(NSString *)identifier error:(NSError **)error; /** Saves a reference image. @param selector The test method being run. @param identifier The optional identifier, used when multiple images are tested in a single -test method. @param error An error, if this methods returns NO, the error will be something useful. @returns An image. */ - (BOOL)saveReferenceImage:(UIImage *)image selector:(SEL)selector identifier:(NSString *)identifier error:(NSError **)errorPtr; /** Performs a pixel-by-pixel comparison of the two images. @param referenceImage The reference (correct) image. @param image The image to test against the reference. @param error An error that indicates why the comparison failed if it does. @param YES if the comparison succeeded and the images are the same. */ - (BOOL)compareReferenceImage:(UIImage *)referenceImage toImage:(UIImage *)image error:(NSError **)errorPtr; /** Saves the reference image and the test image to `failedOutputDirectory`. @param referenceImage The reference (correct) image. @param testImage The image to test against the reference. @param selector The test method being run. @param identifier The optional identifier, used when multiple images are tested in a single -test method. @param error An error that indicates why the comparison failed if it does. @param YES if the save succeeded. */ - (BOOL)saveFailedReferenceImage:(UIImage *)referenceImage testImage:(UIImage *)testImage selector:(SEL)selector identifier:(NSString *)identifier error:(NSError **)errorPtr; @end