- (void)testMyAwesomeAPI { [api authorizeWithLogin:kLogin password:kPassword completion:^(NSString *nickname) { STAssertTrue([nickname isEqualToString:@"John"], @""); //code } error:^(NSError *error) { STAssertTrue(false, @""); //code }]; }
#import <Foundation/Foundation.h> @interface TestSemaphor : NSObject @property (strong, atomic) NSMutableDictionary* flags; + (TestSemaphor *)sharedInstance; - (BOOL)isLifted:(NSString*)key; - (void)lift:(NSString*)key; - (BOOL)waitForKey:(NSString*)key; - (BOOL)waitForKey:(NSString *)key timeout:(NSTimeInterval)timeout; @end
#import "TestSemaphor.h" @implementation TestSemaphor @synthesize flags; +(TestSemaphor *)sharedInstance { static TestSemaphor *sharedInstance = nil; static dispatch_once_t once; dispatch_once(&once, ^{ sharedInstance = [TestSemaphor alloc]; sharedInstance = [sharedInstance init]; }); return sharedInstance; } - (id)init { self = [super init]; if (self != nil) { self.flags = [NSMutableDictionary dictionary]; } return self; } - (BOOL)isLifted:(NSString*)key { return [self.flags objectForKey:key] != nil; } - (void)lift:(NSString*)key { [self.flags setObject:@"YES" forKey:key]; } - (BOOL)waitForKey:(NSString *)key timeout:(NSTimeInterval)timeout { BOOL keepRunning; NSDate *timeoutDate = [NSDate dateWithTimeIntervalSinceNow:timeout]; do { [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:timeoutDate]; keepRunning = ![[TestSemaphor sharedInstance] isLifted:key]; if([timeoutDate timeIntervalSinceNow] < 0.0) { [self lift:key]; return NO; } } while (keepRunning); return YES; } - (BOOL)waitForKey:(NSString*)key { return [self waitForKey:key timeout:10.0]; } @end
NSString *key = [NSString UUID]; [api authorizeWithLogin:kLogin password:kPassword completion:^(NSString *nickname) { STAssertTrue([nickname isEqualToString:@"John"], @""); [[TestSemaphor sharedInstance] lift:key]; //code } error:^(NSError *error) { STAssertTrue(false, @""); //code }]; STAssertTrue([[TestSemaphor sharedInstance] waitForKey:key], @"Failed due timeout");
- (void)testMyAwesomeAPI { [OHHTTPStubs addRequestHandler:^OHHTTPStubsResponse*(NSURLRequest *request, BOOL onlyCheck) { return [OHHTTPStubsResponse responseWithFile:@"login.json" contentType:@"text/json" responseTime:0.0]; }]; NSString *key = [NSString UUID]; [api authorizeWithLogin:kLogin password:kPassword completion:^(NSString *nickname) { STAssertTrue([nickname isEqualToString:@"John"], @""); [[TestSemaphor sharedInstance] lift:key]; //code } error:^(NSError *error) { STAssertTrue(false, @""); //code }]; STAssertTrue([[TestSemaphor sharedInstance] waitForKey:key], @"Failed due timeout"); }
Source: https://habr.com/ru/post/164073/
All Articles