2011-02-16 08:21:17 +00:00
|
|
|
#import "Testing.h"
|
|
|
|
#import <Foundation/NSAutoreleasePool.h>
|
|
|
|
#import <Foundation/NSDate.h>
|
|
|
|
#import <Foundation/NSRunLoop.h>
|
|
|
|
#import <Foundation/NSString.h>
|
|
|
|
#import <Foundation/NSArray.h>
|
|
|
|
#import <Foundation/NSFileHandle.h>
|
2014-07-13 07:37:24 +00:00
|
|
|
#import <Foundation/NSDictionary.h>
|
2011-02-16 08:21:17 +00:00
|
|
|
|
|
|
|
#include <unistd.h>
|
|
|
|
|
|
|
|
int main()
|
|
|
|
{
|
2014-07-13 07:37:24 +00:00
|
|
|
START_SET("NSRunLoop performers")
|
2011-02-16 08:21:17 +00:00
|
|
|
NSRunLoop *run;
|
|
|
|
NSDate *date;
|
|
|
|
NSMutableString *str;
|
|
|
|
NSFileHandle *fh = [NSFileHandle fileHandleWithStandardInput];
|
2011-04-03 08:20:57 +00:00
|
|
|
NSTimeInterval delay = 0.1;
|
2011-02-16 08:21:17 +00:00
|
|
|
|
|
|
|
[fh retain];
|
|
|
|
[fh readInBackgroundAndNotify];
|
|
|
|
|
|
|
|
run = [NSRunLoop currentRunLoop];
|
|
|
|
|
|
|
|
/* A run loop with no input sources does nothing when you tell it to run.
|
|
|
|
Thus, we need to provide at least one input source ... */
|
|
|
|
|
|
|
|
str = [[NSMutableString alloc] init];
|
|
|
|
[run performSelector: @selector(appendString:)
|
|
|
|
target: str
|
|
|
|
argument: @"foo"
|
|
|
|
order: 0
|
|
|
|
modes: [NSArray arrayWithObject: NSDefaultRunLoopMode]];
|
2011-04-03 08:20:57 +00:00
|
|
|
date = [NSDate dateWithTimeIntervalSinceNow: delay];
|
2011-02-16 08:21:17 +00:00
|
|
|
[run runUntilDate: date];
|
|
|
|
PASS([str isEqual: @"foo"],
|
|
|
|
"-performSelector:target:argument:order:modes: works for one performer");
|
|
|
|
|
|
|
|
str = [[NSMutableString alloc] init];
|
|
|
|
[run performSelector: @selector(appendString:)
|
|
|
|
target: str
|
|
|
|
argument: @"foo"
|
|
|
|
order: 0
|
|
|
|
modes: [NSArray arrayWithObject: NSDefaultRunLoopMode]];
|
2011-04-03 08:20:57 +00:00
|
|
|
date = [NSDate dateWithTimeIntervalSinceNow: delay];
|
2011-02-16 08:21:17 +00:00
|
|
|
[run runUntilDate: date];
|
|
|
|
[run runUntilDate: date];
|
2014-07-13 07:37:24 +00:00
|
|
|
if ([str isEqual: @""])
|
|
|
|
SKIP("it looks like stdin is redirected")
|
2011-02-16 08:21:17 +00:00
|
|
|
PASS([str isEqual: @"foo"],
|
|
|
|
"-performSelector:target:argument:order:modes: only sends the message once");
|
|
|
|
|
|
|
|
str = [[NSMutableString alloc] init];
|
|
|
|
[run performSelector: @selector(appendString:)
|
|
|
|
target: str
|
|
|
|
argument: @"bar"
|
|
|
|
order: 11
|
|
|
|
modes: [NSArray arrayWithObject: NSDefaultRunLoopMode]];
|
|
|
|
[run performSelector: @selector(appendString:)
|
|
|
|
target: str
|
|
|
|
argument: @"foo"
|
|
|
|
order: 10
|
|
|
|
modes: [NSArray arrayWithObject: NSDefaultRunLoopMode]];
|
2011-04-03 08:20:57 +00:00
|
|
|
date = [NSDate dateWithTimeIntervalSinceNow: delay];
|
2011-02-16 08:21:17 +00:00
|
|
|
[run runUntilDate: date];
|
|
|
|
PASS([str isEqual: @"foobar"],
|
|
|
|
"-performSelector:target:argument:order:modes: orders performers correctly");
|
|
|
|
|
|
|
|
str = [[NSMutableString alloc] init];
|
|
|
|
[run performSelector: @selector(appendString:)
|
|
|
|
target: str
|
|
|
|
argument: @"foo"
|
|
|
|
order: 10
|
|
|
|
modes: [NSArray arrayWithObject: NSDefaultRunLoopMode]];
|
|
|
|
[run performSelector: @selector(appendString:)
|
|
|
|
target: str
|
|
|
|
argument: @"bar"
|
|
|
|
order: 11
|
|
|
|
modes: [NSArray arrayWithObject: NSDefaultRunLoopMode]];
|
|
|
|
[run performSelector: @selector(appendString:)
|
|
|
|
target: str
|
|
|
|
argument: @"zot"
|
|
|
|
order: 11
|
|
|
|
modes: [NSArray arrayWithObject: NSDefaultRunLoopMode]];
|
|
|
|
[run cancelPerformSelector: @selector(appendString:)
|
|
|
|
target: str
|
|
|
|
argument: @"bar"];
|
2011-04-03 08:20:57 +00:00
|
|
|
date = [NSDate dateWithTimeIntervalSinceNow: delay];
|
2011-02-16 08:21:17 +00:00
|
|
|
[run runUntilDate: date];
|
|
|
|
PASS([str isEqual: @"foozot"],
|
|
|
|
"-cancelPerformSelector:target:argument: works");
|
|
|
|
|
|
|
|
str = [[NSMutableString alloc] init];
|
|
|
|
[run performSelector: @selector(appendString:)
|
|
|
|
target: str
|
|
|
|
argument: @"foo"
|
|
|
|
order: 10
|
|
|
|
modes: [NSArray arrayWithObject: NSDefaultRunLoopMode]];
|
|
|
|
[run performSelector: @selector(appendString:)
|
|
|
|
target: str
|
|
|
|
argument: @"zot"
|
|
|
|
order: 11
|
|
|
|
modes: [NSArray arrayWithObject: NSDefaultRunLoopMode]];
|
|
|
|
[run cancelPerformSelectorsWithTarget: str];
|
2011-04-03 08:20:57 +00:00
|
|
|
date = [NSDate dateWithTimeIntervalSinceNow: delay];
|
2011-02-16 08:21:17 +00:00
|
|
|
[run runUntilDate: date];
|
|
|
|
PASS([str isEqualToString: @""], "-cancelPerformSelectorsWithTarget: works %s",[str cString]);
|
|
|
|
|
|
|
|
[fh closeFile];
|
|
|
|
[fh release];
|
|
|
|
|
2014-07-13 07:37:24 +00:00
|
|
|
END_SET("NSRunLoop performers")
|
2011-02-16 08:21:17 +00:00
|
|
|
return 0;
|
|
|
|
}
|