12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- #import "FBLPromise+Testing.h"
- BOOL FBLWaitForPromisesWithTimeout(NSTimeInterval timeout) {
- BOOL isTimedOut = NO;
- NSDate *timeoutDate = [NSDate dateWithTimeIntervalSinceNow:timeout];
- static NSTimeInterval const minimalTimeout = 0.01;
- static int64_t const minimalTimeToWait = (int64_t)(minimalTimeout * NSEC_PER_SEC);
- dispatch_time_t waitTime = dispatch_time(DISPATCH_TIME_NOW, minimalTimeToWait);
- dispatch_group_t dispatchGroup = FBLPromise.dispatchGroup;
- NSRunLoop *runLoop = NSRunLoop.currentRunLoop;
- while (dispatch_group_wait(dispatchGroup, waitTime)) {
- isTimedOut = timeoutDate.timeIntervalSinceNow < 0.0;
- if (isTimedOut) {
- break;
- }
- [runLoop runUntilDate:[NSDate dateWithTimeIntervalSinceNow:minimalTimeout]];
- }
- return !isTimedOut;
- }
- @implementation FBLPromise (TestingAdditions)
- @dynamic isPending;
- @dynamic isFulfilled;
- @dynamic isRejected;
- @dynamic value;
- @dynamic error;
- + (dispatch_group_t)dispatchGroup {
- static dispatch_group_t gDispatchGroup;
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- gDispatchGroup = dispatch_group_create();
- });
- return gDispatchGroup;
- }
- @end
|