aboutsummaryrefslogtreecommitdiff
path: root/UnitTesting/GTMAppKitUnitTestingUtilities.h
diff options
context:
space:
mode:
authorGravatar gtm.daemon <gtm.daemon@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3>2010-04-15 17:31:09 +0000
committerGravatar gtm.daemon <gtm.daemon@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3>2010-04-15 17:31:09 +0000
commit2ddb245fac99802e63742c21f7da0d499e9cecf6 (patch)
tree3eebbf1aeed8269c8b14de81e8b680e784b8709b /UnitTesting/GTMAppKitUnitTestingUtilities.h
parent30ac0ff87b594d7bca3a5cc2789ca415840ea0b1 (diff)
[Author: dmaclach]
refactor GTMUnitTestingUtilities into GTMAppKitUnitTestingUtilties and GTMFoundationUnitTestingUtilities. convert GTMSignalHandler over to using new runloop routines fix bug in GTMSignalHandler API with GC where releasing it wasn't sufficient to stop it listening. R=thomasvl DELTA=1227 (638 added, 566 deleted, 23 changed)
Diffstat (limited to 'UnitTesting/GTMAppKitUnitTestingUtilities.h')
-rw-r--r--UnitTesting/GTMAppKitUnitTestingUtilities.h91
1 files changed, 91 insertions, 0 deletions
diff --git a/UnitTesting/GTMAppKitUnitTestingUtilities.h b/UnitTesting/GTMAppKitUnitTestingUtilities.h
new file mode 100644
index 0000000..d6a653c
--- /dev/null
+++ b/UnitTesting/GTMAppKitUnitTestingUtilities.h
@@ -0,0 +1,91 @@
+//
+// GTMAppKitUnitTestingUtilities.h
+//
+// Copyright 2006-2010 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License"); you may not
+// use this file except in compliance with the License. You may obtain a copy
+// of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+// License for the specific language governing permissions and limitations under
+// the License.
+//
+
+#import "GTMFoundationUnitTestingUtilities.h"
+
+// Collection of utilities for unit testing
+@interface GTMAppKitUnitTestingUtilities : NSObject
+
+// Sets up the user interface so that we can run consistent UI unittests on
+// it. This includes setting scroll bar types, setting selection colors
+// setting color spaces etc so that everything is consistent across machines.
+// This should be called in main, before NSApplicationMain is called.
++ (void)setUpForUIUnitTests;
+
+// Syntactic sugar combining that checks to see if we are running unittests
+// and then calls setUpForUIUnitTests wrapped up in a NSAutoreleasePool so that
+// your main can look like this:
+// int main(int argc, const char *argv[]) {
+// [UnitTestingUtilities setUpForUIUnitTestsIfBeingTested];
+// return NSApplicationMain(argc, argv);
+// }
++ (void)setUpForUIUnitTestsIfBeingTested;
+
+// Check if the screen saver is running. Some unit tests don't work when
+// the screen saver is active.
++ (BOOL)isScreenSaverActive;
+
+// Allows for posting either a keydown or a keyup with all the modifiers being
+// applied. Passing a 'g' with NSKeyDown and NSShiftKeyMask
+// generates two events (a shift key key down and a 'g' key keydown). Make sure
+// to balance this with a keyup, or things could get confused. Events get posted
+// using the CGRemoteOperation events which means that it gets posted in the
+// system event queue. Thus you can affect other applications if your app isn't
+// the active app (or in some cases, such as hotkeys, even if it is).
+// Arguments:
+// type - Event type. Currently accepts NSKeyDown and NSKeyUp
+// keyChar - character on the keyboard to type. Make sure it is lower case.
+// If you need upper case, pass in the NSShiftKeyMask in the
+// modifiers. i.e. to generate "G" pass in 'g' and NSShiftKeyMask.
+// to generate "+" pass in '=' and NSShiftKeyMask.
+// cocoaModifiers - an int made up of bit masks. Handles NSAlphaShiftKeyMask,
+// NSShiftKeyMask, NSControlKeyMask, NSAlternateKeyMask, and
+// NSCommandKeyMask
++ (void)postKeyEvent:(NSEventType)type
+ character:(CGCharCode)keyChar
+ modifiers:(UInt32)cocoaModifiers;
+
+// Syntactic sugar for posting a keydown immediately followed by a key up event
+// which is often what you really want.
+// Arguments:
+// keyChar - character on the keyboard to type. Make sure it is lower case.
+// If you need upper case, pass in the NSShiftKeyMask in the
+// modifiers. i.e. to generate "G" pass in 'g' and NSShiftKeyMask.
+// to generate "+" pass in '=' and NSShiftKeyMask.
+// cocoaModifiers - an int made up of bit masks. Handles NSAlphaShiftKeyMask,
+// NSShiftKeyMask, NSControlKeyMask, NSAlternateKeyMask, and
+// NSCommandKeyMask
++ (void)postTypeCharacterEvent:(CGCharCode)keyChar
+ modifiers:(UInt32)cocoaModifiers;
+
+@end
+
+// Some category methods to simplify spinning the runloops in such a way as
+// to make tests less flaky, but have them complete as fast as possible.
+@interface NSApplication (GTMUnitTestingAdditions)
+// Has NSApplication call nextEventMatchingMask repeatedly until
+// [context shouldStop] returns YES or it returns nil because the current date
+// is greater than |date|.
+// Return YES if the runloop was stopped because [context shouldStop] returned
+// YES.
+- (BOOL)gtm_runUntilDate:(NSDate *)date
+ context:(id<GTMUnitTestingRunLoopContext>)context;
+
+// Calls -gtm_runUntilDate:context: with the timeout date set to 60 seconds.
+- (BOOL)gtm_runUpToSixtySecondsWithContext:(id<GTMUnitTestingRunLoopContext>)context;
+@end