2013-07-10 14:04:29 +00:00
|
|
|
#import <Foundation/NSInvocationOperation.h>
|
|
|
|
#import <Foundation/NSInvocation.h>
|
|
|
|
#import <Foundation/NSOperation.h>
|
|
|
|
#import <Foundation/NSValue.h>
|
|
|
|
#import <Foundation/NSAutoreleasePool.h>
|
|
|
|
#import "ObjectTesting.h"
|
|
|
|
|
|
|
|
|
|
|
|
int main()
|
|
|
|
{
|
2016-05-10 10:05:21 +00:00
|
|
|
START_SET("NSInvocationOperation - basic")
|
2013-07-10 14:04:29 +00:00
|
|
|
NSInvocationOperation *op;
|
2016-05-10 10:05:21 +00:00
|
|
|
NSInvocation *inv1;
|
|
|
|
NSInvocation *inv2;
|
|
|
|
NSValue *val;
|
2016-06-14 19:52:30 +00:00
|
|
|
NSInteger length;
|
2016-05-10 10:05:21 +00:00
|
|
|
NSString *hello = @"hello";
|
|
|
|
NSString *uppercaseHello;
|
|
|
|
NSOperationQueue *queue = [NSOperationQueue new];
|
2013-07-10 14:04:29 +00:00
|
|
|
|
|
|
|
op = [[NSInvocationOperation alloc] initWithTarget: hello
|
2016-05-10 10:05:21 +00:00
|
|
|
selector: @selector(length)
|
|
|
|
object: nil];
|
2013-07-10 14:04:29 +00:00
|
|
|
[queue addOperations: [NSArray arrayWithObject: op]
|
|
|
|
waitUntilFinished: YES];
|
|
|
|
val = [op result];
|
|
|
|
[val getValue: &length];
|
|
|
|
PASS((length == 5), "Can invoke a selector on a target");
|
2016-05-10 10:05:21 +00:00
|
|
|
RELEASE(op);
|
2013-07-10 14:04:29 +00:00
|
|
|
|
|
|
|
inv1 = [NSInvocation invocationWithMethodSignature:
|
2016-05-10 10:05:21 +00:00
|
|
|
[hello methodSignatureForSelector: @selector(uppercaseString)]];
|
2013-07-10 14:04:29 +00:00
|
|
|
[inv1 setTarget: hello];
|
|
|
|
[inv1 setSelector: @selector(uppercaseString)];
|
|
|
|
op = [[NSInvocationOperation alloc] initWithInvocation: inv1];
|
|
|
|
inv2 = [op invocation];
|
|
|
|
PASS(([inv2 isEqual: inv1]), "Can recover an operation's invocation");
|
|
|
|
[queue addOperations: [NSArray arrayWithObject: op]
|
|
|
|
waitUntilFinished: YES];
|
|
|
|
uppercaseHello = [op result];
|
2016-05-10 10:05:21 +00:00
|
|
|
PASS_EQUAL(uppercaseHello, @"HELLO", "Can schedule an NSInvocation");
|
|
|
|
RELEASE(op);
|
2013-07-10 14:04:29 +00:00
|
|
|
|
|
|
|
op = [[NSInvocationOperation alloc] initWithTarget: hello
|
2016-05-10 10:05:21 +00:00
|
|
|
selector: @selector(release)
|
|
|
|
object: nil];
|
2013-07-10 14:04:29 +00:00
|
|
|
[queue addOperations: [NSArray arrayWithObject: op]
|
|
|
|
waitUntilFinished: YES];
|
|
|
|
PASS_EXCEPTION(([op result]), NSInvocationOperationVoidResultException,
|
2016-05-10 10:05:21 +00:00
|
|
|
"Can't get result of a void invocation");
|
|
|
|
RELEASE(op);
|
2013-07-10 14:04:29 +00:00
|
|
|
|
|
|
|
op = [[NSInvocationOperation alloc] initWithTarget: hello
|
|
|
|
selector: @selector(length)
|
|
|
|
object: nil];
|
|
|
|
[op cancel];
|
|
|
|
[queue addOperations: [NSArray arrayWithObject: op]
|
|
|
|
waitUntilFinished: YES];
|
|
|
|
PASS_EXCEPTION(([op result]), NSInvocationOperationCancelledException,
|
2016-05-10 10:05:21 +00:00
|
|
|
"Can't get the result of a cancelled invocation");
|
|
|
|
RELEASE(op);
|
2013-07-10 14:04:29 +00:00
|
|
|
|
|
|
|
op = [[NSInvocationOperation alloc] initWithTarget: hello
|
|
|
|
selector: @selector(length)
|
|
|
|
object: nil];
|
2016-05-10 10:05:21 +00:00
|
|
|
PASS(([op result] == nil),
|
|
|
|
"Result is nil before the invocation has completed");
|
|
|
|
RELEASE(op);
|
2013-07-10 14:04:29 +00:00
|
|
|
|
2016-05-10 10:05:21 +00:00
|
|
|
RELEASE(queue);
|
|
|
|
END_SET("NSInvocationOperation - basic")
|
2013-07-10 14:04:29 +00:00
|
|
|
return 0;
|
|
|
|
}
|