123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- /*
- * 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 <Foundation/Foundation.h>
- #import <UIKit/UIKit.h>
- 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;
- /**
- Errors returned by the methods of FBSnapshotTestController sometimes contain this key in the `userInfo` dictionary.
- */
- extern NSString *const FBReferenceImageKey;
- /**
- Errors returned by the methods of FBSnapshotTestController sometimes contain this key in the `userInfo` dictionary.
- */
- extern NSString *const FBCapturedImageKey;
- /**
- Errors returned by the methods of FBSnapshotTestController sometimes contain this key in the `userInfo` dictionary.
- */
- extern NSString *const FBDiffedImageKey;
- /**
- 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;
- /**
- When @c YES appends the name of the device model and OS to the snapshot file name.
- The default value is @c NO.
- */
- @property (readwrite, nonatomic, assign, getter=isDeviceAgnostic) BOOL deviceAgnostic;
- /**
- Uses drawViewHierarchyInRect:afterScreenUpdates: to draw the image instead of renderInContext:
- */
- @property (readwrite, nonatomic, assign) BOOL usesDrawViewHierarchyInRect;
- /**
- The directory in which referfence images are stored.
- */
- @property (readwrite, nonatomic, copy) NSString *referenceImagesDirectory;
- /**
- @param testClass The subclass of FBSnapshotTestCase that is using this controller.
- @returns An instance of FBSnapshotTestController.
- */
- - (instancetype)initWithTestClass:(Class)testClass;
- /**
- Designated initializer.
- @param testName The name of the tests.
- @returns An instance of FBSnapshotTestController.
- */
- - (instancetype)initWithTestName:(NSString *)testName;
- /**
- Performs the comparison of the layer.
- @param layer The Layer to snapshot.
- @param selector The test method being run.
- @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 selector The test method being run.
- @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 selector The test method being run.
- @param identifier An optional identifier, used is there are muliptle snapshot tests in a given -test method.
- @param tolerance The percentage of pixels that can differ and still be considered 'identical'
- @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
- tolerance:(CGFloat)tolerance
- error:(NSError **)errorPtr;
- /**
- 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 errorPtr 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 **)errorPtr;
- /**
- Performs a pixel-by-pixel comparison of the two images with an allowable margin of error.
- @param referenceImage The reference (correct) image.
- @param image The image to test against the reference.
- @param tolerance The percentage of pixels that can differ and still be considered 'identical'
- @param errorPtr An error that indicates why the comparison failed if it does.
- @returns YES if the comparison succeeded and the images are the same(ish).
- */
- - (BOOL)compareReferenceImage:(UIImage *)referenceImage
- toImage:(UIImage *)image
- tolerance:(CGFloat)tolerance
- 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 errorPtr An error that indicates why the comparison failed if it does.
- @returns YES if the save succeeded.
- */
- - (BOOL)saveFailedReferenceImage:(UIImage *)referenceImage
- testImage:(UIImage *)testImage
- selector:(SEL)selector
- identifier:(NSString *)identifier
- error:(NSError **)errorPtr;
- @end
|