Files
textmate/Shared/include/test/cocoa.h
Allan Odgaard 84dc2dd871 Allow a target to use both new and old test system
Presently the new test system cannot be used for (interactive) GUI tests, so we keep the old one until we have that feature in the new.
2013-08-01 19:01:24 +02:00

70 lines
2.3 KiB
C++

#ifndef COCOA_P0XQO9KO
#define COCOA_P0XQO9KO
#include <text/tokenize.h>
#include <oak/oak.h>
static BOOL IsGUITestsEnabled (std::string const& testName)
{
std::set<std::string> tests;
std::string envVar = getenv("GUI_TESTS") ?: "";
citerate(test, text::tokenize(envVar.begin(), envVar.end(), ' '))
tests.insert(*test);
return tests.find("all") != tests.end() || tests.find(testName) != tests.end();
}
static void OakSetupApplicationWithView (NSResponder* aView, std::string testName = NULL_STR)
{
if(testName == NULL_STR)
{
testName = [[[NSProcessInfo processInfo] processName] UTF8String];
if(testName.find("cxx_test_") == 0)
testName = testName.substr(strlen("cxx_test_"));
}
if(!IsGUITestsEnabled(testName))
return;
[NSApplication sharedApplication];
[NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
[NSApp activateIgnoringOtherApps:YES];
NSString* appName = [[NSProcessInfo processInfo] processName];
appName = [[[appName componentsSeparatedByString:@"_"] componentsJoinedByString:@" "] capitalizedString];
NSMenu* appMenu = [NSMenu new];
[appMenu addItem:[[NSMenuItem alloc] initWithTitle:[@"Quit " stringByAppendingString:appName] action:@selector(terminate:) keyEquivalent:@"q"]];
NSMenuItem* appMenuItem = [NSMenuItem new];
[appMenuItem setSubmenu:appMenu];
NSMenu* mainMenu = [NSMenu new];
[mainMenu addItem:appMenuItem];
[NSApp setMainMenu:mainMenu];
NSWindow* window = nil;
if([aView isKindOfClass:[NSWindow class]])
{
window = (NSWindow*)aView;
}
else if([aView isKindOfClass:[NSView class]])
{
NSView* view = (NSView*)aView;
NSRect winRect = [NSWindow frameRectForContentRect:NSInsetRect([view bounds], -10, -10) styleMask:NSTitledWindowMask|NSResizableWindowMask];
window = [[NSWindow alloc] initWithContentRect:winRect styleMask:NSTitledWindowMask|NSResizableWindowMask backing:NSBackingStoreBuffered defer:NO];
[view setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable];
[view setFrame:NSInsetRect([[window contentView] bounds], 10, 10)];
[[window contentView] addSubview:view];
}
[window cascadeTopLeftFromPoint:NSMakePoint(20, 20)];
[window setTitle:appName];
[window setFrameAutosaveName:@"Main Window"];
[window makeKeyAndOrderFront:nil];
[NSApp run];
}
#endif /* end of include guard: COCOA_P0XQO9KO */