AliyunOSSiOSTests/OSSExecutorTests.m (57 lines of code) (raw):
//
// OSSExecutorTests.m
// AliyunOSSiOSTests
//
// Created by 怀叙 on 2017/11/15.
// Copyright © 2017年 zhouzhuo. All rights reserved.
//
#import <XCTest/XCTest.h>
#import <AliyunOSSiOS/AliyunOSSiOS.h>
@interface OSSExecutorTests : XCTestCase
@end
@implementation OSSExecutorTests
- (void)testExecuteImmediately {
__block OSSTask *task = [OSSTask taskWithResult:nil];
XCTestExpectation *expectation = [self expectationWithDescription:@"test immediate executor"];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
task = [task continueWithExecutor:[OSSExecutor immediateExecutor] withBlock:^id(OSSTask *_) {
return nil;
}];
XCTAssertTrue(task.completed);
[expectation fulfill];
});
[self waitForExpectationsWithTimeout:10.0 handler:nil];
}
- (void)testExecuteOnDispatchQueue {
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0L);
OSSExecutor *queueExecutor = [OSSExecutor executorWithDispatchQueue:queue];
OSSTask *task = [OSSTask taskWithResult:nil];
task = [task continueWithExecutor:queueExecutor withBlock:^id(OSSTask *_) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
XCTAssertEqual(queue, dispatch_get_current_queue());
#pragma clang diagnostic pop
return nil;
}];
[task waitUntilFinished];
}
- (void)testExecuteOnOperationQueue {
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
OSSExecutor *queueExecutor = [OSSExecutor executorWithOperationQueue:queue];
OSSTask *task = [OSSTask taskWithResult:nil];
task = [task continueWithExecutor:queueExecutor withBlock:^id(OSSTask *_) {
XCTAssertEqual(queue, [NSOperationQueue currentQueue]);
return nil;
}];
[task waitUntilFinished];
}
- (void)testMainThreadExecutor {
OSSExecutor *executor = [OSSExecutor mainThreadExecutor];
XCTestExpectation *immediateExpectation = [self expectationWithDescription:@"test main thread executor on main thread"];
[executor execute:^{
XCTAssertTrue([NSThread isMainThread]);
[immediateExpectation fulfill];
}];
// Behaviour is different when running on main thread (runs immediately) vs running on the background queue.
XCTestExpectation *backgroundExpectation = [self expectationWithDescription:@"test main thread executor on background thread"];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[executor execute:^{
XCTAssertTrue([NSThread isMainThread]);
[backgroundExpectation fulfill];
}];
});
[self waitForExpectationsWithTimeout:10.0 handler:nil];
}
@end