- Fix + (NSTimeInterval) timeIntervalFromMinutes:(NSUInteger) minutes
This commit is contained in:
parent
8bac97fc39
commit
0e87fe14b4
@ -1,6 +1,6 @@
|
|||||||
PODS:
|
PODS:
|
||||||
- Expecta (1.0.5)
|
- Expecta (1.0.5)
|
||||||
- Expecta+Snapshots (3.0.0):
|
- Expecta+Snapshots (3.1.1):
|
||||||
- Expecta (~> 1.0)
|
- Expecta (~> 1.0)
|
||||||
- FBSnapshotTestCase/Core (~> 2.0)
|
- FBSnapshotTestCase/Core (~> 2.0)
|
||||||
- Specta (~> 1.0)
|
- Specta (~> 1.0)
|
||||||
@ -9,8 +9,8 @@ PODS:
|
|||||||
- FBSnapshotTestCase/Core (2.1.4)
|
- FBSnapshotTestCase/Core (2.1.4)
|
||||||
- FBSnapshotTestCase/SwiftSupport (2.1.4):
|
- FBSnapshotTestCase/SwiftSupport (2.1.4):
|
||||||
- FBSnapshotTestCase/Core
|
- FBSnapshotTestCase/Core
|
||||||
- NSDate_Utils (1.0.5)
|
- NSDate_Utils (1.0.6)
|
||||||
- Specta (1.0.5)
|
- Specta (1.0.6)
|
||||||
|
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
- Expecta
|
- Expecta
|
||||||
@ -25,11 +25,11 @@ EXTERNAL SOURCES:
|
|||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
Expecta: e1c022fcd33910b6be89c291d2775b3fe27a89fe
|
Expecta: e1c022fcd33910b6be89c291d2775b3fe27a89fe
|
||||||
Expecta+Snapshots: c343f410c7a6392f3e22e78f94c44b6c0749a516
|
Expecta+Snapshots: dcff217eef506dabd6dfdc7864ea2da321fafbb8
|
||||||
FBSnapshotTestCase: '094f9f314decbabe373b87cc339bea235a63e07a'
|
FBSnapshotTestCase: '094f9f314decbabe373b87cc339bea235a63e07a'
|
||||||
NSDate_Utils: b0ab72ccec6df25297766bd64b0cd0c124521a45
|
NSDate_Utils: c7802a1e0f5ef3acaf39bf55806a1caaa0343d2d
|
||||||
Specta: ac94d110b865115fe60ff2c6d7281053c6f8e8a2
|
Specta: f506f3a8361de16bc0dcf3b17b75e269072ba465
|
||||||
|
|
||||||
PODFILE CHECKSUM: 5d3cb6429ba8613bec51b3e797c0070e91be6b26
|
PODFILE CHECKSUM: 5d3cb6429ba8613bec51b3e797c0070e91be6b26
|
||||||
|
|
||||||
COCOAPODS: 1.2.0.beta.3
|
COCOAPODS: 1.2.0
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
#import <CoreGraphics/CoreGraphics.h>
|
||||||
#import <Expecta/Expecta.h>
|
#import <Expecta/Expecta.h>
|
||||||
#import "ExpectaObject+FBSnapshotTest.h"
|
#import "ExpectaObject+FBSnapshotTest.h"
|
||||||
|
|
||||||
@ -12,3 +13,6 @@ EXPMatcherInterface(recordSnapshot, (void));
|
|||||||
|
|
||||||
EXPMatcherInterface(haveValidSnapshotNamed, (NSString *snapshot));
|
EXPMatcherInterface(haveValidSnapshotNamed, (NSString *snapshot));
|
||||||
EXPMatcherInterface(recordSnapshotNamed, (NSString *snapshot));
|
EXPMatcherInterface(recordSnapshotNamed, (NSString *snapshot));
|
||||||
|
|
||||||
|
EXPMatcherInterface(haveValidSnapshotNamedWithTolerance, (NSString *snapshot, CGFloat tolerance));
|
||||||
|
EXPMatcherInterface(haveValidSnapshotWithTolerance, (CGFloat tolerance));
|
||||||
|
|||||||
@ -18,14 +18,15 @@
|
|||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (BOOL)compareSnapshotOfViewOrLayer:(id)viewOrLayer snapshot:(NSString *)snapshot testCase:(id)testCase record:(BOOL)record referenceDirectory:(NSString *)referenceDirectory error:(NSError **)error
|
+ (BOOL)compareSnapshotOfViewOrLayer:(id)viewOrLayer snapshot:(NSString *)snapshot testCase:(id)testCase record:(BOOL)record referenceDirectory:(NSString *)referenceDirectory tolerance:(CGFloat)tolerance error:(NSError **)error
|
||||||
|
|
||||||
{
|
{
|
||||||
FBSnapshotTestController *snapshotController = [[FBSnapshotTestController alloc] initWithTestClass:[testCase class]];
|
FBSnapshotTestController *snapshotController = [[FBSnapshotTestController alloc] initWithTestClass:[testCase class]];
|
||||||
snapshotController.recordMode = record;
|
snapshotController.recordMode = record;
|
||||||
snapshotController.referenceImagesDirectory = referenceDirectory;
|
snapshotController.referenceImagesDirectory = referenceDirectory;
|
||||||
snapshotController.usesDrawViewHierarchyInRect = [Expecta usesDrawViewHierarchyInRect];
|
snapshotController.usesDrawViewHierarchyInRect = [Expecta usesDrawViewHierarchyInRect];
|
||||||
|
snapshotController.deviceAgnostic = [Expecta isDeviceAgnostic];
|
||||||
|
|
||||||
if (! snapshotController.referenceImagesDirectory) {
|
if (! snapshotController.referenceImagesDirectory) {
|
||||||
[NSException raise:@"Missing value for referenceImagesDirectory" format:@"Call [[EXPExpectFBSnapshotTest instance] setReferenceImagesDirectory"];
|
[NSException raise:@"Missing value for referenceImagesDirectory" format:@"Call [[EXPExpectFBSnapshotTest instance] setReferenceImagesDirectory"];
|
||||||
}
|
}
|
||||||
@ -33,7 +34,7 @@
|
|||||||
return [snapshotController compareSnapshotOfViewOrLayer:viewOrLayer
|
return [snapshotController compareSnapshotOfViewOrLayer:viewOrLayer
|
||||||
selector:NSSelectorFromString(snapshot)
|
selector:NSSelectorFromString(snapshot)
|
||||||
identifier:nil
|
identifier:nil
|
||||||
tolerance:0
|
tolerance:tolerance
|
||||||
error:error];
|
error:error];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -79,18 +80,36 @@ void setGlobalReferenceImageDir(char *reference) {
|
|||||||
NSString *testFileName = [NSString stringWithCString:self.fileName encoding:NSUTF8StringEncoding];
|
NSString *testFileName = [NSString stringWithCString:self.fileName encoding:NSUTF8StringEncoding];
|
||||||
NSArray *pathComponents = [testFileName pathComponents];
|
NSArray *pathComponents = [testFileName pathComponents];
|
||||||
|
|
||||||
for (NSString *folder in pathComponents) {
|
NSString *firstFolderFound = nil;
|
||||||
|
|
||||||
|
for (NSString *folder in pathComponents.reverseObjectEnumerator) {
|
||||||
if ([folder.lowercaseString rangeOfString:@"tests"].location != NSNotFound) {
|
if ([folder.lowercaseString rangeOfString:@"tests"].location != NSNotFound) {
|
||||||
|
|
||||||
NSArray *folderPathComponents = [pathComponents subarrayWithRange:NSMakeRange(0, [pathComponents indexOfObject:folder] + 1)];
|
NSArray *folderPathComponents = [pathComponents subarrayWithRange:NSMakeRange(0, [pathComponents indexOfObject:folder] + 1)];
|
||||||
return [NSString stringWithFormat:@"%@/ReferenceImages", [folderPathComponents componentsJoinedByString:@"/"]];
|
NSString *referenceImagesPath = [NSString stringWithFormat:@"%@/ReferenceImages", [folderPathComponents componentsJoinedByString:@"/"]];
|
||||||
|
|
||||||
|
if (!firstFolderFound) {
|
||||||
|
firstFolderFound = referenceImagesPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL isDirectory = NO;
|
||||||
|
BOOL referenceDirExists = [[NSFileManager defaultManager] fileExistsAtPath:referenceImagesPath isDirectory:&isDirectory];
|
||||||
|
|
||||||
|
// if the folder exists, this is the reference dir for sure
|
||||||
|
if (referenceDirExists && isDirectory) {
|
||||||
|
return referenceImagesPath;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if a reference folder wasn't found, we should create one
|
||||||
|
if (firstFolderFound) {
|
||||||
|
return firstFolderFound;
|
||||||
|
}
|
||||||
|
|
||||||
[NSException raise:@"Could not infer reference image folder" format:@"You should provide a reference dir using setGlobalReferenceImageDir(FB_REFERENCE_IMAGE_DIR);"];
|
[NSException raise:@"Could not infer reference image folder" format:@"You should provide a reference dir using setGlobalReferenceImageDir(FB_REFERENCE_IMAGE_DIR);"];
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|
||||||
@ -114,11 +133,11 @@ NSString *sanitizedTestPath(){
|
|||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPMatcherImplementationBegin(haveValidSnapshot, (void)){
|
EXPMatcherImplementationBegin(haveValidSnapshotWithTolerance, (CGFloat tolerance)){
|
||||||
__block NSError *error = nil;
|
__block NSError *error = nil;
|
||||||
|
|
||||||
prerequisite(^BOOL{
|
prerequisite(^BOOL{
|
||||||
return actual;
|
return actual != nil;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@ -132,7 +151,7 @@ EXPMatcherImplementationBegin(haveValidSnapshot, (void)){
|
|||||||
actual = [actual view];
|
actual = [actual view];
|
||||||
}
|
}
|
||||||
|
|
||||||
return [EXPExpectFBSnapshotTest compareSnapshotOfViewOrLayer:actual snapshot:name testCase:[self testCase] record:NO referenceDirectory:referenceImageDir error:&error];
|
return [EXPExpectFBSnapshotTest compareSnapshotOfViewOrLayer:actual snapshot:name testCase:[self testCase] record:NO referenceDirectory:referenceImageDir tolerance:tolerance error:&error];
|
||||||
});
|
});
|
||||||
|
|
||||||
failureMessageForTo(^NSString *{
|
failureMessageForTo(^NSString *{
|
||||||
@ -149,18 +168,22 @@ EXPMatcherImplementationBegin(haveValidSnapshot, (void)){
|
|||||||
}
|
}
|
||||||
EXPMatcherImplementationEnd
|
EXPMatcherImplementationEnd
|
||||||
|
|
||||||
|
EXPMatcherImplementationBegin(haveValidSnapshot, (void)) {
|
||||||
|
return self.haveValidSnapshotWithTolerance(0);
|
||||||
|
}
|
||||||
|
EXPMatcherImplementationEnd
|
||||||
|
|
||||||
EXPMatcherImplementationBegin(recordSnapshot, (void)) {
|
EXPMatcherImplementationBegin(recordSnapshot, (void)) {
|
||||||
__block NSError *error = nil;
|
__block NSError *error = nil;
|
||||||
|
|
||||||
BOOL actualIsViewLayerOrViewController = ([actual isKindOfClass:UIView.class] || [actual isKindOfClass:CALayer.class] || [actual isKindOfClass:UIViewController.class]);
|
BOOL actualIsViewLayerOrViewController = ([actual isKindOfClass:UIView.class] || [actual isKindOfClass:CALayer.class] || [actual isKindOfClass:UIViewController.class]);
|
||||||
|
|
||||||
prerequisite(^BOOL{
|
prerequisite(^BOOL{
|
||||||
return actual && actualIsViewLayerOrViewController;
|
return actual != nil && actualIsViewLayerOrViewController;
|
||||||
});
|
});
|
||||||
|
|
||||||
match(^BOOL{
|
match(^BOOL{
|
||||||
NSString *referenceImageDir = [self _getDefaultReferenceDirectory];
|
NSString *referenceImageDir = [self _getDefaultReferenceDirectory];
|
||||||
|
|
||||||
// For view controllers do the viewWill/viewDid dance, then pass view through
|
// For view controllers do the viewWill/viewDid dance, then pass view through
|
||||||
if ([actual isKindOfClass:UIViewController.class]) {
|
if ([actual isKindOfClass:UIViewController.class]) {
|
||||||
|
|
||||||
@ -169,7 +192,7 @@ EXPMatcherImplementationBegin(recordSnapshot, (void)) {
|
|||||||
actual = [actual view];
|
actual = [actual view];
|
||||||
}
|
}
|
||||||
|
|
||||||
[EXPExpectFBSnapshotTest compareSnapshotOfViewOrLayer:actual snapshot:sanitizedTestPath() testCase:[self testCase] record:YES referenceDirectory:referenceImageDir error:&error];
|
[EXPExpectFBSnapshotTest compareSnapshotOfViewOrLayer:actual snapshot:sanitizedTestPath() testCase:[self testCase] record:YES referenceDirectory:referenceImageDir tolerance:0 error:&error];
|
||||||
return NO;
|
return NO;
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -198,12 +221,12 @@ EXPMatcherImplementationBegin(recordSnapshot, (void)) {
|
|||||||
}
|
}
|
||||||
EXPMatcherImplementationEnd
|
EXPMatcherImplementationEnd
|
||||||
|
|
||||||
EXPMatcherImplementationBegin(haveValidSnapshotNamed, (NSString *snapshot)){
|
EXPMatcherImplementationBegin(haveValidSnapshotNamedWithTolerance, (NSString *snapshot, CGFloat tolerance)) {
|
||||||
BOOL snapshotIsNil = (snapshot == nil);
|
BOOL snapshotIsNil = (snapshot == nil);
|
||||||
__block NSError *error = nil;
|
__block NSError *error = nil;
|
||||||
|
|
||||||
prerequisite(^BOOL{
|
prerequisite(^BOOL{
|
||||||
return actual && !(snapshotIsNil);
|
return actual != nil && !(snapshotIsNil);
|
||||||
});
|
});
|
||||||
|
|
||||||
match(^BOOL{
|
match(^BOOL{
|
||||||
@ -214,7 +237,7 @@ EXPMatcherImplementationBegin(haveValidSnapshotNamed, (NSString *snapshot)){
|
|||||||
|
|
||||||
actual = [actual view];
|
actual = [actual view];
|
||||||
}
|
}
|
||||||
return [EXPExpectFBSnapshotTest compareSnapshotOfViewOrLayer:actual snapshot:snapshot testCase:[self testCase] record:NO referenceDirectory:referenceImageDir error:&error];
|
return [EXPExpectFBSnapshotTest compareSnapshotOfViewOrLayer:actual snapshot:snapshot testCase:[self testCase] record:NO referenceDirectory:referenceImageDir tolerance:tolerance error:&error];
|
||||||
});
|
});
|
||||||
|
|
||||||
failureMessageForTo(^NSString *{
|
failureMessageForTo(^NSString *{
|
||||||
@ -232,6 +255,11 @@ EXPMatcherImplementationBegin(haveValidSnapshotNamed, (NSString *snapshot)){
|
|||||||
}
|
}
|
||||||
EXPMatcherImplementationEnd
|
EXPMatcherImplementationEnd
|
||||||
|
|
||||||
|
EXPMatcherImplementationBegin(haveValidSnapshotNamed, (NSString *snapshot)) {
|
||||||
|
return self.haveValidSnapshotNamedWithTolerance(snapshot, 0);
|
||||||
|
}
|
||||||
|
EXPMatcherImplementationEnd
|
||||||
|
|
||||||
EXPMatcherImplementationBegin(recordSnapshotNamed, (NSString *snapshot)) {
|
EXPMatcherImplementationBegin(recordSnapshotNamed, (NSString *snapshot)) {
|
||||||
BOOL snapshotExists = (snapshot != nil);
|
BOOL snapshotExists = (snapshot != nil);
|
||||||
BOOL actualIsViewLayerOrViewController = ([actual isKindOfClass:UIView.class] || [actual isKindOfClass:CALayer.class] || [actual isKindOfClass:UIViewController.class]);
|
BOOL actualIsViewLayerOrViewController = ([actual isKindOfClass:UIView.class] || [actual isKindOfClass:CALayer.class] || [actual isKindOfClass:UIViewController.class]);
|
||||||
@ -239,12 +267,11 @@ EXPMatcherImplementationBegin(recordSnapshotNamed, (NSString *snapshot)) {
|
|||||||
id actualRef = actual;
|
id actualRef = actual;
|
||||||
|
|
||||||
prerequisite(^BOOL{
|
prerequisite(^BOOL{
|
||||||
return actualRef && snapshotExists && actualIsViewLayerOrViewController;
|
return actualRef != nil && snapshotExists && actualIsViewLayerOrViewController;
|
||||||
});
|
});
|
||||||
|
|
||||||
match(^BOOL{
|
match(^BOOL{
|
||||||
NSString *referenceImageDir = [self _getDefaultReferenceDirectory];
|
NSString *referenceImageDir = [self _getDefaultReferenceDirectory];
|
||||||
|
|
||||||
// For view controllers do the viewWill/viewDid dance, then pass view through
|
// For view controllers do the viewWill/viewDid dance, then pass view through
|
||||||
if ([actual isKindOfClass:UIViewController.class]) {
|
if ([actual isKindOfClass:UIViewController.class]) {
|
||||||
[actual beginAppearanceTransition:YES animated:NO];
|
[actual beginAppearanceTransition:YES animated:NO];
|
||||||
@ -252,7 +279,7 @@ EXPMatcherImplementationBegin(recordSnapshotNamed, (NSString *snapshot)) {
|
|||||||
actual = [actual view];
|
actual = [actual view];
|
||||||
}
|
}
|
||||||
|
|
||||||
[EXPExpectFBSnapshotTest compareSnapshotOfViewOrLayer:actual snapshot:snapshot testCase:[self testCase] record:YES referenceDirectory:referenceImageDir error:&error];
|
[EXPExpectFBSnapshotTest compareSnapshotOfViewOrLayer:actual snapshot:snapshot testCase:[self testCase] record:YES referenceDirectory:referenceImageDir tolerance:0 error:&error];
|
||||||
return NO;
|
return NO;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -14,4 +14,8 @@
|
|||||||
|
|
||||||
+ (BOOL)usesDrawViewHierarchyInRect;
|
+ (BOOL)usesDrawViewHierarchyInRect;
|
||||||
|
|
||||||
|
+ (void)setDeviceAgnostic:(BOOL)deviceAgnostic;
|
||||||
|
|
||||||
|
+ (BOOL)isDeviceAgnostic;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@ -22,4 +22,15 @@ static NSString const *kUsesDrawViewHierarchyInRectKey = @"ExpectaObject+FBSnaps
|
|||||||
return usesDrawViewHierarchyInRect.boolValue;
|
return usesDrawViewHierarchyInRect.boolValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
+ (void)setDeviceAgnostic:(BOOL)deviceAgnostic
|
||||||
|
{
|
||||||
|
objc_setAssociatedObject(self, @selector(isDeviceAgnostic), @(deviceAgnostic), OBJC_ASSOCIATION_ASSIGN);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (BOOL)isDeviceAgnostic
|
||||||
|
{
|
||||||
|
NSNumber *isDeviceAgnostic = objc_getAssociatedObject(self, @selector(isDeviceAgnostic));
|
||||||
|
return isDeviceAgnostic.boolValue;
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
11
Example/Pods/Expecta+Snapshots/README.md
generated
11
Example/Pods/Expecta+Snapshots/README.md
generated
@ -3,7 +3,7 @@ Expecta Matchers for FBSnapshotTestCase
|
|||||||
|
|
||||||
[Expecta](https://github.com/specta/expecta) matchers for [ios-snapshot-test-case](https://github.com/facebook/ios-snapshot-test-case).
|
[Expecta](https://github.com/specta/expecta) matchers for [ios-snapshot-test-case](https://github.com/facebook/ios-snapshot-test-case).
|
||||||
|
|
||||||
[](https://travis-ci.org/dblock/ios-snapshot-test-case-expecta)
|
[](https://travis-ci.org/dblock/ios-snapshot-test-case-expecta)
|
||||||
|
|
||||||
### Usage
|
### Usage
|
||||||
|
|
||||||
@ -63,6 +63,15 @@ describe(@"test name derived matching", ^{
|
|||||||
SpecEnd
|
SpecEnd
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Approximation support
|
||||||
|
|
||||||
|
If for some reason you want to specify a tolerance for your test, you can use either named or unnamed matchers, where the `tolerance` parameter is a `CGFloat` in the interval `[0, 1]` and it represents the minimum ratio of unmatched points by the total number of points in your snapshot. In the example below, a tolerance of `0.01` means our `view` could be up to `1%` different from the reference image.
|
||||||
|
|
||||||
|
``` Objective-C
|
||||||
|
expect(view).to.haveValidSnapshotWithTolerance(0.01);
|
||||||
|
expect(view).to.haveValidSnapshotNamedWithTolerance(@"unique snapshot name", 0.01);
|
||||||
|
```
|
||||||
|
|
||||||
### Sane defaults
|
### Sane defaults
|
||||||
|
|
||||||
`EXPMatchers+FBSnapshotTest` will automatically figure out the tests folder, and [add a reference image](https://github.com/dblock/ios-snapshot-test-case-expecta/blob/master/EXPMatchers%2BFBSnapshotTest.m#L84-L85) directory, if you'd like to override this, you should include a `beforeAll` block setting the `setGlobalReferenceImageDir` in each file containing tests.
|
`EXPMatchers+FBSnapshotTest` will automatically figure out the tests folder, and [add a reference image](https://github.com/dblock/ios-snapshot-test-case-expecta/blob/master/EXPMatchers%2BFBSnapshotTest.m#L84-L85) directory, if you'd like to override this, you should include a `beforeAll` block setting the `setGlobalReferenceImageDir` in each file containing tests.
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "NSDate_Utils",
|
"name": "NSDate_Utils",
|
||||||
"version": "1.0.5",
|
"version": "1.0.6",
|
||||||
"summary": "NSDate_Utils is a NSDate category that helps date managements. For example NSString to NSDate, NSDate to NSString,NSSdate comparisons",
|
"summary": "NSDate_Utils is a NSDate category that helps date managements. For example NSString to NSDate, NSDate to NSString,NSSdate comparisons",
|
||||||
"homepage": "https://github.com/giuseppenucifora/NSDate_Utils",
|
"homepage": "https://github.com/giuseppenucifora/NSDate_Utils",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@ -9,7 +9,7 @@
|
|||||||
},
|
},
|
||||||
"source": {
|
"source": {
|
||||||
"git": "https://github.com/giuseppenucifora/NSDate_Utils.git",
|
"git": "https://github.com/giuseppenucifora/NSDate_Utils.git",
|
||||||
"tag": "1.0.5"
|
"tag": "1.0.6"
|
||||||
},
|
},
|
||||||
"platforms": {
|
"platforms": {
|
||||||
"ios": "7.0"
|
"ios": "7.0"
|
||||||
|
|||||||
14
Example/Pods/Manifest.lock
generated
14
Example/Pods/Manifest.lock
generated
@ -1,6 +1,6 @@
|
|||||||
PODS:
|
PODS:
|
||||||
- Expecta (1.0.5)
|
- Expecta (1.0.5)
|
||||||
- Expecta+Snapshots (3.0.0):
|
- Expecta+Snapshots (3.1.1):
|
||||||
- Expecta (~> 1.0)
|
- Expecta (~> 1.0)
|
||||||
- FBSnapshotTestCase/Core (~> 2.0)
|
- FBSnapshotTestCase/Core (~> 2.0)
|
||||||
- Specta (~> 1.0)
|
- Specta (~> 1.0)
|
||||||
@ -9,8 +9,8 @@ PODS:
|
|||||||
- FBSnapshotTestCase/Core (2.1.4)
|
- FBSnapshotTestCase/Core (2.1.4)
|
||||||
- FBSnapshotTestCase/SwiftSupport (2.1.4):
|
- FBSnapshotTestCase/SwiftSupport (2.1.4):
|
||||||
- FBSnapshotTestCase/Core
|
- FBSnapshotTestCase/Core
|
||||||
- NSDate_Utils (1.0.5)
|
- NSDate_Utils (1.0.6)
|
||||||
- Specta (1.0.5)
|
- Specta (1.0.6)
|
||||||
|
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
- Expecta
|
- Expecta
|
||||||
@ -25,11 +25,11 @@ EXTERNAL SOURCES:
|
|||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
Expecta: e1c022fcd33910b6be89c291d2775b3fe27a89fe
|
Expecta: e1c022fcd33910b6be89c291d2775b3fe27a89fe
|
||||||
Expecta+Snapshots: c343f410c7a6392f3e22e78f94c44b6c0749a516
|
Expecta+Snapshots: dcff217eef506dabd6dfdc7864ea2da321fafbb8
|
||||||
FBSnapshotTestCase: '094f9f314decbabe373b87cc339bea235a63e07a'
|
FBSnapshotTestCase: '094f9f314decbabe373b87cc339bea235a63e07a'
|
||||||
NSDate_Utils: b0ab72ccec6df25297766bd64b0cd0c124521a45
|
NSDate_Utils: c7802a1e0f5ef3acaf39bf55806a1caaa0343d2d
|
||||||
Specta: ac94d110b865115fe60ff2c6d7281053c6f8e8a2
|
Specta: f506f3a8361de16bc0dcf3b17b75e269072ba465
|
||||||
|
|
||||||
PODFILE CHECKSUM: 5d3cb6429ba8613bec51b3e797c0070e91be6b26
|
PODFILE CHECKSUM: 5d3cb6429ba8613bec51b3e797c0070e91be6b26
|
||||||
|
|
||||||
COCOAPODS: 1.2.0.beta.3
|
COCOAPODS: 1.2.0
|
||||||
|
|||||||
121
Example/Pods/Specta/README.md
generated
121
Example/Pods/Specta/README.md
generated
@ -1,11 +1,7 @@
|
|||||||
# Specta
|
# Specta [](https://travis-ci.org/specta/specta) [](https://coveralls.io/r/specta/specta)
|
||||||
|
|
||||||
A light-weight TDD / BDD framework for Objective-C.
|
A light-weight TDD / BDD framework for Objective-C.
|
||||||
|
|
||||||
### Status
|
|
||||||
[](https://travis-ci.org/specta/specta)
|
|
||||||
[](https://coveralls.io/r/specta/specta)
|
|
||||||
|
|
||||||
## FEATURES
|
## FEATURES
|
||||||
|
|
||||||
* An Objective-C RSpec-like BDD DSL
|
* An Objective-C RSpec-like BDD DSL
|
||||||
@ -15,56 +11,7 @@ A light-weight TDD / BDD framework for Objective-C.
|
|||||||
|
|
||||||
## SCREENSHOT
|
## SCREENSHOT
|
||||||
|
|
||||||

|
<img src="https://raw.githubusercontent.com/specta/specta/master/misc/specta_screenshot.jpg" width="100%">
|
||||||
|
|
||||||
## SETUP
|
|
||||||
|
|
||||||
Use [CocoaPods](http://github.com/CocoaPods/CocoaPods), [Carthage](https://github.com/carthage/carthage) or [Set up manually](#setting-up-manually)
|
|
||||||
|
|
||||||
### CocoaPods
|
|
||||||
|
|
||||||
1. Add Specta to your project's `Podfile`:
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
target :MyApp do
|
|
||||||
# your app dependencies
|
|
||||||
end
|
|
||||||
|
|
||||||
target :MyAppTests do
|
|
||||||
pod 'Specta', '~> 1.0'
|
|
||||||
# pod 'Expecta', '~> 1.0' # expecta matchers
|
|
||||||
# pod 'OCMock', '~> 2.2' # OCMock
|
|
||||||
# pod 'OCHamcrest', '~> 3.0' # hamcrest matchers
|
|
||||||
# pod 'OCMockito', '~> 1.0' # OCMock
|
|
||||||
# pod 'LRMocky', '~> 0.9' # LRMocky
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
2. Run `pod update` or `pod install` in your project directory.
|
|
||||||
|
|
||||||
### Carthage
|
|
||||||
|
|
||||||
1. Add Specta to your project's `Cartfile.private`
|
|
||||||
|
|
||||||
```
|
|
||||||
github "specta/specta" ~> 1.0
|
|
||||||
```
|
|
||||||
|
|
||||||
2. Run `carthage update` in your project directory
|
|
||||||
3. Drag the appropriate `Specta.framework` for your platform (located in Carthage/Build/) into your application’s Xcode project, and add it to your test target(s).
|
|
||||||
4. If you are building for iOS, a new `Run Script Phase` must be added to copy the framework. The instructions can be found on [Carthage's getting started instructions](https://github.com/carthage/carthage#getting-started)
|
|
||||||
|
|
||||||
### SETTING UP MANUALLY
|
|
||||||
|
|
||||||
1. Clone from Github.
|
|
||||||
2. Run `rake` in project root to build.
|
|
||||||
3. Add a "Cocoa/Cocoa Touch Unit Testing Bundle" target if you don't already have one.
|
|
||||||
4. Copy and add all header files in `Products` folder to the Test target in your Xcode project.
|
|
||||||
5. For **OS X projects**, copy and add `Specta.framework` in `Products/osx` folder to the test target in your Xcode project.
|
|
||||||
For **iOS projects**, copy and add `Specta.framework` in `Products/ios` folder to the test target in your Xcode project.
|
|
||||||
You can alternatively use `libSpecta.a`, if you prefer to add it as a static library for your project. (iOS 7 and below require this)
|
|
||||||
6. Add `-ObjC` and `-all_load` to the "Other Linker Flags" build setting for the test target in your Xcode project.
|
|
||||||
7. If you encounter linking issues with `_llvm_*` symbols, ensure your target's "Generate Test Coverage Files" and "Instrument Program Flow" build settings are set to `Yes`.
|
|
||||||
|
|
||||||
## EXAMPLE
|
## EXAMPLE
|
||||||
|
|
||||||
@ -156,12 +103,17 @@ SpecEnd
|
|||||||
* Do `#define SPT_CEDAR_SYNTAX` before importing Specta if you prefer to write `SPEC_BEGIN` and `SPEC_END` instead of `SpecBegin` and `SpecEnd`.
|
* Do `#define SPT_CEDAR_SYNTAX` before importing Specta if you prefer to write `SPEC_BEGIN` and `SPEC_END` instead of `SpecBegin` and `SpecEnd`.
|
||||||
* Prepend `f` to your `describe`, `context`, `example`, `it`, and `specify` to set focus on examples or groups. When specs are focused, all unfocused specs are skipped.
|
* Prepend `f` to your `describe`, `context`, `example`, `it`, and `specify` to set focus on examples or groups. When specs are focused, all unfocused specs are skipped.
|
||||||
* To use original XCTest reporter, set an environment variable named `SPECTA_REPORTER_CLASS` to `SPTXCTestReporter` in your test scheme.
|
* To use original XCTest reporter, set an environment variable named `SPECTA_REPORTER_CLASS` to `SPTXCTestReporter` in your test scheme.
|
||||||
* Set an environment variable `SPECTA_NO_SHUFFLE` with value `1` to disable test shuffling.
|
* Set an environment variable `SPECTA_SHUFFLE` with value `1` to enable test shuffling.
|
||||||
* Set an environment variable `SPECTA_SEED` to specify the random seed for test shuffling.
|
* Set an environment variable `SPECTA_SEED` to specify the random seed for test shuffling.
|
||||||
|
|
||||||
Standard XCTest matchers such as `XCTAssertEqualObjects` and `XCTAssertNil` work, but you probably want to add a nicer matcher framework - [Expecta](http://github.com/specta/expecta/) to your setup. Or if you really prefer, [OCHamcrest](https://github.com/jonreid/OCHamcrest) works fine too. Also, add a mocking framework: [OCMock](http://ocmock.org/).
|
Standard XCTest matchers such as `XCTAssertEqualObjects` and `XCTAssertNil` work, but you probably want to add a nicer matcher framework - [Expecta](https://github.com/specta/expecta/) to your setup. Or if you really prefer, [OCHamcrest](https://github.com/hamcrest/OCHamcrest) works fine too. Also, add a mocking framework: [OCMock](http://ocmock.org/).
|
||||||
|
|
||||||
## RUNNING TESTS IN COMMAND LINE
|
## STATUS
|
||||||
|
|
||||||
|
Specta is considered a done project, there are no plans for _active_ development on the project at the moment aside from ensuring future Xcode compatability.
|
||||||
|
Therefore it is a stable dependency, but will not be moving into the Swift world. If you are looking for that, we recommend you consider [Quick](https://github.com/quick/quick).
|
||||||
|
|
||||||
|
## RUNNING SPECTA'S TESTS IN COMMAND LINE
|
||||||
|
|
||||||
* Run `rake test` in the cloned folder.
|
* Run `rake test` in the cloned folder.
|
||||||
|
|
||||||
@ -171,6 +123,57 @@ Standard XCTest matchers such as `XCTAssertEqualObjects` and `XCTAssertNil` work
|
|||||||
* Please prefix instance variable names with a single underscore (`_`).
|
* Please prefix instance variable names with a single underscore (`_`).
|
||||||
* Please prefix custom classes and functions defined in the global scope with `SPT`.
|
* Please prefix custom classes and functions defined in the global scope with `SPT`.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
Use [CocoaPods](https://github.com/CocoaPods/CocoaPods), [Carthage](https://github.com/carthage/carthage) or [Set up manually](#setting-up-manually)
|
||||||
|
|
||||||
|
### CocoaPods
|
||||||
|
|
||||||
|
1. Add Specta to your project's `Podfile`:
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
target :MyApp do
|
||||||
|
# your app dependencies
|
||||||
|
|
||||||
|
target :MyAppTests do
|
||||||
|
inherit! :search_paths
|
||||||
|
|
||||||
|
pod 'Specta', '~> 1.0'
|
||||||
|
# pod 'Expecta', '~> 1.0' # expecta matchers
|
||||||
|
# pod 'OCMock', '~> 2.2' # OCMock
|
||||||
|
# pod 'OCHamcrest', '~> 3.0' # hamcrest matchers
|
||||||
|
# pod 'OCMockito', '~> 1.0' # OCMock
|
||||||
|
# pod 'LRMocky', '~> 0.9' # LRMocky
|
||||||
|
end
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Run `pod install` in your project directory.
|
||||||
|
|
||||||
|
### Carthage
|
||||||
|
|
||||||
|
1. Add Specta to your project's `Cartfile.private`
|
||||||
|
|
||||||
|
```
|
||||||
|
github "specta/specta" ~> 1.0
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Run `carthage update` in your project directory
|
||||||
|
3. Drag the appropriate `Specta.framework` for your platform (located in Carthage/Build/) into your application’s Xcode project, and add it to your test target(s).
|
||||||
|
4. If you are building for iOS, a new `Run Script Phase` must be added to copy the framework. The instructions can be found on [Carthage's getting started instructions](https://github.com/carthage/carthage#getting-started)
|
||||||
|
|
||||||
|
### SETTING UP MANUALLY
|
||||||
|
|
||||||
|
1. Clone from Github.
|
||||||
|
2. Run `rake` in project root to build.
|
||||||
|
3. Add a "Cocoa/Cocoa Touch Unit Testing Bundle" target if you don't already have one.
|
||||||
|
4. Copy and add all header files in `Products` folder to the Test target in your Xcode project.
|
||||||
|
5. For **OS X projects**, copy and add `Specta.framework` in `Products/osx` folder to the test target in your Xcode project.
|
||||||
|
For **iOS projects**, copy and add `Specta.framework` in `Products/ios` folder to the test target in your Xcode project.
|
||||||
|
You can alternatively use `libSpecta.a`, if you prefer to add it as a static library for your project. (iOS 7 and below require this)
|
||||||
|
6. Add `-ObjC` and `-all_load` to the "Other Linker Flags" build setting for the test target in your Xcode project.
|
||||||
|
7. If you encounter linking issues with `_llvm_*` symbols, ensure your target's "Generate Test Coverage Files" and "Instrument Program Flow" build settings are set to `Yes`.
|
||||||
|
|
||||||
## LICENSE
|
## LICENSE
|
||||||
|
|
||||||
Copyright (c) 2012-2015 [Specta Team](https://github.com/specta?tab=members). This software is licensed under the [MIT License](http://github.com/specta/specta/raw/master/LICENSE).
|
Copyright (c) 2012-2016 [Specta Team](https://github.com/orgs/specta/people). This software is licensed under the [MIT License](http://github.com/specta/specta/raw/master/LICENSE).
|
||||||
|
|||||||
3
Example/Pods/Specta/Specta/Specta/SPTSpec.m
generated
3
Example/Pods/Specta/Specta/Specta/SPTSpec.m
generated
@ -19,7 +19,7 @@
|
|||||||
[spec spec];
|
[spec spec];
|
||||||
}
|
}
|
||||||
@catch (NSException *exception) {
|
@catch (NSException *exception) {
|
||||||
fprintf(stderr, "%s: An exception has occured outside of tests, aborting.\n\n%s (%s) \n", [specName UTF8String], [[exception name] UTF8String], [[exception reason] UTF8String]);
|
fprintf(stderr, "%s: An exception has occurred outside of tests, aborting.\n\n%s (%s) \n", [specName UTF8String], [[exception name] UTF8String], [[exception reason] UTF8String]);
|
||||||
if ([exception respondsToSelector:@selector(callStackSymbols)]) {
|
if ([exception respondsToSelector:@selector(callStackSymbols)]) {
|
||||||
NSArray *callStackSymbols = [exception callStackSymbols];
|
NSArray *callStackSymbols = [exception callStackSymbols];
|
||||||
if (callStackSymbols) {
|
if (callStackSymbols) {
|
||||||
@ -145,6 +145,7 @@
|
|||||||
example.block(self);
|
example.block(self);
|
||||||
} else if (!example.pending) {
|
} else if (!example.pending) {
|
||||||
self.spt_skipped = YES;
|
self.spt_skipped = YES;
|
||||||
|
NSLog(@"Skipping '%@'", example.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
[[[NSThread currentThread] threadDictionary] removeObjectForKey:spt_kCurrentSpecKey];
|
[[[NSThread currentThread] threadDictionary] removeObjectForKey:spt_kCurrentSpecKey];
|
||||||
|
|||||||
2
Example/Pods/Specta/Specta/Specta/SpectaDSL.h
generated
2
Example/Pods/Specta/Specta/Specta/SpectaDSL.h
generated
@ -54,7 +54,7 @@ OBJC_EXTERN void waitUntil(void (^block)(DoneCallback done));
|
|||||||
*
|
*
|
||||||
* @param timeout timeout for this @c block only; does not affect the global
|
* @param timeout timeout for this @c block only; does not affect the global
|
||||||
* timeout, as @c setAsyncSpecTimeout() does.
|
* timeout, as @c setAsyncSpecTimeout() does.
|
||||||
* @param ^block runs test code
|
* @param block runs test code
|
||||||
*/
|
*/
|
||||||
OBJC_EXTERN void waitUntilTimeout(NSTimeInterval timeout, void (^block)(DoneCallback done));
|
OBJC_EXTERN void waitUntilTimeout(NSTimeInterval timeout, void (^block)(DoneCallback done));
|
||||||
|
|
||||||
|
|||||||
@ -42,7 +42,10 @@
|
|||||||
[self spt_dequeueFailures];
|
[self spt_dequeueFailures];
|
||||||
};
|
};
|
||||||
|
|
||||||
if ([NSThread isMainThread]) {
|
BOOL isMainThread = [NSThread isMainThread];
|
||||||
|
BOOL isSpectaTest = [self isKindOfClass:[SPTSpec class]];
|
||||||
|
|
||||||
|
if (!isSpectaTest || isMainThread) {
|
||||||
dequeueFailures();
|
dequeueFailures();
|
||||||
} else {
|
} else {
|
||||||
dispatch_sync(dispatch_get_main_queue(), dequeueFailures);
|
dispatch_sync(dispatch_get_main_queue(), dequeueFailures);
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Expecta+Snapshots
|
CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Expecta+Snapshots
|
||||||
|
ENABLE_BITCODE = NO
|
||||||
FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" "$PODS_CONFIGURATION_BUILD_DIR/Expecta" "$PODS_CONFIGURATION_BUILD_DIR/FBSnapshotTestCase" "$PODS_CONFIGURATION_BUILD_DIR/Specta"
|
FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" "$PODS_CONFIGURATION_BUILD_DIR/Expecta" "$PODS_CONFIGURATION_BUILD_DIR/FBSnapshotTestCase" "$PODS_CONFIGURATION_BUILD_DIR/Specta"
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||||
HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public"
|
HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public"
|
||||||
|
|||||||
@ -15,7 +15,7 @@
|
|||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>FMWK</string>
|
<string>FMWK</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>3.0.0</string>
|
<string>3.1.1</string>
|
||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>????</string>
|
<string>????</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
|
|||||||
@ -15,7 +15,7 @@
|
|||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>FMWK</string>
|
<string>FMWK</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>1.0.5</string>
|
<string>1.0.6</string>
|
||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>????</string>
|
<string>????</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
|
|||||||
@ -15,7 +15,7 @@
|
|||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>FMWK</string>
|
<string>FMWK</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>1.0.5</string>
|
<string>1.0.6</string>
|
||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>????</string>
|
<string>????</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
Pod::Spec.new do |s|
|
Pod::Spec.new do |s|
|
||||||
s.name = "NSDate_Utils"
|
s.name = "NSDate_Utils"
|
||||||
s.version = "1.0.5"
|
s.version = "1.0.6"
|
||||||
s.summary = "NSDate_Utils is a NSDate category that helps date managements. For example NSString to NSDate, NSDate to NSString,NSSdate comparisons"
|
s.summary = "NSDate_Utils is a NSDate category that helps date managements. For example NSString to NSDate, NSDate to NSString,NSSdate comparisons"
|
||||||
|
|
||||||
# This description is used to generate tags and improve search results.
|
# This description is used to generate tags and improve search results.
|
||||||
|
|||||||
@ -528,7 +528,9 @@ static NSDateFormatter *_displayFormatter = nil;
|
|||||||
|
|
||||||
|
|
||||||
+ (NSTimeInterval) timeIntervalFromHours:(NSUInteger) hours {
|
+ (NSTimeInterval) timeIntervalFromHours:(NSUInteger) hours {
|
||||||
|
NSTimeInterval seconds = hours / 60 / 60;
|
||||||
|
|
||||||
|
return seconds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user