blob: 4a908fbf2dd968c7a26dc911537f092fee924c80 [file] [log] [blame]
/*
* Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#import "webrtc/test/testsupport/mac/run_threaded_main_mac.h"
#import <Cocoa/Cocoa.h>
// This class passes parameter from main to the worked thread and back.
@interface AutoTestInWorkerThread : NSObject {
int argc_;
char** argv_;
int result_;
bool done_;
}
- (void)setDone:(bool)done;
- (bool)done;
- (void)setArgc:(int)argc argv:(char**)argv;
- (int) result;
- (void)runTest:(NSObject*)ignored;
@end
@implementation AutoTestInWorkerThread
- (void)setDone:(bool)done {
done_ = done;
}
- (bool)done {
return done_;
}
- (void)setArgc:(int)argc argv:(char**)argv {
argc_ = argc;
argv_ = argv;
}
- (void)runTest:(NSObject*)ignored {
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
result_ = ImplementThisToRunYourTest(argc_, argv_);
done_ = true;
[pool release];
return;
}
- (int)result {
return result_;
}
@end
int main(int argc, char * argv[]) {
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
[NSApplication sharedApplication];
int result = 0;
AutoTestInWorkerThread* tests = [[AutoTestInWorkerThread alloc] init];
[tests setArgc:argc argv:argv];
[tests setDone:false];
[NSThread detachNewThreadSelector:@selector(runTest:)
toTarget:tests
withObject:nil];
NSRunLoop* main_run_loop = [NSRunLoop mainRunLoop];
NSDate *loop_until = [NSDate dateWithTimeIntervalSinceNow:0.1];
bool runloop_ok = true;
while (![tests done] && runloop_ok) {
runloop_ok = [main_run_loop runMode:NSDefaultRunLoopMode
beforeDate:loop_until];
loop_until = [NSDate dateWithTimeIntervalSinceNow:0.1];
}
result = [tests result];
[pool release];
return result;
}