aboutsummaryrefslogtreecommitdiff
path: root/UnitTesting
diff options
context:
space:
mode:
Diffstat (limited to 'UnitTesting')
-rw-r--r--UnitTesting/GTMAppKit+UnitTesting.h171
-rw-r--r--UnitTesting/GTMAppKit+UnitTesting.m583
-rw-r--r--UnitTesting/GTMAppKitUnitTestingUtilities.h15
-rw-r--r--UnitTesting/GTMAppKitUnitTestingUtilities.m158
-rw-r--r--UnitTesting/GTMCALayer+UnitTesting.h46
-rw-r--r--UnitTesting/GTMCALayer+UnitTesting.m89
-rw-r--r--UnitTesting/GTMDevLogUnitTestingBridge.m44
-rw-r--r--UnitTesting/GTMIPhoneSecurityLibraryTest.m75
-rw-r--r--UnitTesting/GTMIPhoneUnitTestDelegate.m2
-rw-r--r--UnitTesting/GTMIPhoneUnitTestMain.m28
-rw-r--r--UnitTesting/GTMNSObject+BindingUnitTesting.h120
-rw-r--r--UnitTesting/GTMNSObject+BindingUnitTesting.m577
-rw-r--r--UnitTesting/GTMNSObject+UnitTesting.h430
-rw-r--r--UnitTesting/GTMNSObject+UnitTesting.m1047
-rw-r--r--UnitTesting/GTMSenTestCase.h20
-rw-r--r--UnitTesting/GTMSenTestCase.m21
-rw-r--r--UnitTesting/GTMSenTestCaseTest.m22
-rw-r--r--UnitTesting/GTMTestTimerTest.m30
-rw-r--r--UnitTesting/GTMUIKit+UnitTesting.h128
-rw-r--r--UnitTesting/GTMUIKit+UnitTesting.m122
-rw-r--r--UnitTesting/GTMUIKit+UnitTestingTest.m67
-rw-r--r--UnitTesting/GTMUIUnitTestingHarness/English.lproj/MainMenu.xib2376
-rw-r--r--UnitTesting/GTMUIUnitTestingHarness/main.m3
-rw-r--r--UnitTesting/GTMUnitTestDevLog.h59
-rw-r--r--UnitTesting/GTMUnitTestDevLog.m253
-rw-r--r--UnitTesting/GTMUnitTestingBindingTest.m116
-rw-r--r--UnitTesting/GTMUnitTestingTest.h29
-rw-r--r--UnitTesting/GTMUnitTestingTest.m253
-rw-r--r--UnitTesting/TestData/GTMUIViewUnitTestingTest.gtmUTState33
-rw-r--r--UnitTesting/TestData/GTMUIViewUnitTestingTest.pngbin3214 -> 0 bytes
-rw-r--r--UnitTesting/TestData/GTMUnitTestingImage.10.6.tiffbin20174 -> 0 bytes
-rw-r--r--UnitTesting/TestData/GTMUnitTestingImage.gtmUTState30
-rw-r--r--UnitTesting/TestData/GTMUnitTestingImage.tiffbin67190 -> 0 bytes
-rw-r--r--UnitTesting/TestData/GTMUnitTestingTest.nib/classes.nib86
-rw-r--r--UnitTesting/TestData/GTMUnitTestingTest.nib/designable.nib1144
-rw-r--r--UnitTesting/TestData/GTMUnitTestingTest.nib/info.nib20
-rw-r--r--UnitTesting/TestData/GTMUnitTestingTest.nib/keyedobjects.nibbin15667 -> 15255 bytes
-rw-r--r--UnitTesting/TestData/GTMUnitTestingTestApp.10.6.gtmUTState2608
-rw-r--r--UnitTesting/TestData/GTMUnitTestingTestApp.gtmUTState2204
-rw-r--r--UnitTesting/TestData/GTMUnitTestingView.10.6.tiffbin2818 -> 0 bytes
-rw-r--r--UnitTesting/TestData/GTMUnitTestingView.tiffbin161670 -> 0 bytes
-rw-r--r--UnitTesting/TestData/GTMUnitTestingWindow.10.5.6.tiffbin21176 -> 0 bytes
-rw-r--r--UnitTesting/TestData/GTMUnitTestingWindow.10.5.7.tiffbin21176 -> 0 bytes
-rw-r--r--UnitTesting/TestData/GTMUnitTestingWindow.10.5.8.tiffbin21176 -> 0 bytes
-rw-r--r--UnitTesting/TestData/GTMUnitTestingWindow.10.6.gtmUTState1308
-rw-r--r--UnitTesting/TestData/GTMUnitTestingWindow.10.6.tiffbin21622 -> 0 bytes
-rw-r--r--UnitTesting/TestData/GTMUnitTestingWindow.gtmUTState904
-rw-r--r--UnitTesting/TestData/GTMUnitTestingWindow.tiffbin21226 -> 0 bytes
48 files changed, 1556 insertions, 13665 deletions
diff --git a/UnitTesting/GTMAppKit+UnitTesting.h b/UnitTesting/GTMAppKit+UnitTesting.h
deleted file mode 100644
index 7f6bd26..0000000
--- a/UnitTesting/GTMAppKit+UnitTesting.h
+++ /dev/null
@@ -1,171 +0,0 @@
-//
-// GTMAppKit+UnitTesting.m
-//
-// Categories for making unit testing of graphics/UI easier.
-//
-// Copyright 2006-2008 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 <AppKit/AppKit.h>
-#import "GTMNSObject+UnitTesting.h"
-
-// Categories for making unit testing of graphics/UI easier.
-// Allows you to take a state/images of instances of AppKit classes.
-// See GTMNSObject+UnitTesting.h for details.
-
-@interface NSApplication (GTMUnitTestingAdditions)
-@end
-
-@interface NSWindow (GTMUnitTestingAdditions) <GTMUnitTestingImaging>
-@end
-
-@interface NSControl (GTMUnitTestingAdditions)
-@end
-
-@interface NSButton (GTMUnitTestingAdditions)
-@end
-
-@interface NSTextField (GTMUnitTestingAdditions)
-@end
-
-@interface NSCell (GTMUnitTestingAdditions)
-@end
-
-@interface NSImage (GTMUnitTestingAdditions) <GTMUnitTestingImaging>
-@end
-
-@interface NSMenu (GTMUnitTestingAdditions)
-@end
-
-@interface NSMenuItem (GTMUnitTestingAdditions)
-@end
-
-@interface NSTabView (GTMUnitTestingAdditions)
-@end
-
-@interface NSTabViewItem (GTMUnitTestingAdditions)
-@end
-
-@interface NSToolbar (GTMUnitTestingAdditions)
-@end
-
-@interface NSToolbarItem (GTMUnitTestingAdditions)
-@end
-
-@interface NSMatrix (GTMUnitTestingAdditions)
-@end
-
-@interface NSBox (GTMUnitTestingAdditions)
-@end
-
-@interface NSSegmentedControl (GTMUnitTestingAdditions)
-@end
-
-@interface NSComboBox (GTMUnitTestingAdditions)
-@end
-
-@protocol GTMUnitTestViewDrawer;
-
-// Fails when the |a1|'s drawing in an area |a2| does not equal the image file named |a3|.
-// See the description of the -gtm_pathForImageNamed method
-// to understand how |a3| is found and written out.
-// See the description of the GTMUnitTestView for a better idea
-// how the view works.
-// Implemented as a macro to match the rest of the SenTest macros.
-//
-// Args:
-// a1: The object that implements the GTMUnitTestViewDrawer protocol
-// that is doing the drawing.
-// a2: The size of the drawing
-// a3: The name of the image file to check against.
-// Do not include the extension
-// a4: contextInfo to pass to drawer
-// description: A format string as in the printf() function.
-// Can be nil or an empty string but must be present.
-// ...: A variable number of arguments to the format string. Can be absent.
-//
-
-#define GTMAssertDrawingEqualToImageNamed(a1, a2, a3, a4, description, ...) \
- do { \
- id<GTMUnitTestViewDrawer> a1Drawer = (a1); \
- NSSize a2Size = (a2); \
- NSString* a3String = (a3); \
- void *a4ContextInfo = (a4); \
- NSRect frame = NSMakeRect(0, 0, a2Size.width, a2Size.height); \
- GTMUnitTestView *view = [[[GTMUnitTestView alloc] initWithFrame:frame drawer:a1Drawer contextInfo:a4ContextInfo] autorelease]; \
- GTMAssertObjectImageEqualToImageNamed(view, a3String, STComposeString(description, ##__VA_ARGS__)); \
- } while(0)
-
-// Category for making unit testing of graphics/UI easier.
-
-// Allows you to take a state of a view. Supports both image and state.
-// See NSObject+UnitTesting.h for details.
-@interface NSView (GTMUnitTestingAdditions) <GTMUnitTestingImaging>
-// Returns whether unitTestEncodeState should recurse into subviews
-//
-// If you have "Full keyboard access" in the
-// Keyboard & Mouse > Keyboard Shortcuts preferences pane set to "Text boxes
-// and Lists only" that Apple adds a set of subviews to NSTextFields. So in the
-// case of NSTextFields we don't want to recurse into their subviews. There may
-// be other cases like this, so instead of specializing unitTestEncodeState: to
-// look for NSTextFields, NSTextFields will just not allow us to recurse into
-// their subviews.
-//
-// Returns:
-// should unitTestEncodeState pick up subview state.
-- (BOOL)gtm_shouldEncodeStateForSubviews;
-
-@end
-
-// A view that allows you to delegate out drawing using the formal
-// GTMUnitTestViewDelegate protocol
-// This is useful when writing up unit tests for visual elements.
-// Your test will often end up looking like this:
-// - (void)testFoo {
-// GTMAssertDrawingEqualToFile(self, NSMakeSize(200, 200), @"Foo", nil, nil);
-// }
-// and your testSuite will also implement the unitTestViewDrawRect method to do
-// it's actual drawing. The above creates a view of size 200x200 that draws
-// it's content using |self|'s unitTestViewDrawRect method and compares it to
-// the contents of the file Foo.tif to make sure it's valid
-@interface GTMUnitTestView : NSView {
- @private
- id<GTMUnitTestViewDrawer> drawer_; // delegate for doing drawing (STRONG)
- void* contextInfo_; // info passed in by user for them to use when drawing
-}
-
-// Create a GTMUnitTestView.
-//
-// Args:
-// rect: the area to draw.
-// drawer: the object that will do the drawing via the GTMUnitTestViewDrawer
-// protocol
-// contextInfo:
-- (id)initWithFrame:(NSRect)frame drawer:(id<GTMUnitTestViewDrawer>)drawer contextInfo:(void*)contextInfo;
-@end
-
-/// \cond Protocols
-
-// Formal protocol for doing unit testing of views. See description of
-// GTMUnitTestView for details.
-@protocol GTMUnitTestViewDrawer <NSObject>
-
-// Draw the view. Equivalent to drawRect on a standard NSView.
-//
-// Args:
-// rect: the area to draw.
-- (void)gtm_unitTestViewDrawRect:(NSRect)rect contextInfo:(void*)contextInfo;
-@end
-
diff --git a/UnitTesting/GTMAppKit+UnitTesting.m b/UnitTesting/GTMAppKit+UnitTesting.m
deleted file mode 100644
index 5b4d6f7..0000000
--- a/UnitTesting/GTMAppKit+UnitTesting.m
+++ /dev/null
@@ -1,583 +0,0 @@
-//
-// GTMAppKit+UnitTesting.m
-//
-// Categories for making unit testing of graphics/UI easier.
-//
-// Copyright 2006-2008 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 "GTMDefines.h"
-#import "GTMAppKit+UnitTesting.h"
-#import "GTMGeometryUtils.h"
-#import "GTMMethodCheck.h"
-
-#if MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_4
- #define ENCODE_NSINTEGER(coder, i, key) [(coder) encodeInt:(i) forKey:(key)]
-#else
- #define ENCODE_NSINTEGER(coder, i, key) [(coder) encodeInteger:(i) forKey:(key)]
-#endif
-
-@implementation NSApplication (GTMUnitTestingAdditions)
-GTM_METHOD_CHECK(NSObject, gtm_unitTestEncodeState:);
-
-- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder {
- [super gtm_unitTestEncodeState:inCoder];
- ENCODE_NSINTEGER(inCoder, [[self mainWindow] windowNumber], @"ApplicationMainWindow");
-
- // Descend down into the windows allowing them to store their state
- NSWindow *window = nil;
- int i = 0;
- GTM_FOREACH_OBJECT(window, [self windows]) {
- if ([window isVisible]) {
- // Only record visible windows because invisible windows may be closing on us
- // This appears to happen differently in 64 bit vs 32 bit, and items
- // in the window may hold an extra retain count for a while until the
- // event loop is spun. To avoid all this, we just don't record non
- // visible windows.
- // See rdar://5851458 for details.
- [inCoder encodeObject:window forKey:[NSString stringWithFormat:@"Window %d", i]];
- i = i + 1;
- }
- }
-
- // and encode the menu bar
- NSMenu *mainMenu = [self mainMenu];
- if (mainMenu) {
- [inCoder encodeObject:mainMenu forKey:@"MenuBar"];
- }
-}
-@end
-
-@implementation NSWindow (GTMUnitTestingAdditions)
-
-- (CGImageRef)gtm_unitTestImage {
- return [[[self contentView] superview] gtm_unitTestImage];
-}
-
-- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder {
- [super gtm_unitTestEncodeState:inCoder];
- [inCoder encodeObject:[self title] forKey:@"WindowTitle"];
- [inCoder encodeBool:[self isVisible] forKey:@"WindowIsVisible"];
- // Do not record if window is key, because users running unit tests
- // and clicking around to other apps, could change this mid test causing
- // issues.
- // [inCoder encodeBool:[self isKeyWindow] forKey:@"WindowIsKey"];
- [inCoder encodeBool:[self isMainWindow] forKey:@"WindowIsMain"];
- [inCoder encodeObject:[self contentView] forKey:@"WindowContent"];
- if ([self toolbar]) {
- [inCoder encodeObject:[self toolbar] forKey:@"WindowToolbar"];
- }
-}
-
-@end
-
-@implementation NSControl (GTMUnitTestingAdditions)
-
-// Encodes the state of an object in a manner suitable for comparing
-// against a master state file so we can determine whether the
-// object is in a suitable state.
-//
-// Arguments:
-// inCoder - the coder to encode our state into
-- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder {
- [super gtm_unitTestEncodeState:inCoder];
- [inCoder encodeObject:[self class] forKey:@"ControlType"];
- [inCoder encodeObject:[self objectValue] forKey:@"ControlValue"];
- [inCoder encodeObject:[self selectedCell] forKey:@"ControlSelectedCell"];
- ENCODE_NSINTEGER(inCoder, [self tag], @"ControlTag");
- [inCoder encodeBool:[self isEnabled] forKey:@"ControlIsEnabled"];
-}
-
-@end
-
-@implementation NSButton (GTMUnitTestingAdditions)
-
-// Encodes the state of an object in a manner suitable for comparing
-// against a master state file so we can determine whether the
-// object is in a suitable state.
-//
-// Arguments:
-// inCoder - the coder to encode our state into
-- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder {
- [super gtm_unitTestEncodeState:inCoder];
- NSString *alternateTitle = [self alternateTitle];
- if (alternateTitle) {
- [inCoder encodeObject:alternateTitle forKey:@"ButtonAlternateTitle"];
- }
-}
-
-@end
-
-@implementation NSTextField (GTMUnitTestingAdditions)
-
-- (BOOL)gtm_shouldEncodeStateForSubviews {
- return NO;
-}
-
-// Encodes the state of an object in a manner suitable for comparing
-// against a master state file so we can determine whether the
-// object is in a suitable state.
-//
-// Arguments:
-// inCoder - the coder to encode our state into
-- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder {
- [super gtm_unitTestEncodeState:inCoder];
- id controlCell = [self cell];
- if ([controlCell isKindOfClass:[NSTextFieldCell class]]) {
- NSTextFieldCell *textFieldCell = controlCell;
- [inCoder encodeObject:[textFieldCell placeholderString]
- forKey:@"PlaceHolderString"];
- }
-}
-
-@end
-
-@implementation NSCell (GTMUnitTestingAdditions)
-
-// Encodes the state of an object in a manner suitable for comparing
-// against a master state file so we can determine whether the
-// object is in a suitable state.
-//
-// Arguments:
-// inCoder - the coder to encode our state into
-- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder {
- [super gtm_unitTestEncodeState:inCoder];
- BOOL isImageCell = NO;
- if ([self hasValidObjectValue]) {
- id val = [self objectValue];
- [inCoder encodeObject:val forKey:@"CellValue"];
- isImageCell = [val isKindOfClass:[NSImage class]];
- }
- if (!isImageCell) {
- // Image cells have a title that includes addresses that aren't going
- // to be constant, so we don't encode them. All the info we need
- // is going to be in the CellValue encoding.
- [inCoder encodeObject:[self title] forKey:@"CellTitle"];
- }
- ENCODE_NSINTEGER(inCoder, [self state], @"CellState");
- ENCODE_NSINTEGER(inCoder, [self tag], @"CellTag");
-}
-
-@end
-
-@implementation NSImage (GTMUnitTestingAdditions)
-
-- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder {
- [super gtm_unitTestEncodeState:inCoder];
- [inCoder encodeObject:NSStringFromSize([self size]) forKey:@"ImageSize"];
- [inCoder encodeObject:[self name] forKey:@"ImageName"];
-}
-
-- (CGImageRef)gtm_unitTestImage {
- // Create up a context
- NSSize size = [self size];
- NSRect rect = GTMNSRectOfSize(size);
- CGSize cgSize = GTMNSSizeToCGSize(size);
- CGContextRef contextRef = GTMCreateUnitTestBitmapContextOfSizeWithData(cgSize,
- NULL);
- NSGraphicsContext *bitmapContext
- = [NSGraphicsContext graphicsContextWithGraphicsPort:contextRef flipped:NO];
- _GTMDevAssert(bitmapContext, @"Couldn't create ns bitmap context");
-
- [NSGraphicsContext saveGraphicsState];
- [NSGraphicsContext setCurrentContext:bitmapContext];
- [self drawInRect:rect fromRect:rect operation:NSCompositeCopy fraction:1.0];
-
- CGImageRef image = CGBitmapContextCreateImage(contextRef);
- CFRelease(contextRef);
- [NSGraphicsContext restoreGraphicsState];
- return (CGImageRef)GTMCFAutorelease(image);
-}
-
-@end
-
-@implementation NSMenu (GTMUnitTestingAdditions)
-
-// Encodes the state of an object in a manner suitable for comparing
-// against a master state file so we can determine whether the
-// object is in a suitable state.
-//
-// Arguments:
-// inCoder - the coder to encode our state into
-- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder {
- [super gtm_unitTestEncodeState:inCoder];
- // Hack here to work around
- // rdar://5881796 Application menu item title wrong when accessed programatically
- // which causes us to have different results on x86_64 vs x386.
- // Hack is braced intentionally. We don't record the title of the
- // "application" menu or it's menu title because they are wrong on 32 bit.
- // They appear to work right on 64bit.
- {
- NSMenu *mainMenu = [NSApp mainMenu];
- NSMenu *appleMenu = [[mainMenu itemAtIndex:0] submenu];
- if (![self isEqual:appleMenu]) {
- [inCoder encodeObject:[self title] forKey:@"MenuTitle"];
- }
- }
- // Descend down into the menuitems allowing them to store their state
- NSMenuItem *menuItem = nil;
- int i = 0;
- GTM_FOREACH_OBJECT(menuItem, [self itemArray]) {
- [inCoder encodeObject:menuItem
- forKey:[NSString stringWithFormat:@"MenuItem %d", i]];
- ++i;
- }
-}
-
-@end
-
-@implementation NSMenuItem (GTMUnitTestingAdditions)
-
-- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder {
- [super gtm_unitTestEncodeState:inCoder];
- // Hack here to work around
- // rdar://5881796 Application menu item title wrong when accessed programatically
- // which causes us to have different results on x86_64 vs x386.
- // See comment above.
- {
- NSMenu *mainMenu = [NSApp mainMenu];
- NSMenuItem *appleMenuItem = [mainMenu itemAtIndex:0];
- if (![self isEqual:appleMenuItem]) {
- [inCoder encodeObject:[self title] forKey:@"MenuItemTitle"];
- }
- }
- [inCoder encodeObject:[self keyEquivalent] forKey:@"MenuItemKeyEquivalent"];
- [inCoder encodeBool:[self isSeparatorItem] forKey:@"MenuItemIsSeparator"];
- ENCODE_NSINTEGER(inCoder, [self state], @"MenuItemState");
- [inCoder encodeBool:[self isEnabled] forKey:@"MenuItemIsEnabled"];
- [inCoder encodeBool:[self isAlternate] forKey:@"MenuItemIsAlternate"];
- [inCoder encodeObject:[self toolTip] forKey:@"MenuItemTooltip"];
- ENCODE_NSINTEGER(inCoder, [self tag], @"MenuItemTag");
- ENCODE_NSINTEGER(inCoder, [self indentationLevel], @"MenuItemIndentationLevel");
-
- // Do our submenu if neccessary
- if ([self hasSubmenu]) {
- [inCoder encodeObject:[self submenu] forKey:@"MenuItemSubmenu"];
- }
-}
-
-@end
-
-@implementation NSTabView (GTMUnitTestingAdditions)
-
-// Encodes the state of an object in a manner suitable for comparing
-// against a master state file so we can determine whether the
-// object is in a suitable state.
-//
-// Arguments:
-// inCoder - the coder to encode our state into
-- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder {
- [super gtm_unitTestEncodeState:inCoder];
- NSTabViewItem *tab = nil;
- int i = 0;
- GTM_FOREACH_OBJECT(tab, [self tabViewItems]) {
- NSString *key = [NSString stringWithFormat:@"TabItem %d", i];
- [inCoder encodeObject:tab forKey:key];
- i = i + 1;
- }
-}
-
-@end
-
-@implementation NSTabViewItem (GTMUnitTestingAdditions)
-
-// Encodes the state of an object in a manner suitable for comparing
-// against a master state file so we can determine whether the
-// object is in a suitable state.
-//
-// Arguments:
-// inCoder - the coder to encode our state into
-- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder {
- [super gtm_unitTestEncodeState:inCoder];
- [inCoder encodeObject:[self label] forKey:@"TabLabel"];
- [inCoder encodeObject:[self view] forKey:@"TabView"];
-}
-
-@end
-
-@implementation NSToolbar (GTMUnitTestingAdditions)
-
-// Encodes the state of an object in a manner suitable for comparing
-// against a master state file so we can determine whether the
-// object is in a suitable state.
-//
-// Arguments:
-// inCoder - the coder to encode our state into
-- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder {
- [super gtm_unitTestEncodeState:inCoder];
- NSToolbarItem *item = nil;
- NSUInteger i = 0;
- GTM_FOREACH_OBJECT(item, [self items]) {
- NSString *key
- = [NSString stringWithFormat:@"ToolbarItem %lu", (unsigned long)i];
- [inCoder encodeObject:item forKey:key];
- i = i + 1;
- }
-}
-
-@end
-
-@implementation NSToolbarItem (GTMUnitTestingAdditions)
-
-// Encodes the state of an object in a manner suitable for comparing
-// against a master state file so we can determine whether the
-// object is in a suitable state.
-//
-// Arguments:
-// inCoder - the coder to encode our state into
-- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder {
- [super gtm_unitTestEncodeState:inCoder];
- [inCoder encodeObject:[self label] forKey:@"Label"];
- [inCoder encodeObject:[self paletteLabel] forKey:@"PaletteLabel"];
- [inCoder encodeObject:[self toolTip] forKey:@"ToolTip"];
- NSView *view = [self view];
- if (view) {
- [inCoder encodeObject:view forKey:@"View"];
- }
-}
-
-@end
-
-@implementation NSMatrix (GTMUnitTestingAdditions)
-
-// Encodes the state of an object in a manner suitable for comparing
-// against a master state file so we can determine whether the
-// object is in a suitable state.
-//
-// Arguments:
-// inCoder - the coder to encode our state into
-- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder {
- [super gtm_unitTestEncodeState:inCoder];
-
- ENCODE_NSINTEGER(inCoder, [self mode], @"MatrixMode");
- ENCODE_NSINTEGER(inCoder, [self numberOfRows], @"MatrixRowCount");
- ENCODE_NSINTEGER(inCoder, [self numberOfColumns], @"MatrixColumnCount");
- [inCoder encodeBool:[self allowsEmptySelection]
- forKey:@"MatrixAllowEmptySelection"];
- [inCoder encodeBool:[self isSelectionByRect] forKey:@"MatrixSelectionByRect"];
- [inCoder encodeBool:[self autosizesCells] forKey:@"MatrixAutosizesCells"];
- [inCoder encodeSize:[self intercellSpacing] forKey:@"MatrixIntercellSpacing"];
-
- [inCoder encodeObject:[self prototype] forKey:@"MatrixCellPrototype"];
-
- // Dump the list of cells
- NSCell *cell;
- long i = 0;
- GTM_FOREACH_OBJECT(cell, [self cells]) {
- [inCoder encodeObject:cell
- forKey:[NSString stringWithFormat:@"MatrixCell %ld", i]];
- ++i;
- }
-}
-
-@end
-
-@implementation NSBox (GTMUnitTestingAdditions)
-
-// Encodes the state of an object in a manner suitable for comparing
-// against a master state file so we can determine whether the
-// object is in a suitable state.
-//
-// Arguments:
-// inCoder - the coder to encode our state into
-- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder {
- [super gtm_unitTestEncodeState:inCoder];
-
- [inCoder encodeObject:[self title] forKey:@"BoxTitle"];
- ENCODE_NSINTEGER(inCoder, [self titlePosition], @"BoxTitlePosition");
- ENCODE_NSINTEGER(inCoder, [self boxType], @"BoxType");
- ENCODE_NSINTEGER(inCoder, [self borderType], @"BoxBorderType");
- // 10.5+ [inCoder encodeBool:[self isTransparent] forKey:@"BoxIsTransparent"];
-}
-
-@end
-
-@implementation NSSegmentedControl (GTMUnitTestingAdditions)
-
-// Encodes the state of an NSSegmentedControl and all its segments.
-//
-// Arguments:
-// inCoder - the coder to encode state into
-- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder {
- [super gtm_unitTestEncodeState:inCoder];
-
- NSInteger segmentCount = [self segmentCount];
- ENCODE_NSINTEGER(inCoder, segmentCount, @"SegmentCount");
-
- for (NSInteger i = 0; i < segmentCount; ++i) {
- NSString *key = [NSString stringWithFormat:@"Segment %ld", (long)i];
- [inCoder encodeObject:[self labelForSegment:i] forKey:key];
- }
-}
-
-@end
-
-@implementation NSComboBox (GTMUnitTestingAdditions)
-
-- (BOOL)gtm_shouldEncodeStateForSubviews {
- // Subclass of NSTextView, don't want subviews for the same reason.
- return NO;
-}
-
-// Encodes the state of an NSSegmentedControl and all its segments.
-//
-// Arguments:
-// inCoder - the coder to encode state into
-- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder {
- [super gtm_unitTestEncodeState:inCoder];
-
- NSInteger aCount = [self numberOfItems];
- ENCODE_NSINTEGER(inCoder, aCount, @"ComboBoxNumberOfItems");
- aCount = [self numberOfVisibleItems];
- ENCODE_NSINTEGER(inCoder, aCount, @"ComboBoxNumberOfVisibleItems");
-
- // Include the objectValues if it doesn't use a data source.
- if (![self usesDataSource]) {
- NSArray *objectValues = [self objectValues];
- for (NSUInteger i = 0; i < [objectValues count]; ++i) {
- id value = [objectValues objectAtIndex:i];
- if ([value isKindOfClass:[NSString class]]) {
- NSString *key = [NSString stringWithFormat:@"ComboBoxObjectValue %lu",
- (unsigned long)i];
- [inCoder encodeObject:value forKey:key];
- }
- }
- }
-}
-
-@end
-
-
-// A view that allows you to delegate out drawing using the formal
-// GTMUnitTestViewDelegate protocol above. This is useful when writing up unit
-// tests for visual elements.
-// Your test will often end up looking like this:
-// - (void)testFoo {
-// GTMAssertDrawingEqualToFile(self, NSMakeSize(200, 200), @"Foo", nil, nil);
-// }
-// and your testSuite will also implement the unitTestViewDrawRect method to do
-// it's actual drawing. The above creates a view of size 200x200 that draws
-// it's content using |self|'s unitTestViewDrawRect method and compares it to
-// the contents of the file Foo.tif to make sure it's valid
-@implementation GTMUnitTestView
-
-- (id)initWithFrame:(NSRect)frame
- drawer:(id<GTMUnitTestViewDrawer>)drawer
- contextInfo:(void*)contextInfo {
- self = [super initWithFrame:frame];
- if (self != nil) {
- drawer_ = [drawer retain];
- contextInfo_ = contextInfo;
- }
- return self;
-}
-
-- (void)dealloc {
- [drawer_ release];
- [super dealloc];
-}
-
-
-- (void)drawRect:(NSRect)rect {
- [drawer_ gtm_unitTestViewDrawRect:rect contextInfo:contextInfo_];
-}
-
-
-@end
-
-@implementation NSView (GTMUnitTestingAdditions)
-
-// Returns an image containing a representation of the object
-// suitable for use in comparing against a master image.
-// Does all of it's drawing with smoothfonts and antialiasing off
-// to avoid issues with font smoothing settings and antialias differences
-// between ppc and x86.
-//
-// Returns:
-// an image of the object
-- (CGImageRef)gtm_unitTestImage {
- // Create up a context
- NSRect bounds = [self bounds];
- CGSize cgSize = GTMNSSizeToCGSize(bounds.size);
- CGContextRef contextRef = GTMCreateUnitTestBitmapContextOfSizeWithData(cgSize,
- NULL);
- NSGraphicsContext *bitmapContext
- = [NSGraphicsContext graphicsContextWithGraphicsPort:contextRef flipped:NO];
- _GTMDevAssert(bitmapContext, @"Couldn't create ns bitmap context");
-
- // Save our state and turn off font smoothing and antialias.
- CGContextSaveGState(contextRef);
- CGContextSetShouldSmoothFonts(contextRef, false);
- CGContextSetShouldAntialias(contextRef, false);
- [self displayRectIgnoringOpacity:bounds inContext:bitmapContext];
-
- CGImageRef image = CGBitmapContextCreateImage(contextRef);
- CFRelease(contextRef);
- return (CGImageRef)GTMCFAutorelease(image);
-}
-
-// Returns whether gtm_unitTestEncodeState should recurse into subviews
-// of a particular view.
-// If you have "Full keyboard access" in the
-// Keyboard & Mouse > Keyboard Shortcuts preferences pane set to "Text boxes
-// and Lists only" that Apple adds a set of subviews to NSTextFields. So in the
-// case of NSTextFields we don't want to recurse into their subviews. There may
-// be other cases like this, so instead of specializing gtm_unitTestEncodeState: to
-// look for NSTextFields, NSTextFields will just not allow us to recurse into
-// their subviews.
-//
-// Returns:
-// should gtm_unitTestEncodeState pick up subview state.
-- (BOOL)gtm_shouldEncodeStateForSubviews {
- return YES;
-}
-
-// Encodes the state of an object in a manner suitable for comparing
-// against a master state file so we can determine whether the
-// object is in a suitable state.
-//
-// Arguments:
-// inCoder - the coder to encode our state into
-- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder {
- [super gtm_unitTestEncodeState:inCoder];
- [inCoder encodeBool:[self isHidden] forKey:@"ViewIsHidden"];
- [inCoder encodeObject:[self toolTip] forKey:@"ViewToolTip"];
- NSArray *supportedAttrs = [self accessibilityAttributeNames];
- if ([supportedAttrs containsObject:NSAccessibilityHelpAttribute]) {
- NSString *help
- = [self accessibilityAttributeValue:NSAccessibilityHelpAttribute];
- [inCoder encodeObject:help forKey:@"ViewAccessibilityHelp"];
- }
- if ([supportedAttrs containsObject:NSAccessibilityDescriptionAttribute]) {
- NSString *description
- = [self accessibilityAttributeValue:NSAccessibilityDescriptionAttribute];
- [inCoder encodeObject:description forKey:@"ViewAccessibilityDescription"];
- }
- NSMenu *menu = [self menu];
- if (menu) {
- [inCoder encodeObject:menu forKey:@"ViewMenu"];
- }
- if ([self gtm_shouldEncodeStateForSubviews]) {
- NSView *subview = nil;
- int i = 0;
- GTM_FOREACH_OBJECT(subview, [self subviews]) {
- [inCoder encodeObject:subview forKey:[NSString stringWithFormat:@"ViewSubView %d", i]];
- i = i + 1;
- }
- }
-}
-
-@end
-
diff --git a/UnitTesting/GTMAppKitUnitTestingUtilities.h b/UnitTesting/GTMAppKitUnitTestingUtilities.h
index 1edccd7..b3852ba 100644
--- a/UnitTesting/GTMAppKitUnitTestingUtilities.h
+++ b/UnitTesting/GTMAppKitUnitTestingUtilities.h
@@ -23,21 +23,6 @@
// 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;
diff --git a/UnitTesting/GTMAppKitUnitTestingUtilities.m b/UnitTesting/GTMAppKitUnitTestingUtilities.m
index 71c4d76..d90d608 100644
--- a/UnitTesting/GTMAppKitUnitTestingUtilities.m
+++ b/UnitTesting/GTMAppKitUnitTestingUtilities.m
@@ -17,68 +17,12 @@
//
#import "GTMAppKitUnitTestingUtilities.h"
-#import <AppKit/AppKit.h>
-#include <signal.h>
-#include <unistd.h>
#import "GTMDefines.h"
-// The Users profile before we change it on them
-static CMProfileRef gGTMCurrentColorProfile = NULL;
-
-// Compares two color profiles
-static BOOL GTMAreCMProfilesEqual(CMProfileRef a, CMProfileRef b);
-// Stores the user's color profile away, and changes over to generic.
-static void GTMSetColorProfileToGenericRGB();
-// Restores the users profile.
-static void GTMRestoreColorProfile(void);
-// Signal handler to try and restore users profile.
-static void GTMHandleCrashSignal(int signalNumber);
-
static CGKeyCode GTMKeyCodeForCharCode(CGCharCode charCode);
@implementation GTMAppKitUnitTestingUtilities
-// Sets up the user interface so that we can run consistent UI unittests on it.
-+ (void)setUpForUIUnitTests {
- // Give some names to undocumented defaults values
- const NSInteger MediumFontSmoothing = 2;
- const NSInteger BlueTintedAppearance = 1;
-
- // This sets up some basic values that we want as our defaults for doing pixel
- // based user interface tests. These defaults only apply to the unit test app,
- // except or the color profile which will be set system wide, and then
- // restored when the tests complete.
- NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
- // Scroll arrows together bottom
- [defaults setObject:@"DoubleMax" forKey:@"AppleScrollBarVariant"];
- // Smallest font size to CG should perform antialiasing on
- [defaults setInteger:4 forKey:@"AppleAntiAliasingThreshold"];
- // Type of smoothing
- [defaults setInteger:MediumFontSmoothing forKey:@"AppleFontSmoothing"];
- // Blue aqua
- [defaults setInteger:BlueTintedAppearance forKey:@"AppleAquaColorVariant"];
- // Standard highlight colors
- [defaults setObject:@"0.709800 0.835300 1.000000"
- forKey:@"AppleHighlightColor"];
- [defaults setObject:@"0.500000 0.500000 0.500000"
- forKey:@"AppleOtherHighlightColor"];
- // Use english plz
- [defaults setObject:[NSArray arrayWithObject:@"en"] forKey:@"AppleLanguages"];
- // How fast should we draw sheets. This speeds up the sheet tests considerably
- [defaults setFloat:.001f forKey:@"NSWindowResizeTime"];
- // Switch over the screen profile to "generic rgb". This installs an
- // atexit handler to return our profile back when we are done.
- GTMSetColorProfileToGenericRGB();
-}
-
-+ (void)setUpForUIUnitTestsIfBeingTested {
- NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
- if ([GTMFoundationUnitTestingUtilities areWeBeingUnitTested]) {
- [self setUpForUIUnitTests];
- }
- [pool drain];
-}
-
+ (BOOL)isScreenSaverActive {
BOOL answer = NO;
ProcessSerialNumber psn;
@@ -150,108 +94,6 @@ CantWorkWithScreenSaver:
@end
-BOOL GTMAreCMProfilesEqual(CMProfileRef a, CMProfileRef b) {
- BOOL equal = YES;
- if (a != b) {
- CMProfileMD5 aMD5;
- CMProfileMD5 bMD5;
- CMError aMD5Err = CMGetProfileMD5(a, aMD5);
- CMError bMD5Err = CMGetProfileMD5(b, bMD5);
- equal = (!aMD5Err &&
- !bMD5Err &&
- !memcmp(aMD5, bMD5, sizeof(CMProfileMD5))) ? YES : NO;
- }
- return equal;
-}
-
-void GTMRestoreColorProfile(void) {
- if (gGTMCurrentColorProfile) {
- CGDirectDisplayID displayID = CGMainDisplayID();
- CMError error = CMSetProfileByAVID((UInt32)displayID,
- gGTMCurrentColorProfile);
- CMCloseProfile(gGTMCurrentColorProfile);
- if (error) {
- // COV_NF_START
- // No way to force this case in a unittest.
- _GTMDevLog(@"Failed to restore previous color profile! "
- @"You may need to open System Preferences : Displays : Color "
- @"and manually restore your color settings. (Error: %ld)",
- (long)error);
- // COV_NF_END
- } else {
- _GTMDevLog(@"Color profile restored");
- }
- gGTMCurrentColorProfile = NULL;
- }
-}
-
-void GTMHandleCrashSignal(int signalNumber) {
- // Going down in flames, might as well try to restore the color profile
- // anyways.
- GTMRestoreColorProfile();
- // Go ahead and exit with the signal value relayed just incase.
- _exit(signalNumber + 128);
-}
-
-void GTMSetColorProfileToGenericRGB(void) {
- NSColorSpace *genericSpace = [NSColorSpace genericRGBColorSpace];
- CMProfileRef genericProfile = (CMProfileRef)[genericSpace colorSyncProfile];
- CMProfileRef previousProfile;
- CGDirectDisplayID displayID = CGMainDisplayID();
- CMError error = CMGetProfileByAVID((UInt32)displayID, &previousProfile);
- if (error) {
- // COV_NF_START
- // No way to force this case in a unittest.
- _GTMDevLog(@"Failed to get current color profile. "
- "I will not be able to restore your current profile, thus I'm "
- "not changing it. Many unit tests may fail as a result. (Error: %li)",
- (long)error);
- return;
- // COV_NF_END
- }
- if (GTMAreCMProfilesEqual(genericProfile, previousProfile)) {
- CMCloseProfile(previousProfile);
- return;
- }
- CFStringRef previousProfileName;
- CFStringRef genericProfileName;
- CMCopyProfileDescriptionString(previousProfile, &previousProfileName);
- CMCopyProfileDescriptionString(genericProfile, &genericProfileName);
-
- _GTMDevLog(@"Temporarily changing your system color profile from \"%@\" to \"%@\".",
- previousProfileName, genericProfileName);
- _GTMDevLog(@"This allows the pixel-based unit-tests to have consistent color "
- "values across all machines.");
- _GTMDevLog(@"The colors on your screen will change for the duration of the testing.");
-
-
- if ((error = CMSetProfileByAVID((UInt32)displayID, genericProfile))) {
- // COV_NF_START
- // No way to force this case in a unittest.
- _GTMDevLog(@"Failed to set color profile to \"%@\"! Many unit tests will fail as "
- "a result. (Error: %li)", genericProfileName, (long)error);
- // COV_NF_END
- } else {
- gGTMCurrentColorProfile = previousProfile;
- atexit(GTMRestoreColorProfile);
- // WebKit DRT and Chrome TestShell both use this trick. If the test is
- // already crashing, might as well try restoring the color profile, and if
- // it fails, it is no worse than crashing without having tried.
- signal(SIGILL, GTMHandleCrashSignal);
- signal(SIGTRAP, GTMHandleCrashSignal);
- signal(SIGEMT, GTMHandleCrashSignal);
- signal(SIGFPE, GTMHandleCrashSignal);
- signal(SIGBUS, GTMHandleCrashSignal);
- signal(SIGSEGV, GTMHandleCrashSignal);
- signal(SIGSYS, GTMHandleCrashSignal);
- signal(SIGPIPE, GTMHandleCrashSignal);
- signal(SIGXCPU, GTMHandleCrashSignal);
- signal(SIGXFSZ, GTMHandleCrashSignal);
- }
- CFRelease(previousProfileName);
- CFRelease(genericProfileName);
-}
-
// Returns a virtual key code for a given charCode. Handles all of the
// NS*FunctionKeys as well.
static CGKeyCode GTMKeyCodeForCharCode(CGCharCode charCode) {
diff --git a/UnitTesting/GTMCALayer+UnitTesting.h b/UnitTesting/GTMCALayer+UnitTesting.h
deleted file mode 100644
index b757ba9..0000000
--- a/UnitTesting/GTMCALayer+UnitTesting.h
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// GTMCALayer+UnitTesting.h
-//
-// Code for making unit testing of graphics/UI easier. Generally you
-// will only want to look at the macros:
-// GTMAssertDrawingEqualToFile
-// GTMAssertViewRepEqualToFile
-// and the protocol GTMUnitTestCALayerDrawer. When using these routines
-// make sure you are using device colors and not calibrated/generic colors
-// or else your test graphics WILL NOT match across devices/graphics cards.
-//
-// Copyright 2006-2008 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 <QuartzCore/QuartzCore.h>
-#import "GTMNSObject+UnitTesting.h"
-
-// Category for making unit testing of graphics/UI easier.
-
-// Allows you to take a state of a view. Supports both image and state.
-// See GTMNSObject+UnitTesting.h for details.
-@interface CALayer (GTMUnitTestingAdditions) <GTMUnitTestingImaging>
-// Returns whether gtm_unitTestEncodeState should recurse into sublayers
-//
-// Returns:
-// should gtm_unitTestEncodeState pick up sublayer state.
-- (BOOL)gtm_shouldEncodeStateForSublayers;
-@end
-
-@interface NSObject (GTMCALayerUnitTestingDelegateMethods)
-// Delegate method that allows a delegate for a layer to
-// decide whether we should recurse
-- (BOOL)gtm_shouldEncodeStateForSublayersOfLayer:(CALayer*)layer;
-@end
diff --git a/UnitTesting/GTMCALayer+UnitTesting.m b/UnitTesting/GTMCALayer+UnitTesting.m
deleted file mode 100644
index 52367e5..0000000
--- a/UnitTesting/GTMCALayer+UnitTesting.m
+++ /dev/null
@@ -1,89 +0,0 @@
-//
-// GTMCALayer+UnitTesting.m
-//
-// Category for making unit testing of graphics/UI easier.
-// Allows you to save a view out to a image file, and compare a view
-// with a previously stored representation to make sure it hasn't changed.
-//
-// Copyright 2006-2008 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 "GTMCALayer+UnitTesting.h"
-
-@implementation CALayer (GTMUnitTestingAdditions)
-
-// Returns an image containing a representation of the object
-// suitable for use in comparing against a master image.
-// NB this means that all colors should be from "NSDevice" color space
-// Does all of it's drawing with smoothfonts and antialiasing off
-// to avoid issues with font smoothing settings and antialias differences
-// between ppc and x86.
-//
-// Returns:
-// an image of the object
-- (CGImageRef)gtm_unitTestImage {
- CGRect bounds = [self bounds];
- CGSize size = CGSizeMake(CGRectGetWidth(bounds), CGRectGetHeight(bounds));
- CGContextRef context = GTMCreateUnitTestBitmapContextOfSizeWithData(size,
- NULL);
- _GTMDevAssert(context, @"Couldn't create context");
-
- // iPhone renders are flipped
- CGAffineTransform transform = CGAffineTransformMakeTranslation(0, size.height);
- transform = CGAffineTransformScale(transform, 1.0, -1.0);
- CGContextConcatCTM(context, transform);
-
- [self renderInContext:context];
- CGImageRef image = CGBitmapContextCreateImage(context);
- CFRelease(context);
- return (CGImageRef)GTMCFAutorelease(image);
-}
-
-// Encodes the state of an object in a manner suitable for comparing
-// against a master state file so we can determine whether the
-// object is in a suitable state.
-//
-// Arguments:
-// inCoder - the coder to encode our state into
-- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder {
- [super gtm_unitTestEncodeState:inCoder];
- [inCoder encodeBool:[self isHidden] forKey:@"LayerIsHidden"];
- [inCoder encodeBool:[self isDoubleSided] forKey:@"LayerIsDoublesided"];
- [inCoder encodeBool:[self isOpaque] forKey:@"LayerIsOpaque"];
- [inCoder encodeFloat:[self opacity] forKey:@"LayerOpacity"];
- // TODO: There is a ton more we can add here. What are we interested in?
- if ([self gtm_shouldEncodeStateForSublayers]) {
- int i = 0;
- for (CALayer *subLayer in [self sublayers]) {
- [inCoder encodeObject:subLayer
- forKey:[NSString stringWithFormat:@"CALayerSubLayer %d", i]];
- i = i + 1;
- }
- }
-}
-
-// Returns whether gtm_unitTestEncodeState should recurse into sublayers
-//
-// Returns:
-// should gtm_unitTestEncodeState pick up sublayer state.
-- (BOOL)gtm_shouldEncodeStateForSublayers {
- BOOL value = YES;
- if([self.delegate respondsToSelector:@selector(gtm_shouldEncodeStateForSublayersOfLayer:)]) {
- value = [self.delegate gtm_shouldEncodeStateForSublayersOfLayer:self];
- }
- return value;
-}
-
-@end
diff --git a/UnitTesting/GTMDevLogUnitTestingBridge.m b/UnitTesting/GTMDevLogUnitTestingBridge.m
deleted file mode 100644
index c57893b..0000000
--- a/UnitTesting/GTMDevLogUnitTestingBridge.m
+++ /dev/null
@@ -1,44 +0,0 @@
-//
-// GTMDevLogUnitTestingBridge.m
-//
-// Copyright 2008 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.
-//
-
-#include "GTMUnitTestDevLog.h"
-
-//
-// NOTE: Odds are this file should not be included in your project. It is
-// only needed for some enhanced unit testing.
-//
-// By adding:
-// #define _GTMDevLog _GTMUnitTestDevLog
-// to your prefix header (like the GTM Framework does), this function then
-// works to forward logging messages to the GTMUnitTestDevLog class to
-// allow logging validation during unittest, otherwise the messages go to
-// NSLog like normal.
-//
-// See GTMUnitTestDevLog.h for more information on checking logs in unittests.
-//
-void _GTMUnitTestDevLog(NSString *format, ...) {
- Class devLogClass = NSClassFromString(@"GTMUnitTestDevLog");
- va_list argList;
- va_start(argList, format);
- if (devLogClass) {
- [devLogClass log:format args:argList];
- } else {
- NSLogv(format, argList); // COV_NF_LINE the class is in all our unittest setups
- }
- va_end(argList);
-}
diff --git a/UnitTesting/GTMIPhoneSecurityLibraryTest.m b/UnitTesting/GTMIPhoneSecurityLibraryTest.m
deleted file mode 100644
index f6fd37a..0000000
--- a/UnitTesting/GTMIPhoneSecurityLibraryTest.m
+++ /dev/null
@@ -1,75 +0,0 @@
-//
-// GTMIPhoneSecurityLibraryTest.m
-//
-// Copyright 2012 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 "GTMSenTestCase.h"
-
-// Tests that using the keychain library within unit tests works correctly.
-@interface GTMIPhoneSecurityLibraryTest : GTMTestCase
-@end
-
-@implementation GTMIPhoneSecurityLibraryTest
-
-static NSString * const kAccount = @"GTMTestingSecurityAccount";
-static NSString * const kService = @"GTMTestingSecurityService";
-static NSString * const kPassword = @"GTMTestingSecurityPassword";
-
-- (NSMutableDictionary *)keychainQueryItem {
- return [NSMutableDictionary dictionaryWithObjectsAndKeys:
- (id)kSecClassGenericPassword, (id)kSecClass,
- kAccount, (id)kSecAttrAccount,
- kService, (id)kSecAttrService,
- nil];
-}
-
-- (void)assertCorrectPassword {
- NSMutableDictionary *keychainQueryItem = [self keychainQueryItem];
- [keychainQueryItem setObject:(id)kCFBooleanTrue forKey:(id)kSecReturnData];
- [keychainQueryItem setObject:(id)kSecMatchLimitOne forKey:(id)kSecMatchLimit];
-
- CFDataRef result = NULL;
- OSStatus status = SecItemCopyMatching((CFDictionaryRef)keychainQueryItem,
- (CFTypeRef *)&result);
- STAssertEquals(status,
- (OSStatus)noErr,
- @"Error retrieving password from keychain");
- STAssertNotNULL(result, @"No password found");
- NSString *password =
- [[[NSString alloc] initWithData:(NSData *)result
- encoding:NSUTF8StringEncoding] autorelease];
- STAssertEqualStrings(kPassword, password, @"Unexpected password found");
- CFRelease(result);
-}
-
-- (void)testSecurityCalls {
- NSMutableDictionary *passwordItem = [self keychainQueryItem];
- NSData *passwordData = [kPassword dataUsingEncoding:NSUTF8StringEncoding];
- [passwordItem setObject:passwordData forKey:(id)kSecValueData];
-
- OSStatus result = SecItemAdd((CFDictionaryRef)passwordItem, NULL);
- STAssertTrue(result == noErr || result == errSecDuplicateItem,
- @"Unexpected result code: %lu",
- (unsigned long)result);
- [self assertCorrectPassword];
-
- // Test that accessing the keychain will continue to work after a delay.
- NSDate *sleepUntil = [NSDate dateWithTimeIntervalSinceNow:30];
- [[NSRunLoop mainRunLoop] runUntilDate:sleepUntil];
- [self assertCorrectPassword];
-}
-
-@end
diff --git a/UnitTesting/GTMIPhoneUnitTestDelegate.m b/UnitTesting/GTMIPhoneUnitTestDelegate.m
index affcc3e..a112a99 100644
--- a/UnitTesting/GTMIPhoneUnitTestDelegate.m
+++ b/UnitTesting/GTMIPhoneUnitTestDelegate.m
@@ -179,7 +179,7 @@ static int ClassSort(const void *a, const void *b) {
fputs([fixtureStartString UTF8String], stderr);
fflush(stderr);
NSInvocation *invocation;
- GTM_FOREACH_OBJECT(invocation, invocations) {
+ for (invocation in invocations) {
GTMTestCase *testCase
= [[currClass alloc] initWithInvocation:invocation];
BOOL failed = NO;
diff --git a/UnitTesting/GTMIPhoneUnitTestMain.m b/UnitTesting/GTMIPhoneUnitTestMain.m
index 6bfc711..0a504b7 100644
--- a/UnitTesting/GTMIPhoneUnitTestMain.m
+++ b/UnitTesting/GTMIPhoneUnitTestMain.m
@@ -22,6 +22,30 @@
#endif
#import <UIKit/UIKit.h>
+#if GTM_ENABLE_TCCSERVICE_ACCESS
+
+// Enable access to AddressBook, Calendar and Photos
+// https://groups.google.com/forum/#!topic/kif-framework/xayP4VVBPyg
+
+__asm(".section __TEXT,__entitlements");
+__asm(".ascii \""
+ "<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\n"
+ "<!DOCTYPE plist PUBLIC \\\"-//Apple//DTD PLIST 1.0//EN\\\" "
+ "\\\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\\\">"
+ "<plist version=\\\"1.0\\\">"
+ "<dict>"
+ "<key>com.apple.private.tcc.allow</key>"
+ "<array>"
+ "<string>kTCCServiceAddressBook</string>"
+ "<string>kTCCServiceCalendar</string>"
+ "<string>kTCCServicePhotos</string>"
+ "</array>"
+ "</dict>"
+ "</plist>"
+ "\"");
+
+#endif // GTM_ENABLE_TCCSERVICE_ACCESS
+
// Creates an application that runs all tests from classes extending
// SenTestCase, outputs results and test run time, and terminates right
// afterwards.
@@ -32,8 +56,8 @@ int main(int argc, char *argv[]) {
#else
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
#endif
-#if GTM_IPHONE_USE_SENTEST
- // Is using SenTest, just create a dummy app that can be used as the
+#if GTM_IPHONE_USE_SENTEST || GTM_USING_XCTEST
+ // Is using SenTest or XCTest, just create a dummy app that can be used as the
// TEST_HOST.
retVal = UIApplicationMain(argc, argv, nil, nil);
#else
diff --git a/UnitTesting/GTMNSObject+BindingUnitTesting.h b/UnitTesting/GTMNSObject+BindingUnitTesting.h
deleted file mode 100644
index feac5b3..0000000
--- a/UnitTesting/GTMNSObject+BindingUnitTesting.h
+++ /dev/null
@@ -1,120 +0,0 @@
-//
-// GTMNSObject+BindingUnitTesting.h
-//
-// Utilities for doing advanced unittesting with object bindings.
-//
-// Copyright 2006-2008 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.
-//
-
-#include <Foundation/Foundation.h>
-
-// Utility functions for GTMTestExposedBindings Macro. Don't use it directly
-// but use the macro below instead
-BOOL GTMDoExposedBindingsFunctionCorrectly(NSObject *object,
- NSArray **errors);
-
-// Tests the setters and getters for exposed bindings
-// For objects that expose bindings, this tests them for you, saving you from
-// having to write a whole pile of set/get test code if you add binding support.
-// You will need to implement valueClassForBinding: for your bindings,
-// and you may possibly want to implement unitTestExposedBindingsToIgnore
-// and unitTestExposedBindingsTestValues. See descriptions of those
-// methods below for details.
-// Implemented as a macro to match the rest of the SenTest macros.
-//
-// Args:
-// a1: The object to be checked.
-// description: A format string as in the printf() function.
-// Can be nil or an empty string but must be present.
-// ...: A variable number of arguments to the format string. Can be absent.
-//
-#define GTMTestExposedBindings(a1, description, ...) \
-do { \
- NSObject *a1Object = (a1); \
- NSArray *errors = nil; \
- BOOL isGood = GTMDoExposedBindingsFunctionCorrectly(a1Object, &errors); \
- if (!isGood) { \
- NSString *failString; \
- GTM_FOREACH_OBJECT(failString, errors) { \
- if (description != nil) { \
- STFail(@"%@: %@", failString, STComposeString(description, ##__VA_ARGS__)); \
- } else { \
- STFail(@"%@", failString); \
- } \
- } \
- } \
-} while(0)
-
-// Utility class for setting up Binding Tests. Basically a pair of a value to
-// set a binding to, followed by the expected return value.
-// See description of gtm_unitTestExposedBindingsTestValues: below
-// for example of usage.
-@interface GTMBindingUnitTestData : NSObject {
- @private
- id valueToSet_;
- id expectedValue_;
-}
-
-+ (id)testWithIdentityValue:(id)value;
-+ (id)testWithValue:(id)value expecting:(id)expecting;
-- (id)initWithValue:(id)value expecting:(id)expecting;
-- (id)valueToSet;
-- (id)expectedValue;
-@end
-
-@interface NSObject (GTMBindingUnitTestingAdditions)
-// Allows you to ignore certain bindings when running GTMTestExposedBindings
-// If you have bindings you want to ignore, add them to the array returned
-// by this method. The standard way to implement this would be:
-// - (NSMutableArray*)unitTestExposedBindingsToIgnore {
-// NSMutableArray *array = [super unitTestExposedBindingsToIgnore];
-// [array addObject:@"bindingToIgnore1"];
-// ...
-// return array;
-// }
-// The NSObject implementation by default will ignore NSFontBoldBinding,
-// NSFontFamilyNameBinding, NSFontItalicBinding, NSFontNameBinding and
-// NSFontSizeBinding if your exposed bindings contains NSFontBinding because
-// the NSFont*Bindings are NOT KVC/KVO compliant.
-- (NSMutableArray*)gtm_unitTestExposedBindingsToIgnore;
-
-// Allows you to set up test values for your different bindings.
-// if you have certain values you want to test against your bindings, add
-// them to the array returned by this method. The array is an array of
-// GTMBindingUnitTestData.
-// The standard way to implement this would be:
-// - (NSMutableArray*)gtm_unitTestExposedBindingsTestValues:(NSString*)binding {
-// NSMutableArray *dict = [super unitTestExposedBindingsTestValues:binding];
-// if ([binding isEqualToString:@"myBinding"]) {
-// MySpecialBindingValueSet *value
-// = [[[MySpecialBindingValueSet alloc] init] autorelease];
-// [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
-// ...
-// else if ([binding isEqualToString:@"myBinding2"]) {
-// ...
-// }
-// return array;
-// }
-// The NSObject implementation handles many of the default bindings, and
-// gives you a reasonable set of test values to start.
-// See the implementation for the current list of bindings, and values that we
-// set for those bindings.
-- (NSMutableArray*)gtm_unitTestExposedBindingsTestValues:(NSString*)binding;
-
-// A special version of isEqualTo to test whether two binding values are equal
-// by default it calls directly to isEqualTo: but can be overridden for special
-// cases (like NSImages) where the standard isEqualTo: isn't sufficient.
-- (BOOL)gtm_unitTestIsEqualTo:(id)value;
-@end
diff --git a/UnitTesting/GTMNSObject+BindingUnitTesting.m b/UnitTesting/GTMNSObject+BindingUnitTesting.m
deleted file mode 100644
index 4b43f58..0000000
--- a/UnitTesting/GTMNSObject+BindingUnitTesting.m
+++ /dev/null
@@ -1,577 +0,0 @@
-//
-// GTMNSObject+BindingUnitTesting.m
-//
-// An informal protocol for doing advanced binding unittesting with objects.
-//
-// Copyright 2006-2008 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 <AppKit/AppKit.h>
-#import "GTMDefines.h"
-#import "GTMNSObject+BindingUnitTesting.h"
-#import "GTMSystemVersion.h"
-
-BOOL GTMDoExposedBindingsFunctionCorrectly(NSObject *object,
- NSArray **errors) {
- NSMutableArray *errorArray = [NSMutableArray array];
- if (errors) {
- *errors = nil;
- }
- NSArray *bindings = [object exposedBindings];
- if ([bindings count]) {
- NSArray *bindingsToIgnore = [object gtm_unitTestExposedBindingsToIgnore];
- NSString *bindingKey;
- GTM_FOREACH_OBJECT(bindingKey, bindings) {
- if (![bindingsToIgnore containsObject:bindingKey]) {
- Class theClass = [object valueClassForBinding:bindingKey];
- if (!theClass) {
- NSString *error
- = [NSString stringWithFormat:@"%@ should have valueClassForBinding '%@'",
- object, bindingKey];
- [errorArray addObject:error];
- continue;
- }
- @try {
- @try {
- [object valueForKey:bindingKey];
- }
- @catch (NSException *e) {
- _GTMDevLog(@"%@ is not key value coding compliant for key %@",
- object, bindingKey);
- continue;
- } // COV_NF_LINE - compiler bug
- NSArray *testValues
- = [object gtm_unitTestExposedBindingsTestValues:bindingKey];
- GTMBindingUnitTestData *testData;
- GTM_FOREACH_OBJECT(testData, testValues) {
- id valueToSet = [testData valueToSet];
- [object setValue:valueToSet forKey:bindingKey];
- id valueReceived = [object valueForKey:bindingKey];
- id desiredValue = [testData expectedValue];
- if (![desiredValue gtm_unitTestIsEqualTo:valueReceived]) {
- NSString *error
- = [NSString stringWithFormat:@"%@ unequal to expected %@ for binding '%@'",
- valueReceived, desiredValue, bindingKey];
- [errorArray addObject:error];
- continue;
- }
- }
- }
- @catch(NSException *e) {
- NSString *error
- = [NSString stringWithFormat:@"%@:%@-> Binding %@",
- [e name], [e reason], bindingKey];
- [errorArray addObject:error];
- } // COV_NF_LINE - compiler bug
- }
- }
- } else {
- NSString *error =
- [NSString stringWithFormat:@"%@ does not have any exposed bindings",
- object];
- [errorArray addObject:error];
- }
- if (errors) {
- *errors = errorArray;
- }
- return [errorArray count] == 0;
-}
-
-@implementation GTMBindingUnitTestData
-+ (id)testWithIdentityValue:(id)value {
- return [self testWithValue:value expecting:value];
-}
-
-+ (id)testWithValue:(id)value expecting:(id)expecting {
- return [[[self alloc] initWithValue:value expecting:expecting] autorelease];
-}
-
-- (id)initWithValue:(id)value expecting:(id)expecting {
- if ((self = [super init])) {
- valueToSet_ = [value retain];
- expectedValue_ = [expecting retain];
- }
- return self;
-}
-
-- (BOOL)isEqual:(id)object {
- BOOL isEqual = [object isMemberOfClass:[self class]];
- if (isEqual) {
- id objValue = [object valueToSet];
- id objExpect = [object expectedValue];
- isEqual = (((valueToSet_ == objValue) || ([valueToSet_ isEqual:objValue]))
- && ((expectedValue_ == objExpect) || ([expectedValue_ isEqual:objExpect])));
- }
- return isEqual;
-}
-
-- (NSUInteger)hash {
- return [valueToSet_ hash] + [expectedValue_ hash];
-}
-
-- (void)dealloc {
- [valueToSet_ release];
- [expectedValue_ release];
- [super dealloc];
-}
-
-- (id)valueToSet {
- return valueToSet_;
-}
-
-- (id)expectedValue {
- return expectedValue_;
-}
-@end
-
-@implementation NSObject (GTMBindingUnitTestingAdditions)
-
-- (NSMutableArray*)gtm_unitTestExposedBindingsToIgnore {
- NSMutableArray *array = [NSMutableArray arrayWithObject:NSValueBinding];
- if ([[self exposedBindings] containsObject:NSFontBinding]) {
- NSString *fontBindings[] = { NSFontBoldBinding, NSFontFamilyNameBinding,
- NSFontItalicBinding, NSFontNameBinding, NSFontSizeBinding };
- for (size_t i = 0; i < sizeof(fontBindings) / sizeof(NSString*); ++i) {
- [array addObject:fontBindings[i]];
- }
- }
- return array;
-}
-
-- (NSMutableArray*)gtm_unitTestExposedBindingsTestValues:(NSString*)binding {
-
- NSMutableArray *array = [NSMutableArray array];
- id value = [self valueForKey:binding];
-
- // Always test identity if possible
- if (value) {
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- }
-
- // Now some default test values for a variety of bindings to make
- // sure that we cover all the bases and save other people writing lots of
- // duplicate test code.
-
- // If anybody can think of more to add, please go nuts.
- if ([binding isEqualToString:NSAlignmentBinding]) {
- value = [NSNumber numberWithInt:NSLeftTextAlignment];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- value = [NSNumber numberWithInt:NSRightTextAlignment];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- value = [NSNumber numberWithInt:NSCenterTextAlignment];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- value = [NSNumber numberWithInt:NSJustifiedTextAlignment];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- value = [NSNumber numberWithInt:NSNaturalTextAlignment];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- NSNumber *valueToSet = [NSNumber numberWithInt:500];
- [array addObject:[GTMBindingUnitTestData testWithValue:valueToSet
- expecting:value]];
- valueToSet = [NSNumber numberWithInt:-1];
- [array addObject:[GTMBindingUnitTestData testWithValue:valueToSet
- expecting:value]];
- } else if ([binding isEqualToString:NSAlternateImageBinding] ||
- [binding isEqualToString:NSImageBinding] ||
- [binding isEqualToString:NSMixedStateImageBinding] ||
- [binding isEqualToString:NSOffStateImageBinding] ||
- [binding isEqualToString:NSOnStateImageBinding]) {
- // This handles all image bindings
- value = [NSImage imageNamed:@"NSApplicationIcon"];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- } else if ([binding isEqualToString:NSAnimateBinding] ||
- [binding isEqualToString:NSDocumentEditedBinding] ||
- [binding isEqualToString:NSEditableBinding] ||
- [binding isEqualToString:NSEnabledBinding] ||
- [binding isEqualToString:NSHiddenBinding] ||
- [binding isEqualToString:NSVisibleBinding] ||
- [binding isEqualToString:NSIsIndeterminateBinding] ||
- // NSTranparentBinding 10.5 only
- [binding isEqualToString:@"transparent"]) {
- // This handles all bool value bindings
- value = [NSNumber numberWithBool:YES];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- value = [NSNumber numberWithBool:NO];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- } else if ([binding isEqualToString:NSAlternateTitleBinding] ||
- [binding isEqualToString:NSHeaderTitleBinding] ||
- [binding isEqualToString:NSLabelBinding] ||
- [binding isEqualToString:NSTitleBinding] ||
- [binding isEqualToString:NSToolTipBinding]) {
- // This handles all string value bindings
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:@"happy"]];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:@""]];
-
- // Test some non-ascii roman text
- char a_not_alpha[] = { 'A', 0xE2, 0x89, 0xA2, 0xCE, 0x91, '.', 0x00 };
- value = [NSString stringWithUTF8String:a_not_alpha];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- // Test some korean
- char hangugo[] = { 0xED, 0x95, 0x9C, 0xEA, 0xB5,
- 0xAD, 0xEC, 0x96, 0xB4, 0x00 };
- value = [NSString stringWithUTF8String:hangugo];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- // Test some japanese
- char nihongo[] = { 0xE6, 0x97, 0xA5, 0xE6, 0x9C,
- 0xAC, 0xE8, 0xAA, 0x9E, 0x00 };
- value = [NSString stringWithUTF8String:nihongo];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- // Test some arabic
- char arabic[] = { 0xd9, 0x83, 0xd8, 0xa7, 0xd9, 0x83, 0xd8, 0xa7, 0x00 };
- value = [NSString stringWithUTF8String:arabic];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- } else if ([binding isEqualToString:NSRepresentedFilenameBinding]) {
- // This handles all path bindings
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:@"/happy"]];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:@"/"]];
-
- // Test some non-ascii roman text
- char a_not_alpha[] = { '/', 'A', 0xE2, 0x89, 0xA2, 0xCE, 0x91, '.', 0x00 };
- value = [NSString stringWithUTF8String:a_not_alpha];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- // Test some korean
- char hangugo[] = { '/', 0xED, 0x95, 0x9C, 0xEA, 0xB5,
- 0xAD, 0xEC, 0x96, 0xB4, 0x00 };
- value = [NSString stringWithUTF8String:hangugo];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- // Test some japanese
- char nihongo[] = { '/', 0xE6, 0x97, 0xA5, 0xE6, 0x9C,
- 0xAC, 0xE8, 0xAA, 0x9E, 0x00 };
- value = [NSString stringWithUTF8String:nihongo];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- // Test some arabic
- char arabic[] = { '/', 0xd9, 0x83, 0xd8, 0xa7, 0xd9, 0x83, 0xd8, 0xa7, 0x00 };
- value = [NSString stringWithUTF8String:arabic];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- } else if ([binding isEqualToString:NSMaximumRecentsBinding]) {
- value = [NSNumber numberWithInt:0];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- value = [NSNumber numberWithInt:-1];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- value = [NSNumber numberWithInt:INT16_MAX];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- value = [NSNumber numberWithInt:INT16_MIN];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- } else if ([binding isEqualToString:NSRowHeightBinding]) {
- NSNumber *valueOne = [NSNumber numberWithInt:1];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:valueOne]];
- value = [NSNumber numberWithInt:0];
- id value2 = [NSNumber numberWithInt:INT16_MIN];
- // Row height no longer accepts <= 0 values on SnowLeopard
- // which is a good thing.
- if ([GTMSystemVersion isSnowLeopardOrGreater]) {
- [array addObject:[GTMBindingUnitTestData testWithValue:value
- expecting:valueOne]];
-
- [array addObject:[GTMBindingUnitTestData testWithValue:value2
- expecting:valueOne]];
- } else {
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value2]];
- }
- value = [NSNumber numberWithInt:INT16_MAX];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- } else if ([binding isEqualToString:NSMaxValueBinding] ||
- [binding isEqualToString:NSMaxWidthBinding] ||
- [binding isEqualToString:NSMinValueBinding] ||
- [binding isEqualToString:NSMinWidthBinding] ||
- [binding isEqualToString:NSContentWidthBinding] ||
- [binding isEqualToString:NSContentHeightBinding] ||
- [binding isEqualToString:NSWidthBinding] ||
- [binding isEqualToString:NSAnimationDelayBinding]) {
- // NSAnimationDelay is deprecated on SnowLeopard. We continue to test it
- // to make sure it doesn't get broken.
-
- // This handles all float value bindings
- value = [NSNumber numberWithFloat:0];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- value = [NSNumber numberWithFloat:FLT_MAX];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- value = [NSNumber numberWithFloat:-FLT_MAX];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- value = [NSNumber numberWithFloat:FLT_MIN];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- value = [NSNumber numberWithFloat:-FLT_MIN];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- value = [NSNumber numberWithFloat:FLT_EPSILON];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- value = [NSNumber numberWithFloat:-FLT_EPSILON];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- } else if ([binding isEqualToString:NSTextColorBinding]) {
- // This handles all color value bindings
- value = [NSColor colorWithCalibratedWhite:1.0 alpha:1.0];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- value = [NSColor colorWithCalibratedWhite:1.0 alpha:0.0];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- value = [NSColor colorWithCalibratedWhite:1.0 alpha:0.5];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- value = [NSColor colorWithCalibratedRed:0.5 green:0.5 blue:0.5 alpha:0.5];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- value = [NSColor colorWithDeviceCyan:0.25 magenta:0.25 yellow:0.25
- black:0.25 alpha:0.25];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- } else if ([binding isEqualToString:NSFontBinding]) {
- // This handles all font value bindings
- value = [NSFont boldSystemFontOfSize:[NSFont systemFontSize]];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- value = [NSFont toolTipsFontOfSize:[NSFont smallSystemFontSize]];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- value = [NSFont labelFontOfSize:144.0];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- } else if ([binding isEqualToString:NSRecentSearchesBinding] ||
- [binding isEqualToString:NSSortDescriptorsBinding]) {
- // This handles all array value bindings
- value = [NSArray array];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- } else if ([binding isEqualToString:NSTargetBinding]) {
- value = [NSNull null];
- [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]];
- } else {
- _GTMDevLog(@"Skipped Binding: %@ for %@", binding, self); // COV_NF_LINE
- }
- return array;
-}
-
-- (BOOL)gtm_unitTestIsEqualTo:(id)value {
- return [self isEqualTo:value];
-}
-
-@end
-
-#pragma mark -
-#pragma mark All the special AppKit Bindings issues below
-
-@interface NSImage (GTMBindingUnitTestingAdditions)
-@end
-
-@implementation NSImage (GTMBindingUnitTestingAdditions)
-- (BOOL)gtm_unitTestIsEqualTo:(id)value {
- // NSImage just does pointer equality in the default isEqualTo implementation
- // we need something a little more heavy duty that actually compares the
- // images internally.
- return [[self TIFFRepresentation] isEqualTo:[value TIFFRepresentation]];
-}
-@end
-
-@interface NSScroller (GTMBindingUnitTestingAdditions)
-@end
-
-@implementation NSScroller (GTMBindingUnitTestingAdditions)
-- (NSMutableArray*)gtm_unitTestExposedBindingsToIgnore {
- NSMutableArray *array = [super gtm_unitTestExposedBindingsToIgnore];
- SInt32 major, minor, bugFix;
- [GTMSystemVersion getMajor:&major minor:&minor bugFix:&bugFix];
- if (major <= 10 && minor <= 5 && bugFix <= 5) {
- // rdar://5849154 - NSScroller exposes binding with no value
- // class for NSValueBinding
- [array addObject:NSValueBinding];
- }
- if (major <= 10 && minor <= 6) {
- // Broken on SnowLeopard and below
- // rdar://5849236 - NSScroller exposes binding for NSFontBinding
- [array addObject:NSFontBinding];
- }
- return array;
-}
-@end
-
-@interface NSTextField (GTMBindingUnitTestingAdditions)
-@end
-
-@implementation NSTextField (GTMBindingUnitTestingAdditions)
-
-- (NSMutableArray*)gtm_unitTestExposedBindingsToIgnore {
- NSMutableArray *array = [super gtm_unitTestExposedBindingsToIgnore];
- // Not KVC Compliant
- for (int i = 0; i < 10; i++) {
- [array addObject:[NSString stringWithFormat:@"displayPatternValue%d", i]];
- }
- return array;
-}
-
-- (NSMutableArray *)gtm_unitTestExposedBindingsTestValues:(NSString*)binding {
- NSMutableArray *array = [super gtm_unitTestExposedBindingsTestValues:binding];
- if ([binding isEqualToString:NSAlignmentBinding]) {
- SInt32 major, minor, bugFix;
- [GTMSystemVersion getMajor:&major minor:&minor bugFix:&bugFix];
- if (major <= 10 && minor <= 6) {
- // rdar://5851487 - If NSAlignmentBinding for a NSTextField is set to -1
- // and then got it returns 7
- NSNumber *textAlignment = [NSNumber numberWithInt:NSNaturalTextAlignment];
- GTMBindingUnitTestData *dataToRemove =
- [GTMBindingUnitTestData testWithValue:[NSNumber numberWithInt:-1]
- expecting:textAlignment];
- [array removeObject:dataToRemove];
- GTMBindingUnitTestData *dataToAdd =
- [GTMBindingUnitTestData testWithValue:[NSNumber numberWithInt:-1]
- expecting:[NSNumber numberWithInt:7]];
- [array addObject:dataToAdd];
- }
- }
- return array;
-}
-@end
-
-@interface NSSearchField (GTMBindingUnitTestingAdditions)
-@end
-
-@implementation NSSearchField (GTMBindingUnitTestingAdditions)
-
-- (NSMutableArray*)gtm_unitTestExposedBindingsToIgnore {
- NSMutableArray *array = [super gtm_unitTestExposedBindingsToIgnore];
- SInt32 major, minor, bugFix;
- [GTMSystemVersion getMajor:&major minor:&minor bugFix:&bugFix];
- if (major <= 10 && minor <= 6) {
- // rdar://5851491 - Setting NSAlignmentBinding of search field to
- // NSCenterTextAlignment broken
- // Broken on 10.6 and below.
- [array addObject:NSAlignmentBinding];
- }
- // Not KVC Compliant
- [array addObject:NSPredicateBinding];
- return array;
-}
-
-@end
-
-@interface NSWindow (GTMBindingUnitTestingAdditions)
-@end
-
-@implementation NSWindow (GTMBindingUnitTestingAdditions)
-
-- (NSMutableArray*)gtm_unitTestExposedBindingsToIgnore {
- NSMutableArray *array = [super gtm_unitTestExposedBindingsToIgnore];
- // Not KVC Compliant
- [array addObject:NSContentWidthBinding];
- [array addObject:NSContentHeightBinding];
- for (int i = 0; i < 10; i++) {
- [array addObject:[NSString stringWithFormat:@"displayPatternTitle%d", i]];
- }
- return array;
-}
-
-@end
-
-@interface NSBox (GTMBindingUnitTestingAdditions)
-@end
-
-@implementation NSBox (GTMBindingUnitTestingAdditions)
-
-- (NSMutableArray*)gtm_unitTestExposedBindingsToIgnore {
- NSMutableArray *array = [super gtm_unitTestExposedBindingsToIgnore];
- // Not KVC Compliant
- for (int i = 0; i < 10; i++) {
- [array addObject:[NSString stringWithFormat:@"displayPatternTitle%d", i]];
- }
- return array;
-}
-
-@end
-
-@interface NSTableView (GTMBindingUnitTestingAdditions)
-@end
-
-@implementation NSTableView (GTMBindingUnitTestingAdditions)
-
-- (NSMutableArray*)gtm_unitTestExposedBindingsToIgnore {
- NSMutableArray *array = [super gtm_unitTestExposedBindingsToIgnore];
- SInt32 major, minor, bugFix;
- [GTMSystemVersion getMajor:&major minor:&minor bugFix:&bugFix];
- if (major <= 10 && minor <= 6) {
- // rdar://6288332 - NSTableView does not respond to NSFontBinding
- // Broken on 10.5 and SnowLeopard
- [array addObject:NSFontBinding];
- }
- // Not KVC Compliant
- [array addObject:NSContentBinding];
- [array addObject:NSDoubleClickTargetBinding];
- [array addObject:NSDoubleClickArgumentBinding];
- [array addObject:NSSelectionIndexesBinding];
- return array;
-}
-
-@end
-
-@interface NSTextView (GTMBindingUnitTestingAdditions)
-@end
-
-@implementation NSTextView (GTMBindingUnitTestingAdditions)
-
-- (NSMutableArray*)gtm_unitTestExposedBindingsToIgnore {
- NSMutableArray *array = [super gtm_unitTestExposedBindingsToIgnore];
- SInt32 major, minor, bugFix;
- [GTMSystemVersion getMajor:&major minor:&minor bugFix:&bugFix];
- if (major <= 10 && minor <= 6) {
- //rdar://5849335 - NSTextView only partially KVC compliant for key
- // NSAttributedStringBinding
- [array addObject:NSAttributedStringBinding];
- }
- // Not KVC Compliant
- [array addObject:NSDataBinding];
- [array addObject:NSValueURLBinding];
- [array addObject:NSValuePathBinding];
- return array;
-}
-
-@end
-
-@interface NSTabView (GTMBindingUnitTestingAdditions)
-@end
-
-@implementation NSTabView (GTMBindingUnitTestingAdditions)
-
-- (NSMutableArray*)gtm_unitTestExposedBindingsToIgnore {
- NSMutableArray *array = [super gtm_unitTestExposedBindingsToIgnore];
- SInt32 major, minor, bugFix;
- [GTMSystemVersion getMajor:&major minor:&minor bugFix:&bugFix];
- if (major <= 10 && minor <= 6) {
- // rdar://5849248 - NSTabView exposes binding with no value class
- // for NSSelectedIdentifierBinding
- [array addObject:NSSelectedIdentifierBinding];
- }
- // Not KVC Compliant
- [array addObject:NSSelectedIndexBinding];
- [array addObject:NSSelectedLabelBinding];
- return array;
-}
-
-@end
-
-@interface NSButton (GTMBindingUnitTestingAdditions)
-@end
-
-@implementation NSButton (GTMBindingUnitTestingAdditions)
-
-- (NSMutableArray*)gtm_unitTestExposedBindingsToIgnore {
- NSMutableArray *array = [super gtm_unitTestExposedBindingsToIgnore];
- // Not KVC Compliant
- [array addObject:NSArgumentBinding];
- return array;
-}
-
-@end
-
-@interface NSProgressIndicator (GTMBindingUnitTestingAdditions)
-@end
-
-@implementation NSProgressIndicator (GTMBindingUnitTestingAdditions)
-
-- (NSMutableArray*)gtm_unitTestExposedBindingsToIgnore {
- NSMutableArray *array = [super gtm_unitTestExposedBindingsToIgnore];
- // Not KVC Compliant
- [array addObject:NSAnimateBinding];
- return array;
-}
-
-@end
diff --git a/UnitTesting/GTMNSObject+UnitTesting.h b/UnitTesting/GTMNSObject+UnitTesting.h
deleted file mode 100644
index e98828a..0000000
--- a/UnitTesting/GTMNSObject+UnitTesting.h
+++ /dev/null
@@ -1,430 +0,0 @@
-//
-// GTMNSObject+UnitTesting.h
-//
-// Utilities for doing advanced unittesting with objects.
-//
-// Copyright 2006-2008 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 "GTMDefines.h"
-#import <Foundation/Foundation.h>
-
-#if GTM_MACOS_SDK
-#import <ApplicationServices/ApplicationServices.h>
-#elif GTM_IPHONE_SDK
-#import <CoreGraphics/CoreGraphics.h>
-#endif
-
-#import "GTMSenTestCase.h"
-
-// NOTE: for "arch" in the file names on iOS, it is not CPU (armv6, armv7), but
-// instead is "iPhone" or "iPad" for the device form factor.
-
-// Utility functions for GTMAssert* Macros. Don't use them directly
-// but use the macros below instead
-BOOL GTMIsObjectImageEqualToImageNamed(id object,
- NSString *filename,
- NSString **error);
-BOOL GTMIsObjectStateEqualToStateNamed(id object,
- NSString *filename,
- NSString **error);
-
-// Fails when image of |a1| does not equal image in image file named |a2|
-//
-// Generates a failure when the unittest image of |a1| is not equal to the
-// image stored in the image file named |a2|, or |a2| does not exist in the
-// executable code's bundle.
-// If |a2| does not exist in the executable code's bundle, we save a image
-// representation of |a1| in the save directory with name |a2|. This can then
-// be included in the bundle as the master to test against.
-// If |a2| != |a1|, we save a image representation of |a1| in the save
-// directory named |a2|_Failed and a file named |a2|_Failed_Diff showing the
-// diff in red so that we can see what has changed.
-// See pathForImageNamed to see how name is searched for.
-// The save directory is specified by +gtm_setUnitTestSaveToDirectory, and is
-// the desktop by default.
-// Implemented as a macro to match the rest of the SenTest macros.
-//
-// Args:
-// a1: The object to be checked. Must implement the -createUnitTestImage method.
-// a2: The name of the image file to check against.
-// Do not include the extension
-// description: A format string as in the printf() function.
-// Can be nil or an empty string but must be present.
-// ...: A variable number of arguments to the format string. Can be absent.
-//
-#define GTMAssertObjectImageEqualToImageNamed(a1, a2, description, ...) \
-do { \
- id a1Object = (a1); \
- NSString* a2String = (a2); \
- NSString *failString = nil; \
- BOOL isGood = GTMIsObjectImageEqualToImageNamed(a1Object, a2String, &failString); \
- if (!isGood) { \
- if (description != nil) { \
- STFail(@"%@: %@", failString, STComposeString(description, ##__VA_ARGS__)); \
- } else { \
- STFail(@"%@", failString); \
- } \
- } \
-} while(0)
-
-// Fails when state of |a1| does not equal state in file |a2|
-//
-// Generates a failure when the unittest state of |a1| is not equal to the
-// state stored in the state file named |a2|, or |a2| does not exist in the
-// executable code's bundle.
-// If |a2| does not exist in the executable code's bundle, we save a state
-// representation of |a1| in the save directiry with name |a2|. This can then
-// be included in the bundle as the master to test against.
-// If |a2| != |a1|, we save a state representation of |a1| in the save
-// directory with name |a2|_Failed so that we can compare the two files to see
-// what has changed.
-// The save directory is specified by +gtm_setUnitTestSaveToDirectory, and is
-// the desktop by default.
-// Implemented as a macro to match the rest of the SenTest macros.
-//
-// Args:
-// a1: The object to be checked. Must implement the -createUnitTestImage method.
-// a2: The name of the state file to check against.
-// Do not include the extension
-// description: A format string as in the printf() function.
-// Can be nil or an empty string but must be present.
-// ...: A variable number of arguments to the format string. Can be absent.
-//
-#define GTMAssertObjectStateEqualToStateNamed(a1, a2, description, ...) \
-do { \
- id a1Object = (a1); \
- NSString* a2String = (a2); \
- NSString *failString = nil; \
- BOOL isGood = GTMIsObjectStateEqualToStateNamed(a1Object, a2String, &failString); \
- if (!isGood) { \
- if (description != nil) { \
- STFail(@"%@: %@", failString, STComposeString(description, ##__VA_ARGS__)); \
- } else { \
- STFail(@"%@", failString); \
- } \
- } \
-} while(0);
-
-// test both GTMAssertObjectImageEqualToImageNamed and GTMAssertObjectStateEqualToStateNamed
-//
-// Combines the above two macros into a single ubermacro for comparing
-// both state and image. When only the best will do...
-#define GTMAssertObjectEqualToStateAndImageNamed(a1, a2, description, ...) \
-do { \
- GTMAssertObjectImageEqualToImageNamed(a1, a2, description, ##__VA_ARGS__); \
- GTMAssertObjectStateEqualToStateNamed(a1, a2, description, ##__VA_ARGS__); \
-} while (0)
-
-// Create a CGBitmapContextRef appropriate for using in creating a unit test
-// image. If data is non-NULL, returns the buffer that the bitmap is
-// using for it's underlying storage. You must free this buffer using
-// free. If data is NULL, uses it's own internal storage.
-// Defined as a C function instead of an obj-c method because you have to
-// release the CGContextRef that is returned.
-//
-// Returns:
-// an CGContextRef of the object. Caller must release
-
-CGContextRef GTMCreateUnitTestBitmapContextOfSizeWithData(CGSize size,
- unsigned char **data);
-
-// GTMUnitTestingImaging protocol is for objects which need to save their
-// image for using with the unit testing categories
-@protocol GTMUnitTestingImaging
-// Create a CGImageRef containing a representation suitable for use in
-// comparing against a master image.
-//
-// Returns:
-// an CGImageRef of the object.
-- (CGImageRef)gtm_unitTestImage;
-@end
-
-// GTMUnitTestingEncoding protocol is for objects which need to save their
-// "state" for using with the unit testing categories
-@protocol GTMUnitTestingEncoding
-// Encodes the state of an object in a manner suitable for comparing
-// against a master state file so we can determine whether the
-// object is in a suitable state. Encode data in the coder in the same
-// manner that you would encode data in any other Keyed NSCoder subclass.
-//
-// Arguments:
-// inCoder - the coder to encode our state into
-- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder;
-@end
-
-// Category for saving and comparing object state and image for unit tests
-//
-// The GTMUnitTestAdditions category gives object the ability to store their
-// state for use in unittesting in two different manners.
-// 1) Objects can elect to save their "image" that we can compare at
-// runtime to an image file to make sure that the representation hasn't
-// changed. All views and Windows can save their image. In the case of Windows,
-// they are "bluescreened" so that any transparent areas can be compared between
-// machines.
-// 2) Objects can elect to save their "state". State is the attributes that we
-// want to verify when running unit tests. Applications, Windows, Views,
-// Controls and Cells currently return a variety of state information. If you
-// want to customize the state information that a particular object returns, you
-// can do it via the GTMUnitTestingEncodedObjectNotification. Items that have
-// delegates (Applications/Windows) can also have their delegates return state
-// information if appropriate via the unitTestEncoderDidEncode:inCoder: delegate
-// method.
-// To compare state/image in your unit tests, you can use the three macros above
-// GTMAssertObjectStateEqualToStateNamed, GTMAssertObjectImageEqualToImageNamed and
-// GTMAssertObjectEqualToStateAndImageNamed.
-@interface NSObject (GTMUnitTestingAdditions) <GTMUnitTestingEncoding>
-// Allows you to control where the unit test utilities save any files
-// (image or state) that they create on your behalf. By default they
-// will save to the desktop.
-+ (void)gtm_setUnitTestSaveToDirectory:(NSString*)path;
-+ (NSString *)gtm_getUnitTestSaveToDirectory;
-
-// Checks to see that system settings are valid for doing an image comparison.
-// Most of these are set by our unit test app. See the unit test app main.m
-// for details.
-//
-// Returns:
-// YES if we can do image comparisons for this object type.
-- (BOOL)gtm_areSystemSettingsValidForDoingImage;
-
-// Return the type of image to work with. Only valid types on the iPhone
-// are kUTTypeJPEG and kUTTypePNG. MacOS supports several more.
-- (CFStringRef)gtm_imageUTI;
-
-// Return the extension to be used for saving unittest images
-//
-// Returns
-// An extension (e.g. "png")
-- (NSString*)gtm_imageExtension;
-
-// Return image data in the format expected for gtm_imageExtension
-// So for a "png" extension I would expect "png" data
-//
-// Returns
-// NSData for image
-- (NSData*)gtm_imageDataForImage:(CGImageRef)image;
-
-// Save the unitTestImage to a image file with name
-// |name|.arch.OSVersionMajor.OSVersionMinor.OSVersionBugfix.extension
-// in the save folder (desktop by default)
-//
-// Args:
-// name: The name for the image file you would like saved.
-//
-// Returns:
-// YES if the file was successfully saved.
-//
-- (BOOL)gtm_saveToImageNamed:(NSString*)name;
-
-// Save unitTestImage of |self| to an image file at path |path|.
-// All non-drawn areas will be transparent.
-//
-// Args:
-// name: The name for the image file you would like saved.
-//
-// Returns:
-// YES if the file was successfully saved.
-//
-- (BOOL)gtm_saveToImageAt:(NSString*)path;
-
-// Compares unitTestImage of |self| to the image located at |path|
-//
-// Args:
-// path: the path to the image file you want to compare against.
-// If diff is non-nil, it will contain an auto-released diff of the images.
-//
-// Returns:
-// YES if they are equal, NO is they are not
-// If diff is non-nil, it will contain a diff of the images. Must
-// be released by caller.
-//
-- (BOOL)gtm_compareWithImageAt:(NSString*)path diffImage:(CGImageRef*)diff;
-
-// Find the path for a image by name in your bundle.
-// Searches for the following:
-// "name.CompilerSDK.OSVersionMajor.OSVersionMinor.OSVersionBugFix.arch.extension"
-// "name.CompilerSDK.OSVersionMajor.OSVersionMinor.arch.extension"
-// "name.CompilerSDK.OSVersionMajor.arch.extension"
-// "name.CompilerSDK.arch.extension"
-// "name.CompilerSDK.OSVersionMajor.OSVersionMinor.OSVersionBugFix.extension"
-// "name.CompilerSDK.OSVersionMajor.OSVersionMinor.extension"
-// "name.CompilerSDK.OSVersionMajor.extension"
-// "name.CompilerSDK.extension"
-// "name.OSVersionMajor.OSVersionMinor.OSVersionBugFix.arch.extension"
-// "name.OSVersionMajor.OSVersionMinor.arch.extension"
-// "name.OSVersionMajor.arch.extension"
-// "name.arch.extension"
-// "name.OSVersionMajor.OSVersionMinor.OSVersionBugFix.extension"
-// "name.OSVersionMajor.OSVersionMinor.extension"
-// "name.OSVersionMajor.extension"
-// "name.extension"
-// Do not include the extension on your name.
-//
-// Args:
-// name: The name for the image file you would like to find.
-//
-// Returns:
-// the path if the image exists in your bundle
-// or nil if no image to be found
-//
-- (NSString *)gtm_pathForImageNamed:(NSString*)name;
-
-// Generates a CGImageRef from the image at |path|
-// Args:
-// path: The path to the image.
-//
-// Returns:
-// An autoreleased CGImageRef own, or nil if no image at path
-- (CGImageRef)gtm_imageWithContentsOfFile:(NSString*)path;
-
-// Generates a path for a image in the save directory, which is desktop
-// by default.
-// Path will be:
-// SaveDir/|name|.arch.OSVersionMajor.OSVersionMinor.OSVersionBugfix.extension
-//
-// Args:
-// name: The name for the image file you would like to generate a path for.
-//
-// Returns:
-// the path
-//
-- (NSString *)gtm_saveToPathForImageNamed:(NSString*)name;
-
-// Gives us a representation of unitTestImage of |self|.
-//
-// Returns:
-// a representation if successful
-// nil if failed
-//
-- (NSData *)gtm_imageRepresentation;
-
-// Return the extension to be used for saving unittest states
-//
-// Returns
-// An extension (e.g. "gtmUTState")
-- (NSString*)gtm_stateExtension;
-
-// Save the encoded unit test state to a state file with name
-// |name|.arch.OSVersionMajor.OSVersionMinor.OSVersionBugfix.extension
-// in the save folder (desktop by default)
-//
-// Args:
-// name: The name for the state file you would like saved.
-//
-// Returns:
-// YES if the file was successfully saved.
-//
-- (BOOL)gtm_saveToStateNamed:(NSString*)name;
-
-// Save encoded unit test state of |self| to a state file at path |path|.
-//
-// Args:
-// name: The name for the state file you would like saved.
-//
-// Returns:
-// YES if the file was successfully saved.
-//
-- (BOOL)gtm_saveToStateAt:(NSString*)path;
-
-// Compares encoded unit test state of |self| to the state file located at |path|
-//
-// Args:
-// path: the path to the state file you want to compare against.
-//
-// Returns:
-// YES if they are equal, NO is they are not
-//
-- (BOOL)gtm_compareWithStateAt:(NSString*)path;
-
-
-// Find the path for a state by name in your bundle.
-// Searches for:
-// "name.CompilerSDK.OSVersionMajor.OSVersionMinor.OSVersionBugFix.arch.extension"
-// "name.CompilerSDK.OSVersionMajor.OSVersionMinor.arch.extension"
-// "name.CompilerSDK.OSVersionMajor.arch.extension"
-// "name.CompilerSDK.arch.extension"
-// "name.CompilerSDK.OSVersionMajor.OSVersionMinor.OSVersionBugFix.extension"
-// "name.CompilerSDK.OSVersionMajor.OSVersionMinor.extension"
-// "name.CompilerSDK.OSVersionMajor.extension"
-// "name.CompilerSDK.extension"
-// "name.OSVersionMajor.OSVersionMinor.OSVersionBugFix.arch.extension"
-// "name.OSVersionMajor.OSVersionMinor.arch.extension"
-// "name.OSVersionMajor.arch.extension"
-// "name.arch.extension"
-// "name.OSVersionMajor.OSVersionMinor.OSVersionBugFix.extension"
-// "name.OSVersionMajor.OSVersionMinor.extension"
-// "name.OSVersionMajor.extension"
-// "name.extension"
-// Do not include the extension on your name.
-//
-// Args:
-// name: The name for the state file you would like to find.
-//
-// Returns:
-// the path if the state exists in your bundle
-// or nil if no state to be found
-//
-- (NSString *)gtm_pathForStateNamed:(NSString*)name;
-
-// Generates a path for a state in the save directory, which is desktop
-// by default.
-// Path will be:
-// SaveDir/|name|.arch.OSVersionMajor.OSVersionMinor.OSVersionBugfix.extension
-//
-// Args:
-// name: The name for the state file you would like to generate a path for.
-//
-// Returns:
-// the path
-//
-- (NSString *)gtm_saveToPathForStateNamed:(NSString*)name;
-
-// Gives us the encoded unit test state for |self|
-//
-// Returns:
-// the encoded state if successful
-// nil if failed
-//
-- (NSDictionary *)gtm_stateRepresentation;
-
-// Encodes the state of an object in a manner suitable for comparing
-// against a master state file so we can determine whether the
-// object is in a suitable state. Encode data in the coder in the same
-// manner that you would encode data in any other Keyed NSCoder subclass.
-//
-// Arguments:
-// inCoder - the coder to encode our state into
-- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder;
-@end
-
-// Informal protocol for delegates that wanst to be able to add state info
-// when state info is collected for their "owned" objects
-@interface NSObject (GTMUnitTestingEncodingAdditions)
-// Delegate function for unit test objects that have delegates. Delegates have
-// the option of encoding more data into the coder to store their state for
-// unittest usage.
-- (void)gtm_unitTestEncoderWillEncode:(id)sender inCoder:(NSCoder*)inCoder;
-@end
-
-// Whenever an object is encoded by the unit test encoder, it send out a
-// notification so that objects who want to add data to the encoded objects unit
-// test state can do so. The Coder will be in the userInfo dictionary for the
-// notification under the GTMUnitTestingEncoderKey key.
-GTM_EXTERN NSString *const GTMUnitTestingEncodedObjectNotification;
-
-// Key for finding the encoder in the userInfo dictionary for
-// GTMUnitTestingEncodedObjectNotification notifications.
-GTM_EXTERN NSString *const GTMUnitTestingEncoderKey;
diff --git a/UnitTesting/GTMNSObject+UnitTesting.m b/UnitTesting/GTMNSObject+UnitTesting.m
deleted file mode 100644
index 5b60a6d..0000000
--- a/UnitTesting/GTMNSObject+UnitTesting.m
+++ /dev/null
@@ -1,1047 +0,0 @@
-//
-// GTMNSObject+UnitTesting.m
-//
-// An informal protocol for doing advanced unittesting with objects.
-//
-// Copyright 2006-2008 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 "GTMNSObject+UnitTesting.h"
-#import "GTMSystemVersion.h"
-
-#if GTM_IPHONE_SDK
-#import <UIKit/UIKit.h>
-#else
-#import <AppKit/AppKit.h>
-#endif
-
-NSString *const GTMUnitTestingEncodedObjectNotification
- = @"GTMUnitTestingEncodedObjectNotification";
-NSString *const GTMUnitTestingEncoderKey = @"GTMUnitTestingEncoderKey";
-
-#if GTM_IPHONE_SDK
-// No UTIs on iPhone. Only two we need.
-const CFStringRef kUTTypePNG = CFSTR("public.png");
-const CFStringRef kUTTypeJPEG = CFSTR("public.jpeg");
-#endif
-
-// This class exists so that we can locate our bundle using [NSBundle
-// bundleForClass:]. We don't use [NSBundle mainBundle] because when we are
-// being run as a unit test, we aren't the mainBundle
-@interface GTMUnitTestingAdditionsBundleFinder : NSObject {
- // Nothing here
-}
-// or here
-@end
-
-@implementation GTMUnitTestingAdditionsBundleFinder
-// Nothing here. We're just interested in the name for finding our bundle.
-@end
-
-#if GTM_IPHONE_SDK
-static NSString *iOS_Idiom(void) {
- UIUserInterfaceIdiom idiom;
-#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_3_2
- idiom = [[UIDevice currentDevice] userInterfaceIdiom];
-#else
- idiom = UI_USER_INTERFACE_IDIOM();
-#endif
- if (idiom == UIUserInterfaceIdiomPad) {
- return @"iPad";
- }
- _GTMDevAssert((idiom == UIUserInterfaceIdiomPhone),
- @"unknown idiom %zd", idiom);
- return @"iPhone";
-}
-#endif // GTM_IPHONE_SDK
-
-BOOL GTMIsObjectImageEqualToImageNamed(id object,
- NSString* filename,
- NSString **error) {
- NSString *failString = nil;
- if (error) {
- *error = nil;
- }
- BOOL isGood = [object respondsToSelector:@selector(gtm_unitTestImage)];
- if (isGood) {
- if ([object gtm_areSystemSettingsValidForDoingImage]) {
- NSString *aPath = [object gtm_pathForImageNamed:filename];
- CGImageRef diff = nil;
- isGood = aPath != nil;
- if (isGood) {
- isGood = [object gtm_compareWithImageAt:aPath diffImage:&diff];
- }
- if (!isGood) {
- if (aPath) {
- filename = [filename stringByAppendingString:@"_Failed"];
- }
- BOOL aSaved = [object gtm_saveToImageNamed:filename];
- NSString *fileNameWithExtension
- = [NSString stringWithFormat:@"%@.%@",
- filename, [object gtm_imageExtension]];
- NSString *fullSavePath = [object gtm_saveToPathForImageNamed:filename];
- if (NO == aSaved) {
- if (!aPath) {
- failString = [NSString stringWithFormat:@"File %@ did not exist in "
- @"bundle. Tried to save as %@ and failed.",
- fileNameWithExtension, fullSavePath];
- } else {
- failString = [NSString stringWithFormat:@"Object image different "
- @"than file %@. Tried to save as %@ and failed.",
- aPath, fullSavePath];
- }
- } else {
- if (!aPath) {
- failString = [NSString stringWithFormat:@"File %@ did not exist in "
- @" bundle. Saved to %@", fileNameWithExtension,
- fullSavePath];
- } else {
- NSString *diffPath = [filename stringByAppendingString:@"_Diff"];
- diffPath = [object gtm_saveToPathForImageNamed:diffPath];
- NSData *data = nil;
- if (diff) {
- data = [object gtm_imageDataForImage:diff];
- }
- if ([data writeToFile:diffPath atomically:YES]) {
- failString = [NSString stringWithFormat:@"Object image different "
- @"than file\n%@\nSaved image to\n%@\n"
- @"Saved diff to\n%@\n",
- aPath, fullSavePath, diffPath];
- } else {
- failString = [NSString stringWithFormat:@"Object image different "
- @"than file\n%@\nSaved image to\n%@\nUnable to save "
- @"diff. Most likely the image and diff are "
- @"different sizes.",
- aPath, fullSavePath];
- }
- }
- }
- }
- CGImageRelease(diff);
- } else {
- failString = @"systemSettings not valid for taking image"; // COV_NF_LINE
- }
- } else {
- if (object == nil) {
- failString = @"Testing a nil image.";
- } else {
- failString = @"Object does not conform to GTMUnitTestingImaging protocol";
- }
- }
- if (error) {
- *error = failString;
- }
- return isGood;
-}
-
-BOOL GTMIsObjectStateEqualToStateNamed(id object,
- NSString* filename,
- NSString **error) {
- NSString *failString = nil;
- if (error) {
- *error = nil;
- }
- BOOL isGood = [object conformsToProtocol:@protocol(GTMUnitTestingEncoding)];
- if (isGood) {
- NSString *aPath = [object gtm_pathForStateNamed:filename];
- isGood = aPath != nil;
- if (isGood) {
- isGood = [object gtm_compareWithStateAt:aPath];
- }
- if (!isGood) {
- if (aPath) {
- filename = [filename stringByAppendingString:@"_Failed"];
- }
- BOOL aSaved = [object gtm_saveToStateNamed:filename];
- NSString *fileNameWithExtension = [NSString stringWithFormat:@"%@.%@",
- filename, [object gtm_stateExtension]];
- NSString *fullSavePath = [object gtm_saveToPathForStateNamed:filename];
- if (NO == aSaved) {
- if (!aPath) {
- failString = [NSString stringWithFormat:@"File %@ did not exist in "
- @"bundle. Tried to save as %@ and failed.",
- fileNameWithExtension, fullSavePath];
- } else {
- failString = [NSString stringWithFormat:@"Object state different "
- @"than file %@. Tried to save as %@ and failed.",
- aPath, fullSavePath];
- }
- } else {
- if (!aPath) {
- failString = [NSString stringWithFormat:@"File %@ did not exist in "
- @ "bundle. Saved to %@", fileNameWithExtension,
- fullSavePath];
- } else {
- failString = [NSString stringWithFormat:@"Object state different "
- @"than file %@. Saved to %@", aPath, fullSavePath];
- }
- }
- }
- } else {
- failString = @"Object does not conform to GTMUnitTestingEncoding protocol";
- }
- if (error) {
- *error = failString;
- }
- return isGood;
-}
-
-CGContextRef GTMCreateUnitTestBitmapContextOfSizeWithData(CGSize size,
- unsigned char **data) {
- CGContextRef context = NULL;
- size_t height = size.height;
- size_t width = size.width;
- size_t bytesPerRow = width * 4;
- size_t bitsPerComponent = 8;
- CGColorSpaceRef cs = NULL;
-#if GTM_IPHONE_SDK
- cs = CGColorSpaceCreateDeviceRGB();
-#else
- cs = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
-#endif
- _GTMDevAssert(cs, @"Couldn't create colorspace");
- CGBitmapInfo info
- = kCGImageAlphaPremultipliedLast | kCGBitmapByteOrderDefault;
- if (data) {
- *data = (unsigned char*)calloc(bytesPerRow, height);
- _GTMDevAssert(*data, @"Couldn't create bitmap");
- }
- context = CGBitmapContextCreate(data ? *data : NULL, width, height,
- bitsPerComponent, bytesPerRow, cs, info);
- _GTMDevAssert(context, @"Couldn't create an context");
- if (!data) {
- CGContextClearRect(context, CGRectMake(0, 0, size.width, size.height));
- }
- CGContextSetRenderingIntent(context, kCGRenderingIntentRelativeColorimetric);
- CGContextSetInterpolationQuality(context, kCGInterpolationNone);
- CGContextSetShouldAntialias(context, NO);
- CGContextSetAllowsAntialiasing(context, NO);
- CGContextSetShouldSmoothFonts(context, NO);
- CGColorSpaceRelease(cs);
- return context;
-}
-
-@interface NSObject (GTMUnitTestingAdditionsPrivate)
-/// Find the path for a file named name.extension in your bundle.
-// Searches for the following:
-// "name.extension",
-// "name.arch.extension",
-// "name.arch.OSVersionMajor.extension"
-// "name.arch.OSVersionMajor.OSVersionMinor.extension"
-// "name.arch.OSVersionMajor.OSVersionMinor.OSVersion.bugfix.extension"
-// "name.arch.OSVersionMajor.extension"
-// "name.OSVersionMajor.arch.extension"
-// "name.OSVersionMajor.OSVersionMinor.arch.extension"
-// "name.OSVersionMajor.OSVersionMinor.OSVersion.bugfix.arch.extension"
-// "name.OSVersionMajor.extension"
-// "name.OSVersionMajor.OSVersionMinor.extension"
-// "name.OSVersionMajor.OSVersionMinor.OSVersion.bugfix.extension"
-// Do not include the ".extension" extension on your name.
-//
-// Args:
-// name: The name for the file you would like to find.
-// extension: the extension for the file you would like to find
-//
-// Returns:
-// the path if the file exists in your bundle
-// or nil if no file is found
-//
-- (NSString *)gtm_pathForFileNamed:(NSString*)name
- extension:(NSString*)extension;
-- (NSString *)gtm_saveToPathForFileNamed:(NSString*)name
- extension:(NSString*)extension;
-- (CGImageRef)gtm_unitTestImage;
-// Returns nil if there is no override
-- (NSString *)gtm_getOverrideDefaultUnitTestSaveToDirectory;
-@end
-
-// This is a keyed coder for storing unit test state data. It is used only by
-// the GTMUnitTestingAdditions category. Most of the work is done in
-// encodeObject:forKey:.
-@interface GTMUnitTestingKeyedCoder : NSCoder {
- NSMutableDictionary *dictionary_; // storage for data (STRONG)
-}
-
-// get the data stored in coder.
-//
-// Returns:
-// NSDictionary with currently stored data.
-- (NSDictionary*)dictionary;
-@end
-
-// Small utility function for checking to see if a is b +/- 1.
-GTM_INLINE BOOL almostEqual(unsigned char a, unsigned char b) {
- unsigned char diff = a > b ? a - b : b - a;
- BOOL notEqual = diff < 2;
- return notEqual;
-}
-
-@implementation GTMUnitTestingKeyedCoder
-
-// Set up storage for coder. Stores type and version.
-// Version 1
-//
-// Returns:
-// self
-- (id)init {
- self = [super init];
- if (self != nil) {
- dictionary_ = [[NSMutableDictionary alloc] initWithCapacity:2];
- [dictionary_ setObject:@"GTMUnitTestingArchive" forKey:@"$GTMArchive"];
-
- // Version number can be changed here.
- [dictionary_ setObject:[NSNumber numberWithInt:1] forKey:@"$GTMVersion"];
- }
- return self;
-}
-
-// Standard dealloc
-- (void)dealloc {
- [dictionary_ release];
- [super dealloc];
-}
-
-// Utility function for checking for a key value. We don't want duplicate keys
-// in any of our dictionaries as we may be writing over data stored by previous
-// objects.
-//
-// Arguments:
-// key - key to check for in dictionary
-- (void)checkForKey:(NSString*)key {
- _GTMDevAssert(![dictionary_ objectForKey:key],
- @"Key already exists for %@", key);
-}
-
-// Key routine for the encoder. We store objects in our dictionary based on
-// their key. As we encode objects we send out notifications to let other
-// classes doing tests add their specific data to the base types. If we can't
-// encode the object (it doesn't support gtm_unitTestEncodeState) and we don't
-// get any info back from the notifier, we attempt to store it's description.
-//
-// Arguments:
-// objv - object to be encoded
-// key - key to encode it with
-//
-- (void)encodeObject:(id)objv forKey:(NSString *)key {
- // Sanity checks
- if (!objv) return;
- [self checkForKey:key];
-
- // Set up a new dictionary for the current object
- NSMutableDictionary *curDictionary = dictionary_;
- dictionary_ = [[NSMutableDictionary alloc] initWithCapacity:0];
-
- // If objv responds to gtm_unitTestEncodeState get it to record
- // its data.
- if ([objv respondsToSelector:@selector(gtm_unitTestEncodeState:)]) {
- [objv gtm_unitTestEncodeState:self];
- }
-
- // We then send out a notification to let other folks
- // add data for this object
- NSDictionary *notificationDict
- = [NSDictionary dictionaryWithObject:self forKey:GTMUnitTestingEncoderKey];
- NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
- [nc postNotificationName:GTMUnitTestingEncodedObjectNotification
- object:objv
- userInfo:notificationDict];
-
- // If we got anything from the object, or from the notification, store it in
- // our dictionary. Otherwise store the description.
- if ([dictionary_ count] > 0) {
- [curDictionary setObject:dictionary_ forKey:key];
- } else {
- NSString *description = [objv description];
- // If description has a pointer value in it, we don't want to store it
- // as the pointer value can change from run to run
- if (description && [description rangeOfString:@"0x"].length == 0) {
- [curDictionary setObject:description forKey:key];
- } else {
- _GTMDevAssert(NO, @"Unable to encode forKey: %@", key); // COV_NF_LINE
- }
- }
- [dictionary_ release];
- dictionary_ = curDictionary;
-}
-
-// Basic encoding methods for POD types.
-//
-// Arguments:
-// *v - value to encode
-// key - key to encode it in
-
-- (void)encodeBool:(BOOL)boolv forKey:(NSString *)key {
- [self checkForKey:key];
- [dictionary_ setObject:[NSNumber numberWithBool:boolv] forKey:key];
-}
-
-- (void)encodeInt:(int)intv forKey:(NSString *)key {
- [self checkForKey:key];
- [dictionary_ setObject:[NSNumber numberWithInt:intv] forKey:key];
-}
-
-- (void)encodeInt32:(int32_t)intv forKey:(NSString *)key {
- [self checkForKey:key];
- [dictionary_ setObject:[NSNumber numberWithLong:intv] forKey:key];
-}
-
-- (void)encodeInt64:(int64_t)intv forKey:(NSString *)key {
- [self checkForKey:key];
- [dictionary_ setObject:[NSNumber numberWithLongLong:intv] forKey:key];
-}
-
-- (void)encodeFloat:(float)realv forKey:(NSString *)key {
- [self checkForKey:key];
- [dictionary_ setObject:[NSNumber numberWithFloat:realv] forKey:key];
-}
-
-- (void)encodeDouble:(double)realv forKey:(NSString *)key {
- [self checkForKey:key];
- [dictionary_ setObject:[NSNumber numberWithDouble:realv] forKey:key];
-}
-
-- (void)encodeBytes:(const uint8_t *)bytesp
- length:(NSUInteger)lenv
- forKey:(NSString *)key {
- [self checkForKey:key];
- [dictionary_ setObject:[NSData dataWithBytes:bytesp
- length:lenv]
- forKey:key];
-}
-
-// Get our storage back as an NSDictionary
-//
-// Returns:
-// NSDictionary containing our encoded info
--(NSDictionary*)dictionary {
- return [[dictionary_ retain] autorelease];
-}
-
-@end
-
-static NSString *gGTMUnitTestSaveToDirectory = nil;
-
-@implementation NSObject (GTMUnitTestingAdditions)
-
-+ (void)gtm_setUnitTestSaveToDirectory:(NSString*)path {
- @synchronized([self class]) {
- [gGTMUnitTestSaveToDirectory autorelease];
- gGTMUnitTestSaveToDirectory = [path copy];
- }
-}
-
-+ (NSString *)gtm_getUnitTestSaveToDirectory {
- NSString *result = nil;
- @synchronized([self class]) {
- if (!gGTMUnitTestSaveToDirectory) {
-#if GTM_IPHONE_SDK
- // About the only thing safe for the sandbox is the documents directory.
- NSArray *documentsDirs
- = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
- NSUserDomainMask, YES);
- gGTMUnitTestSaveToDirectory = [documentsDirs objectAtIndex:0];
-#else
- NSArray *desktopDirs
- = NSSearchPathForDirectoriesInDomains(NSDesktopDirectory,
- NSUserDomainMask,
- YES);
- gGTMUnitTestSaveToDirectory = [desktopDirs objectAtIndex:0];
-#endif
- // Did we get overridden?
- NSString *override = [self gtm_getOverrideDefaultUnitTestSaveToDirectory];
- if (override) {
- gGTMUnitTestSaveToDirectory = override;
- }
- [gGTMUnitTestSaveToDirectory retain];
- }
- result = gGTMUnitTestSaveToDirectory;
- }
-
- return result;
-}
-
-// Return nil if there is no override
-- (NSString *)gtm_getOverrideDefaultUnitTestSaveToDirectory {
- NSString *result = nil;
-
- // If we have an environment variable that ends in "BUILD_NUMBER" odds are
- // we're on an automated build system, so use the build products dir as an
- // override instead of writing on the desktop.
- NSDictionary *env = [[NSProcessInfo processInfo] environment];
- NSString *key;
- GTM_FOREACH_KEY(key, env) {
- if ([key hasSuffix:@"BUILD_NUMBER"]) {
- break;
- }
- }
- if (key) {
- result = [env objectForKey:@"BUILT_PRODUCTS_DIR"];
- }
-
- if (result && [result length] == 0) {
- result = nil;
- }
- return result;
-}
-
-/// Find the path for a file named name.extension in your bundle.
-// Searches for the following:
-// "name.CompilerSDK.OSVersionMajor.OSVersionMinor.OSVersionBugFix.arch.extension"
-// "name.CompilerSDK.OSVersionMajor.OSVersionMinor.arch.extension"
-// "name.CompilerSDK.OSVersionMajor.arch.extension"
-// "name.CompilerSDK.arch.extension"
-// "name.CompilerSDK.OSVersionMajor.OSVersionMinor.OSVersionBugFix.extension"
-// "name.CompilerSDK.OSVersionMajor.OSVersionMinor.extension"
-// "name.CompilerSDK.OSVersionMajor.extension"
-// "name.CompilerSDK.extension"
-// "name.OSVersionMajor.OSVersionMinor.OSVersionBugFix.arch.extension"
-// "name.OSVersionMajor.OSVersionMinor.arch.extension"
-// "name.OSVersionMajor.arch.extension"
-// "name.arch.extension"
-// "name.OSVersionMajor.OSVersionMinor.OSVersionBugFix.extension"
-// "name.OSVersionMajor.OSVersionMinor.extension"
-// "name.OSVersionMajor.extension"
-// "name.extension"
-// Do not include the ".extension" extension on your name.
-//
-// Args:
-// name: The name for the file you would like to find.
-// extension: the extension for the file you would like to find
-//
-// Returns:
-// the path if the file exists in your bundle
-// or nil if no file is found
-//
-- (NSString *)gtm_pathForFileNamed:(NSString*)name
- extension:(NSString*)extension {
- NSString *thePath = nil;
- Class bundleClass = [GTMUnitTestingAdditionsBundleFinder class];
- NSBundle *myBundle = [NSBundle bundleForClass:bundleClass];
- _GTMDevAssert(myBundle,
- @"Couldn't find bundle for class: %@ searching for file:%@.%@",
- NSStringFromClass(bundleClass), name, extension);
- // System Version
- SInt32 major, minor, bugFix;
- [GTMSystemVersion getMajor:&major minor:&minor bugFix:&bugFix];
- NSString *systemVersions[4];
- systemVersions[0] = [NSString stringWithFormat:@".%d.%d.%d",
- (int)major, (int)minor, (int)bugFix];
- systemVersions[1]
- = [NSString stringWithFormat:@".%d.%d", (int)major, (int)minor];
- systemVersions[2] = [NSString stringWithFormat:@".%d", (int)major];
- systemVersions[3] = @"";
- // Architecture
- NSString *architecture[2];
-#if GTM_IPHONE_SDK
- architecture[0]
- = [NSString stringWithFormat:@".%@", iOS_Idiom()];
-#else
- architecture[0]
- = [NSString stringWithFormat:@".%@",
- [GTMSystemVersion runtimeArchitecture]];
-#endif
- architecture[1] = @"";
- // Compiler SDK
- // Some times Apple changes how things work based on the SDK built against.
- NSString *sdks[2];
-#if GTM_MACOS_SDK
-# if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_7
- sdks[0] = @".10_7_SDK";
-# elif MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_6
- sdks[0] = @".10_6_SDK";
-# elif MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5
- sdks[0] = @".10_5_SDK";
-# elif MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_4
- sdks[0] = @".10_4_SDK";
-# elif MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_3
- sdks[0] = @".10_3_SDK";
-# elif MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_2
- sdks[0] = @".10_2_SDK";
-# elif MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_1
- sdks[0] = @".10_1_SDK";
-# else
- sdks[0] = @".10_0_SDK";
-# endif
-#else // !GTM_MACOS_SDK
-# if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_5_0
- sdks[0] = @".5_0_SDK";
-# elif __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_3
- sdks[0] = @".4_3_SDK";
-# else
- sdks[0] = @"";
-# endif
-#endif // GTM_MACOS_SDK
- sdks[1] = @"";
-
- // Note that we are searching for the most exact match first.
- for (size_t i = 0;
- !thePath && i < sizeof(sdks) / sizeof(*sdks);
- ++i) {
- for (size_t j = 0;
- !thePath && j < sizeof(architecture) / sizeof(*architecture);
- j++) {
- for (size_t k = 0;
- !thePath && k < sizeof(systemVersions) / sizeof(*systemVersions);
- k++) {
- NSString *fullName = [NSString stringWithFormat:@"%@%@%@%@",
- name, sdks[i], systemVersions[k], architecture[j]];
- thePath = [myBundle pathForResource:fullName ofType:extension];
- }
- }
- }
-
- return thePath;
-}
-
-- (NSString *)gtm_saveToPathForFileNamed:(NSString*)name
- extension:(NSString*)extension {
-#if GTM_IPHONE_SDK
- NSString *systemArchitecture = iOS_Idiom();
-#else
- NSString *systemArchitecture = [GTMSystemVersion runtimeArchitecture];
-#endif
-
- SInt32 major, minor, bugFix;
- [GTMSystemVersion getMajor:&major minor:&minor bugFix:&bugFix];
-
- // We don't include the CompilerSDK in here because it is not something that
- // that is commonly needed.
- NSString *fullName = [NSString stringWithFormat:@"%@.%d.%d.%d.%@",
- name, (int)major, (int)minor, (int)bugFix, systemArchitecture];
-
- NSString *basePath = [[self class] gtm_getUnitTestSaveToDirectory];
- return [[basePath stringByAppendingPathComponent:fullName]
- stringByAppendingPathExtension:extension];
-}
-
-#pragma mark UnitTestImage
-
-// Checks to see that system settings are valid for doing an image comparison.
-// To be overridden by subclasses.
-// Returns:
-// YES if we can do image comparisons for this object type.
-- (BOOL)gtm_areSystemSettingsValidForDoingImage {
- return YES;
-}
-
-- (CFStringRef)gtm_imageUTI {
-#if GTM_IPHONE_SDK
- return kUTTypePNG;
-#else
- // Currently can't use PNG on Leopard. (10.5.2)
- // Radar:5844618 PNG importer/exporter in ImageIO is lossy
- return kUTTypeTIFF;
-#endif
-}
-
-// Return the extension to be used for saving unittest images
-//
-// Returns
-// An extension (e.g. "png")
-- (NSString*)gtm_imageExtension {
- CFStringRef uti = [self gtm_imageUTI];
-#if GTM_IPHONE_SDK
- if (CFEqual(uti, kUTTypePNG)) {
- return @"png";
- } else if (CFEqual(uti, kUTTypeJPEG)) {
- return @"jpg";
- } else {
- _GTMDevAssert(NO, @"Illegal UTI for iPhone");
- }
- return nil;
-#else
- CFStringRef extension
- = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassFilenameExtension);
- _GTMDevAssert(extension, @"No extension for uti: %@", uti);
-
- return GTMCFAutorelease(extension);
-#endif
-}
-
-// Return image data in the format expected for gtm_imageExtension
-// So for a "png" extension I would expect "png" data
-//
-// Returns
-// NSData for image
-- (NSData*)gtm_imageDataForImage:(CGImageRef)image {
- NSData *data = nil;
-#if GTM_IPHONE_SDK
- // iPhone support
- UIImage *uiImage = [UIImage imageWithCGImage:image];
- CFStringRef uti = [self gtm_imageUTI];
- if (CFEqual(uti, kUTTypePNG)) {
- data = UIImagePNGRepresentation(uiImage);
- } else if (CFEqual(uti, kUTTypeJPEG)) {
- data = UIImageJPEGRepresentation(uiImage, 1.0f);
- } else {
- _GTMDevAssert(NO, @"Illegal UTI for iPhone");
- }
-#else
- data = [NSMutableData data];
- CGImageDestinationRef dest
- = CGImageDestinationCreateWithData((CFMutableDataRef)data,
- [self gtm_imageUTI],
- 1,
- NULL);
- // LZW Compression for TIFF
- NSDictionary *tiffDict
- = [NSDictionary dictionaryWithObjectsAndKeys:
- [NSNumber gtm_numberWithUnsignedInteger:NSTIFFCompressionLZW],
- (const NSString*)kCGImagePropertyTIFFCompression,
- nil];
- NSDictionary *destProps
- = [NSDictionary dictionaryWithObjectsAndKeys:
- [NSNumber numberWithFloat:1.0f],
- (const NSString*)kCGImageDestinationLossyCompressionQuality,
- tiffDict,
- (const NSString*)kCGImagePropertyTIFFDictionary,
- nil];
- CGImageDestinationAddImage(dest, image, (CFDictionaryRef)destProps);
- CGImageDestinationFinalize(dest);
- CFRelease(dest);
-#endif
- return data;
-
-}
-
-// Save the unitTestImage to an image file with name |name| at
-// ~/Desktop/|name|.extension.
-//
-// Note: When running under Pulse automation output is redirected to the
-// Pulse base directory.
-//
-// Args:
-// name: The name for the image file you would like saved.
-//
-// Returns:
-// YES if the file was successfully saved.
-//
-- (BOOL)gtm_saveToImageNamed:(NSString*)name {
- NSString *newPath = [self gtm_saveToPathForImageNamed:name];
- return [self gtm_saveToImageAt:newPath];
-}
-
-// Save unitTestImage of |self| to an image file at path |path|.
-//
-// Args:
-// name: The name for the image file you would like saved.
-//
-// Returns:
-// YES if the file was successfully saved.
-//
-- (BOOL)gtm_saveToImageAt:(NSString*)path {
- if (!path) return NO;
- NSData *data = [self gtm_imageRepresentation];
- return [data writeToFile:path atomically:YES];
-}
-
-// Generates a CGImageRef from the image at |path|
-// Args:
-// path: The path to the image.
-//
-// Returns:
-// A CGImageRef that you own, or nil if no image at path
-- (CGImageRef)gtm_imageWithContentsOfFile:(NSString*)path {
- CGImageRef imageRef = nil;
-#if GTM_IPHONE_SDK
- UIImage *image = [UIImage imageWithContentsOfFile:path];
- if (image) {
- imageRef = CGImageRetain(image.CGImage);
- }
-#else
- CFURLRef url = CFURLCreateWithFileSystemPath(NULL, (CFStringRef)path,
- kCFURLPOSIXPathStyle, NO);
- if (url) {
- CGImageSourceRef imageSource = CGImageSourceCreateWithURL(url, NULL);
- CFRelease(url);
- if (imageSource) {
- imageRef = CGImageSourceCreateImageAtIndex(imageSource, 0, NULL);
- CFRelease(imageSource);
- }
- }
-#endif
- return (CGImageRef)GTMCFAutorelease(imageRef);
-}
-
-/// Compares unitTestImage of |self| to the image located at |path|
-//
-// Args:
-// path: the path to the image file you want to compare against.
-// If diff is non-nil, it will contain an auto-released diff of the images.
-//
-// Returns:
-// YES if they are equal, NO is they are not
-// If diff is non-nil, it will contain an auto-released diff of the images.
-//
-- (BOOL)gtm_compareWithImageAt:(NSString*)path diffImage:(CGImageRef*)diff {
- BOOL answer = NO;
- if (diff) {
- *diff = nil;
- }
- CGImageRef fileRep = [self gtm_imageWithContentsOfFile:path];
- _GTMDevAssert(fileRep, @"Unable to create imagerep from %@", path);
-
- CGImageRef imageRep = [self gtm_unitTestImage];
- _GTMDevAssert(imageRep, @"Unable to create imagerep for %@", self);
-
- size_t fileHeight = CGImageGetHeight(fileRep);
- size_t fileWidth = CGImageGetWidth(fileRep);
- size_t imageHeight = CGImageGetHeight(imageRep);
- size_t imageWidth = CGImageGetWidth(imageRep);
- if (fileHeight == imageHeight && fileWidth == imageWidth) {
- // if all the sizes are equal, run through the bytes and compare
- // them for equality.
- // Do an initial fast check, if this fails and the caller wants a
- // diff, we'll do the slow path and create the diff. The diff path
- // could be optimized, but probably not necessary at this point.
- answer = YES;
-
- CGSize imageSize = CGSizeMake(fileWidth, fileHeight);
- CGRect imageRect = CGRectMake(0, 0, fileWidth, fileHeight);
- unsigned char *fileData;
- unsigned char *imageData;
- CGContextRef fileContext
- = GTMCreateUnitTestBitmapContextOfSizeWithData(imageSize, &fileData);
- _GTMDevAssert(fileContext, @"Unable to create filecontext");
- CGContextDrawImage(fileContext, imageRect, fileRep);
- CGContextRef imageContext
- = GTMCreateUnitTestBitmapContextOfSizeWithData(imageSize, &imageData);
- _GTMDevAssert(imageContext, @"Unable to create imageContext");
- CGContextDrawImage(imageContext, imageRect, imageRep);
-
- size_t fileBytesPerRow = CGBitmapContextGetBytesPerRow(fileContext);
- size_t imageBytesPerRow = CGBitmapContextGetBytesPerRow(imageContext);
- size_t row, col;
-
- _GTMDevAssert(imageWidth * 4 <= imageBytesPerRow,
- @"We expect image data to be 32bit RGBA");
-
- for (row = 0; row < fileHeight && answer; row++) {
- answer = memcmp(fileData + fileBytesPerRow * row,
- imageData + imageBytesPerRow * row,
- imageWidth * 4) == 0;
- }
- if (!answer && diff) {
- answer = YES;
- unsigned char *diffData;
- CGContextRef diffContext
- = GTMCreateUnitTestBitmapContextOfSizeWithData(imageSize, &diffData);
- _GTMDevAssert(diffContext, @"Can't make diff context");
- size_t diffRowBytes = CGBitmapContextGetBytesPerRow(diffContext);
- for (row = 0; row < imageHeight; row++) {
- uint32_t *imageRow = (uint32_t*)(imageData + imageBytesPerRow * row);
- uint32_t *fileRow = (uint32_t*)(fileData + fileBytesPerRow * row);
- uint32_t* diffRow = (uint32_t*)(diffData + diffRowBytes * row);
- for (col = 0; col < imageWidth; col++) {
- uint32_t imageColor = imageRow[col];
- uint32_t fileColor = fileRow[col];
-
- unsigned char imageAlpha = imageColor & 0xF;
- unsigned char imageBlue = imageColor >> 8 & 0xF;
- unsigned char imageGreen = imageColor >> 16 & 0xF;
- unsigned char imageRed = imageColor >> 24 & 0xF;
- unsigned char fileAlpha = fileColor & 0xF;
- unsigned char fileBlue = fileColor >> 8 & 0xF;
- unsigned char fileGreen = fileColor >> 16 & 0xF;
- unsigned char fileRed = fileColor >> 24 & 0xF;
-
- // Check to see if color is almost right.
- // No matter how hard I've tried, I've still gotten occasionally
- // screwed over by colorspaces not mapping correctly, and small
- // sampling errors coming in. This appears to work for most cases.
- // Almost equal is defined to check within 1% on all components.
- BOOL equal = almostEqual(imageRed, fileRed) &&
- almostEqual(imageGreen, fileGreen) &&
- almostEqual(imageBlue, fileBlue) &&
- almostEqual(imageAlpha, fileAlpha);
- answer &= equal;
- if (diff) {
- uint32_t newColor;
- if (equal) {
- newColor = (((uint32_t)imageRed) << 24) +
- (((uint32_t)imageGreen) << 16) +
- (((uint32_t)imageBlue) << 8) +
- (((uint32_t)imageAlpha) / 2);
- } else {
- newColor = 0xFF0000FF;
- }
- diffRow[col] = newColor;
- }
- }
- }
- *diff = CGBitmapContextCreateImage(diffContext);
- free(diffData);
- CFRelease(diffContext);
- }
- free(fileData);
- CFRelease(fileContext);
- free(imageData);
- CFRelease(imageContext);
- }
- return answer;
-}
-
-// Find the path for an image by name in your bundle.
-// Do not include the extension on your name.
-//
-// Args:
-// name: The name for the image file you would like to find.
-//
-// Returns:
-// the path if the image exists in your bundle
-// or nil if no image to be found
-//
-- (NSString *)gtm_pathForImageNamed:(NSString*)name {
- return [self gtm_pathForFileNamed:name
- extension:[self gtm_imageExtension]];
-}
-
-- (NSString *)gtm_saveToPathForImageNamed:(NSString*)name {
- return [self gtm_saveToPathForFileNamed:name
- extension:[self gtm_imageExtension]];
-}
-
-// Gives us a representation of unitTestImage of |self|.
-//
-// Returns:
-// a representation of image if successful
-// nil if failed
-//
-- (NSData *)gtm_imageRepresentation {
- CGImageRef imageRep = [self gtm_unitTestImage];
- NSData *data = [self gtm_imageDataForImage:imageRep];
- _GTMDevAssert(data, @"unable to create %@ from %@",
- [self gtm_imageExtension], self);
- return data;
-}
-
-#pragma mark UnitTestState
-
-// Return the extension to be used for saving unittest states
-//
-// Returns
-// An extension (e.g. "gtmUTState")
-- (NSString*)gtm_stateExtension {
- return @"gtmUTState";
-}
-
-// Save the encoded unit test state to a state file with name |name| at
-// ~/Desktop/|name|.extension.
-//
-// Note: When running under Pulse automation output is redirected to the
-// Pulse base directory.
-//
-// Args:
-// name: The name for the state file you would like saved.
-//
-// Returns:
-// YES if the file was successfully saved.
-//
-- (BOOL)gtm_saveToStateNamed:(NSString*)name {
- NSString *newPath = [self gtm_saveToPathForStateNamed:name];
- return [self gtm_saveToStateAt:newPath];
-}
-
-// Save encoded unit test state of |self| to a state file at path |path|.
-//
-// Args:
-// name: The name for the state file you would like saved.
-//
-// Returns:
-// YES if the file was successfully saved.
-//
-- (BOOL)gtm_saveToStateAt:(NSString*)path {
- if (!path) return NO;
- NSDictionary *dictionary = [self gtm_stateRepresentation];
- return [dictionary writeToFile:path atomically:YES];
-}
-
-// Compares encoded unit test state of |self| to the state file located at
-// |path|
-//
-// Args:
-// path: the path to the state file you want to compare against.
-//
-// Returns:
-// YES if they are equal, NO is they are not
-//
-- (BOOL)gtm_compareWithStateAt:(NSString*)path {
- NSDictionary *masterDict = [NSDictionary dictionaryWithContentsOfFile:path];
- _GTMDevAssert(masterDict, @"Unable to create dictionary from %@", path);
- NSDictionary *selfDict = [self gtm_stateRepresentation];
- return [selfDict isEqual: masterDict];
-}
-
-// Find the path for a state by name in your bundle.
-// Do not include the extension.
-//
-// Args:
-// name: The name for the state file you would like to find.
-//
-// Returns:
-// the path if the state exists in your bundle
-// or nil if no state to be found
-//
-- (NSString *)gtm_pathForStateNamed:(NSString*)name {
- return [self gtm_pathForFileNamed:name extension:[self gtm_stateExtension]];
-}
-
-- (NSString *)gtm_saveToPathForStateNamed:(NSString*)name {
- return [self gtm_saveToPathForFileNamed:name
- extension:[self gtm_stateExtension]];
-}
-
-// Gives us the encoded unit test state |self|
-//
-// Returns:
-// the encoded state if successful
-// nil if failed
-//
-- (NSDictionary *)gtm_stateRepresentation {
- NSDictionary *dictionary = nil;
- if ([self conformsToProtocol:@protocol(GTMUnitTestingEncoding)]) {
- id<GTMUnitTestingEncoding> encoder = (id<GTMUnitTestingEncoding>)self;
- GTMUnitTestingKeyedCoder *archiver;
- archiver = [[[GTMUnitTestingKeyedCoder alloc] init] autorelease];
- [encoder gtm_unitTestEncodeState:archiver];
- dictionary = [archiver dictionary];
- }
- return dictionary;
-}
-
-// Encodes the state of an object in a manner suitable for comparing
-// against a master state file so we can determine whether the
-// object is in a suitable state. Encode data in the coder in the same
-// manner that you would encode data in any other Keyed NSCoder subclass.
-//
-// Arguments:
-// inCoder - the coder to encode our state into
-- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder {
- // All impls of gtm_unitTestEncodeState
- // should be calling [super gtm_unitTestEncodeState] as their first action.
- _GTMDevAssert([inCoder isKindOfClass:[GTMUnitTestingKeyedCoder class]],
- @"Coder must be of kind GTMUnitTestingKeyedCoder");
-
- // If the object has a delegate, give it a chance to respond
- if ([self respondsToSelector:@selector(delegate)]) {
- id delegate = [self performSelector:@selector(delegate)];
- if (delegate &&
- [delegate respondsToSelector:@selector(gtm_unitTestEncoderWillEncode:inCoder:)]) {
- [delegate gtm_unitTestEncoderWillEncode:self inCoder:inCoder];
- }
- }
-}
-
-@end
diff --git a/UnitTesting/GTMSenTestCase.h b/UnitTesting/GTMSenTestCase.h
index a96cb20..6b7198b 100644
--- a/UnitTesting/GTMSenTestCase.h
+++ b/UnitTesting/GTMSenTestCase.h
@@ -90,7 +90,7 @@
#define _XCExceptionFormatString @"throwing \"%@\""
#define _XCUnknownExceptionString @"throwing an unknown exception"
-#if defined(__IPHONE_8_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_8_0
+#if (defined(__IPHONE_8_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_8_0) || (GTM_MACOS_SDK == 1)
// They changed the call to _XCTRegisterFailure in iOS 8. Once we no longer need to support
// the iOS 7 SDK, we can remove this.
#define _GTMXCRegisterFailure(expression, format...) _XCTRegisterFailure(self, expression, format)
@@ -111,7 +111,7 @@
@try { \
__typeof__(a1) _a1value = (a1); \
if (_a1value != noErr) { \
- _failure = [NSString stringWithFormat:@"%ld != noErr", (long)_a1value]; \
+ _failure = [NSString stringWithFormat:@"%d != noErr", (int)_a1value]; \
} \
} \
@catch (NSException *_exception) { \
@@ -142,7 +142,7 @@
__typeof__(a1) _a1value = (a1); \
__typeof__(a2) _a2value = (a2); \
if (_a1value != _a2value) { \
- _failure = [NSString stringWithFormat:@"(%ld) != (%ld)", (long)_a1value, (long)_a2value]; \
+ _failure = [NSString stringWithFormat:@"(%d) != (%d)", (int)_a1value, (int)_a2value]; \
} \
} \
@catch (NSException *_exception) { \
@@ -152,7 +152,7 @@
_failure = @": " _XCUnknownExceptionString; \
} \
if (_failure) { \
- NSString *_expression = [NSString stringWithFormat:@"((%@) != (@%)) failed %@", @#a1, @#a2, _failure]; \
+ NSString *_expression = [NSString stringWithFormat:@"((%@) != (%@)) failed %@", @#a1, @#a2, _failure]; \
_GTMXCRegisterFailure(_expression, format); \
} \
})
@@ -734,12 +734,12 @@ do { \
// SENTE_BEGIN
/*" Generates a failure when !{ [a1 isEqualTo:a2] } is false
- (or one is nil and the other is not).
- _{a1 The object on the left.}
- _{a2 The object on the right.}
- _{description A format string as in the printf() function. Can be nil or
- an empty string but must be present.}
- _{... A variable number of arguments to the format string. Can be absent.}
+ (or one is nil and the other is not).
+ _{a1 The object on the left.}
+ _{a2 The object on the right.}
+ _{description A format string as in the printf() function. Can be nil or
+ an empty string but must be present.}
+ _{... A variable number of arguments to the format string. Can be absent.}
"*/
#define STAssertEqualObjects(a1, a2, description, ...) \
do { \
diff --git a/UnitTesting/GTMSenTestCase.m b/UnitTesting/GTMSenTestCase.m
index b7a59a3..5236c51 100644
--- a/UnitTesting/GTMSenTestCase.m
+++ b/UnitTesting/GTMSenTestCase.m
@@ -19,12 +19,7 @@
#import "GTMSenTestCase.h"
#import <unistd.h>
-#if GTM_IPHONE_SIMULATOR
#import <objc/message.h>
-#endif
-
-#import "GTMObjC2Runtime.h"
-#import "GTMUnitTestDevLog.h"
#if GTM_IPHONE_SDK
#import <UIKit/UIKit.h>
@@ -401,22 +396,6 @@ static NSInteger MethodSort(id a, id b, void *context) {
@implementation GTMTestCase
-- (void)invokeTest {
- NSAutoreleasePool *localPool = [[NSAutoreleasePool alloc] init];
- Class devLogClass = NSClassFromString(@"GTMUnitTestDevLog");
- if (devLogClass) {
- [devLogClass performSelector:@selector(enableTracking)];
- [devLogClass performSelector:@selector(verifyNoMoreLogsExpected)];
-
- }
- [super invokeTest];
- if (devLogClass) {
- [devLogClass performSelector:@selector(verifyNoMoreLogsExpected)];
- [devLogClass performSelector:@selector(disableTracking)];
- }
- [localPool drain];
-}
-
+ (BOOL)isAbstractTestCase {
NSString *name = NSStringFromClass(self);
return [name rangeOfString:@"AbstractTest"].location != NSNotFound;
diff --git a/UnitTesting/GTMSenTestCaseTest.m b/UnitTesting/GTMSenTestCaseTest.m
index 9d9a594..33055ad 100644
--- a/UnitTesting/GTMSenTestCaseTest.m
+++ b/UnitTesting/GTMSenTestCaseTest.m
@@ -16,6 +16,15 @@
// the License.
//
+#import "GTMDefines.h"
+
+// This test currently executes under XCTest and under the GTM SenTest replacement.
+#if !GTM_USING_XCTEST
+#define XCTAssertFalse STAssertFalse
+#define XCTAssertEqual STAssertEquals
+#define XCTAssertTrue STAssertTrue
+#endif // !GTM_USING_XCTEST
+
#import "GTMSenTestCase.h"
// These make use of the fact that methods are run in alphebetical order
@@ -39,8 +48,8 @@ static int gZzCheckCalls_ = 0;
@implementation GTMTestingAbstractTest
- (void)testAbstractUnitTest {
- STAssertFalse([self isMemberOfClass:[GTMTestingAbstractTest class]],
- @"test should not run on the abstract class");
+ XCTAssertFalse([self isMemberOfClass:[GTMTestingAbstractTest class]],
+ @"test should not run on the abstract class");
++gAbstractCalls_;
}
@@ -51,11 +60,12 @@ static int gZzCheckCalls_ = 0;
- (void)testZZCheck {
++gZzCheckCalls_;
if ([self isMemberOfClass:[GTMTestingTestOne class]]) {
- STAssertEquals(gAbstractCalls_, 1,
+ XCTAssertEqual(gAbstractCalls_, 1,
@"wrong number of abstract calls at this point");
} else {
- STAssertTrue([self isMemberOfClass:[GTMTestingTestTwo class]], nil);
- STAssertEquals(gAbstractCalls_, 2,
+ XCTAssertTrue([self isMemberOfClass:[GTMTestingTestTwo class]],
+ @"Not member of class");
+ XCTAssertEqual(gAbstractCalls_, 2,
@"wrong number of abstract calls at this point");
}
}
@@ -66,7 +76,7 @@ static int gZzCheckCalls_ = 0;
- (void)testZZZCheck {
// Test defined at this leaf, it should always run, check on the other methods.
- STAssertEquals(gZzCheckCalls_, 2, @"the parent class method wasn't called");
+ XCTAssertEqual(gZzCheckCalls_, 2, @"the parent class method wasn't called");
}
@end
diff --git a/UnitTesting/GTMTestTimerTest.m b/UnitTesting/GTMTestTimerTest.m
index 86f9d22..27758ff 100644
--- a/UnitTesting/GTMTestTimerTest.m
+++ b/UnitTesting/GTMTestTimerTest.m
@@ -6,9 +6,9 @@
// 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
@@ -25,32 +25,32 @@
@implementation GTMTestTimerTest
- (void)testTimer {
GTMTestTimer *timer = GTMTestTimerCreate();
- STAssertNotNULL(timer, nil);
+ XCTAssertNotNULL(timer);
GTMTestTimerRetain(timer);
GTMTestTimerRelease(timer);
- STAssertEqualsWithAccuracy(GTMTestTimerGetSeconds(timer), 0.0, 0.0, nil);
+ XCTAssertEqualWithAccuracy(GTMTestTimerGetSeconds(timer), 0.0, 0.0);
GTMTestTimerStart(timer);
- STAssertTrue(GTMTestTimerIsRunning(timer), nil);
+ XCTAssertTrue(GTMTestTimerIsRunning(timer));
NSRunLoop *loop = [NSRunLoop currentRunLoop];
[loop runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
GTMTestTimerStop(timer);
-
- // We use greater than (and an almost absurd less than) because
+
+ // We use greater than (and an almost absurd less than) because
// these tests are very dependant on machine load, and we don't want
// automated tests reporting false negatives.
- STAssertGreaterThan(GTMTestTimerGetSeconds(timer), 0.1, nil);
- STAssertGreaterThan(GTMTestTimerGetMilliseconds(timer), 100.0,nil);
- STAssertGreaterThan(GTMTestTimerGetMicroseconds(timer), 100000.0, nil);
-
+ XCTAssertGreaterThan(GTMTestTimerGetSeconds(timer), 0.1);
+ XCTAssertGreaterThan(GTMTestTimerGetMilliseconds(timer), 100.0);
+ XCTAssertGreaterThan(GTMTestTimerGetMicroseconds(timer), 100000.0);
+
// Check to make sure we're not WAY off the mark (by a factor of 10)
- STAssertLessThan(GTMTestTimerGetMicroseconds(timer), 1000000.0, nil);
-
+ XCTAssertLessThan(GTMTestTimerGetMicroseconds(timer), 1000000.0);
+
[loop runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
GTMTestTimerStart(timer);
[loop runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
- STAssertGreaterThan(GTMTestTimerGetSeconds(timer), 0.2, nil);
+ XCTAssertGreaterThan(GTMTestTimerGetSeconds(timer), 0.2);
GTMTestTimerStop(timer);
- STAssertEquals(GTMTestTimerGetIterations(timer), (NSUInteger)2, nil);
+ XCTAssertEqual(GTMTestTimerGetIterations(timer), (NSUInteger)2);
GTMTestTimerRelease(timer);
}
@end
diff --git a/UnitTesting/GTMUIKit+UnitTesting.h b/UnitTesting/GTMUIKit+UnitTesting.h
deleted file mode 100644
index a9052f2..0000000
--- a/UnitTesting/GTMUIKit+UnitTesting.h
+++ /dev/null
@@ -1,128 +0,0 @@
-//
-// GTMUIKit+UnitTesting.h
-//
-// Code for making unit testing of graphics/UI easier. Generally you
-// will only want to look at the macros:
-// GTMAssertDrawingEqualToFile
-// GTMAssertViewRepEqualToFile
-// and the protocol GTMUnitTestViewDrawer. When using these routines
-// make sure you are using device colors and not calibrated/generic colors
-// or else your test graphics WILL NOT match across devices/graphics cards.
-//
-// Copyright 2006-2008 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 <UIKit/UIKit.h>
-#import "GTMNSObject+UnitTesting.h"
-
-@protocol GTMUnitTestViewDrawer;
-
-// Fails when the |a1|'s drawing in an area |a2| does not equal the image file named |a3|.
-// See the description of the GTMAssertViewRepEqualToFile macro
-// to understand how |a3| is found and written out.
-// See the description of the GTMUnitTestView for a better idea
-// how the view works.
-// Implemented as a macro to match the rest of the SenTest macros.
-//
-// Args:
-// a1: The object that implements the GTMUnitTestViewDrawer protocol
-// that is doing the drawing.
-// a2: The size of the drawing
-// a3: The name of the image file to check against.
-// Do not include the extension
-// a4: contextInfo to pass to drawer
-// description: A format string as in the printf() function.
-// Can be nil or an empty string but must be present.
-// ...: A variable number of arguments to the format string. Can be absent.
-//
-
-#define GTMAssertDrawingEqualToFile(a1, a2, a3, a4, description, ...) \
- do { \
- id<GTMUnitTestViewDrawer> a1Drawer = (a1); \
- CGSize a2Size = (a2); \
- NSString* a3String = (a3); \
- void *a4ContextInfo = (a4); \
- CGRect frame = CGRectMake(0, 0, a2Size.width, a2Size.height); \
- GTMUnitTestView *view = [[[GTMUnitTestView alloc] initWithFrame:frame drawer:a1Drawer contextInfo:a4ContextInfo] autorelease]; \
- GTMAssertObjectImageEqualToImageNamed(view, a3String, @"%@", STComposeString(description, ##__VA_ARGS__)); \
- } while(0)
-
-// Category for making unit testing of graphics/UI easier.
-
-// Allows you to take a state of a view. Supports both image and state.
-// See GTMNSObject+UnitTesting.h for details.
-@interface UIView (GTMUnitTestingAdditions) <GTMUnitTestingImaging>
-
-// Encodes the state of an object in a manner suitable for comparing against a master state file
-// This enables us to determine whether the object is in a suitable state.
-//
-// Arguments:
-// inCoder - the coder to encode our state into
-- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder;
-
-// Returns whether gtm_unitTestEncodeState should recurse into subviews
-//
-// Returns:
-// should gtm_unitTestEncodeState pick up subview state.
-- (BOOL)gtm_shouldEncodeStateForSubviews;
-@end
-
-// Category to help UIImage testing. UIImage can be tested using
-// GTMAssertObjectImageEqualToImageNamed macro, which automatically creates
-// result images and diff images in case test fails.
-@interface UIImage (GTMUnitTestingAdditions) <GTMUnitTestingImaging>
-@end
-
-// A view that allows you to delegate out drawing using the formal
-// GTMUnitTestViewDelegate protocol
-// This is useful when writing up unit tests for visual elements.
-// Your test will often end up looking like this:
-// - (void)testFoo {
-// GTMAssertDrawingEqualToFile(self, CGSizeMake(200, 200), @"Foo", nil, nil);
-// }
-// and your testSuite will also implement the unitTestViewDrawRect method to do
-// it's actual drawing. The above creates a view of size 200x200 that draws
-// it's content using |self|'s unitTestViewDrawRect method and compares it to
-// the contents of the file Foo.tif to make sure it's valid
-@interface GTMUnitTestView : UIView {
- @private
- id<GTMUnitTestViewDrawer> drawer_; // delegate for doing drawing (STRONG)
- void* contextInfo_; // info passed in by user for them to use when drawing
-}
-
-// Create a GTMUnitTestView.
-//
-// Args:
-// rect: the area to draw.
-// drawer: the object that will do the drawing via the GTMUnitTestViewDrawer
-// protocol
-// contextInfo:
-- (id)initWithFrame:(CGRect)frame drawer:(id<GTMUnitTestViewDrawer>)drawer contextInfo:(void*)contextInfo;
-
-@end
-
-/// \cond Protocols
-
-// Formal protocol for doing unit testing of views. See description of
-// GTMUnitTestView for details.
-@protocol GTMUnitTestViewDrawer <NSObject>
-
-// Draw the view. Equivalent to drawRect on a standard UIView.
-//
-// Args:
-// rect: the area to draw.
-- (void)gtm_unitTestViewDrawRect:(CGRect)rect contextInfo:(void*)contextInfo;
-
-@end
diff --git a/UnitTesting/GTMUIKit+UnitTesting.m b/UnitTesting/GTMUIKit+UnitTesting.m
deleted file mode 100644
index 7d3f200..0000000
--- a/UnitTesting/GTMUIKit+UnitTesting.m
+++ /dev/null
@@ -1,122 +0,0 @@
-//
-// GTMUIKit+UnitTesting.m
-//
-// Category for making unit testing of graphics/UI easier.
-// Allows you to save a view out to a image file, and compare a view
-// with a previously stored representation to make sure it hasn't changed.
-//
-// Copyright 2006-2008 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 "GTMUIKit+UnitTesting.h"
-#import "GTMCALayer+UnitTesting.h"
-#import "GTMDefines.h"
-
-#if !GTM_IPHONE_SDK
-#error This file is for iPhone use only
-#endif // GTM_IPHONE_SDK
-
-// A view that allows you to delegate out drawing using the formal
-// GTMUnitTestViewDelegate protocol above. This is useful when writing up unit
-// tests for visual elements.
-// Your test will often end up looking like this:
-// - (void)testFoo {
-// GTMAssertDrawingEqualToFile(self, CGSizeMake(200, 200), @"Foo", nil, nil);
-// }
-// and your testSuite will also implement the unitTestViewDrawRect method to do
-// it's actual drawing. The above creates a view of size 200x200 that draws
-// it's content using |self|'s unitTestViewDrawRect method and compares it to
-// the contents of the file Foo.tif to make sure it's valid
-@implementation GTMUnitTestView
-
-- (id)initWithFrame:(CGRect)frame
- drawer:(id<GTMUnitTestViewDrawer>)drawer
- contextInfo:(void*)contextInfo{
- self = [super initWithFrame:frame];
- if (self != nil) {
- drawer_ = [drawer retain];
- contextInfo_ = contextInfo;
- }
- return self;
-}
-
-- (void)dealloc {
- [drawer_ release];
- [super dealloc];
-}
-
-- (void)drawRect:(CGRect)rect {
- [drawer_ gtm_unitTestViewDrawRect:rect contextInfo:contextInfo_];
-}
-
-@end
-
-@implementation UIView (GTMUnitTestingAdditions)
-
-// Returns an image containing a representation of the object
-// suitable for use in comparing against a master image.
-// NB this means that all colors should be from "NSDevice" color space
-// Does all of it's drawing with smoothfonts and antialiasing off
-// to avoid issues with font smoothing settings and antialias differences
-// between ppc and x86.
-//
-// Returns:
-// an image of the object
-- (CGImageRef)gtm_unitTestImage {
- CALayer* layer = [self layer];
- return [layer gtm_unitTestImage];
-}
-
-// Encodes the state of an object in a manner suitable for comparing
-// against a master state file so we can determine whether the
-// object is in a suitable state.
-//
-// Arguments:
-// inCoder - the coder to encode our state into
-- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder {
- [super gtm_unitTestEncodeState:inCoder];
- [inCoder encodeBool:[self isHidden] forKey:@"ViewIsHidden"];
- CALayer* layer = [self layer];
- if (layer) {
- [layer gtm_unitTestEncodeState:inCoder];
- }
- if ([self gtm_shouldEncodeStateForSubviews]) {
- int i = 0;
- for (UIView *subview in [self subviews]) {
- [inCoder encodeObject:subview
- forKey:[NSString stringWithFormat:@"ViewSubView %d", i]];
- i++;
- }
- }
-}
-
-// Returns whether gtm_unitTestEncodeState should recurse into subviews
-//
-// Returns:
-// should gtm_unitTestEncodeState pick up subview state.
-- (BOOL)gtm_shouldEncodeStateForSubviews {
- return YES;
-}
-
-- (BOOL)gtm_shouldEncodeStateForSublayersOfLayer:(CALayer*)layer {
- return NO;
-}
-@end
-
-@implementation UIImage (GTMUnitTestingAdditions)
-- (CGImageRef)gtm_unitTestImage {
- return [self CGImage];
-}
-@end
diff --git a/UnitTesting/GTMUIKit+UnitTestingTest.m b/UnitTesting/GTMUIKit+UnitTestingTest.m
deleted file mode 100644
index 4b0387c..0000000
--- a/UnitTesting/GTMUIKit+UnitTestingTest.m
+++ /dev/null
@@ -1,67 +0,0 @@
-//
-// GTMUIKit+UnitTestingTest.m
-//
-// Copyright 2006-2008 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 <CoreGraphics/CoreGraphics.h>
-#import "GTMUIKit+UnitTesting.h"
-#import "GTMSenTestCase.h"
-
-@interface GTMUIView_UnitTestingTest : GTMTestCase <GTMUnitTestViewDrawer>
-@end
-
-@implementation GTMUIView_UnitTestingTest
-
-- (void)testDrawing {
- GTMAssertDrawingEqualToFile(self,
- CGSizeMake(200,200),
- @"GTMUIViewUnitTestingTest",
- [UIApplication sharedApplication],
- nil);
-}
-
-- (void)testState {
- UIView *view = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 50, 50)] autorelease];
- UIView *subview = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 50, 50)] autorelease];
- [view addSubview:subview];
- GTMAssertObjectStateEqualToStateNamed(view, @"GTMUIViewUnitTestingTest", nil);
-}
-
-- (void)testUIImage {
- NSString* name = @"GTMUIViewUnitTestingTest";
- NSBundle *bundle = [NSBundle bundleForClass:[self class]];
- NSString *imagePath = [bundle pathForResource:name ofType:@"png"];
- STAssertNotNil(imagePath, nil);
- UIImage* image = [UIImage imageWithContentsOfFile:imagePath];
- GTMAssertObjectImageEqualToImageNamed(image, name, nil);
-}
-
-- (void)gtm_unitTestViewDrawRect:(CGRect)rect contextInfo:(void*)contextInfo {
- UIApplication *app = [UIApplication sharedApplication];
- STAssertEqualObjects(app,
- contextInfo,
- @"Should be a UIApplication");
- CGPoint center = CGPointMake(CGRectGetMidX(rect),
- CGRectGetMidY(rect));
- rect = CGRectMake(center.x - 50, center.y - 50, 100, 100);
- CGContextRef context = UIGraphicsGetCurrentContext();
- CGContextAddEllipseInRect(context, rect);
- CGContextSetLineWidth(context, 5);
- [[UIColor redColor] set];
- CGContextStrokePath(context);
-}
-
-@end
diff --git a/UnitTesting/GTMUIUnitTestingHarness/English.lproj/MainMenu.xib b/UnitTesting/GTMUIUnitTestingHarness/English.lproj/MainMenu.xib
index 2a5aa22..346c749 100644
--- a/UnitTesting/GTMUIUnitTestingHarness/English.lproj/MainMenu.xib
+++ b/UnitTesting/GTMUIUnitTestingHarness/English.lproj/MainMenu.xib
@@ -1,2065 +1,311 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.03">
- <data>
- <int key="IBDocument.SystemTarget">0</int>
- <string key="IBDocument.SystemVersion">9G55</string>
- <string key="IBDocument.InterfaceBuilderVersion">677</string>
- <string key="IBDocument.AppKitVersion">949.43</string>
- <string key="IBDocument.HIToolboxVersion">353.00</string>
- <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <integer value="377"/>
- </object>
- <object class="NSArray" key="IBDocument.PluginDependencies">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>com.apple.InterfaceBuilderKit</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- </object>
- <object class="NSMutableDictionary" key="IBDocument.Metadata">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
- <object class="NSMutableArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
- </object>
- <object class="NSMutableArray" key="IBDocument.RootObjects" id="1048">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSCustomObject" id="1021">
- <string key="NSClassName">NSApplication</string>
- </object>
- <object class="NSCustomObject" id="1014">
- <string key="NSClassName">FirstResponder</string>
- </object>
- <object class="NSCustomObject" id="1050">
- <string key="NSClassName">NSApplication</string>
- </object>
- <object class="NSMenu" id="649796088">
- <string key="NSTitle">AMainMenu</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="694149608">
- <reference key="NSMenu" ref="649796088"/>
- <string key="NSTitle">NewApplication</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <object class="NSCustomResource" key="NSOnImage" id="35465992">
- <string key="NSClassName">NSImage</string>
- <string key="NSResourceName">NSMenuCheckmark</string>
- </object>
- <object class="NSCustomResource" key="NSMixedImage" id="513340101">
- <string key="NSClassName">NSImage</string>
- <string key="NSResourceName">NSMenuMixedState</string>
- </object>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="110575045">
- <string key="NSTitle">NewApplication</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="238522557">
- <reference key="NSMenu" ref="110575045"/>
- <string key="NSTitle">About NewApplication</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- <object class="NSMenuItem" id="304266470">
- <reference key="NSMenu" ref="110575045"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- <object class="NSMenuItem" id="609285721">
- <reference key="NSMenu" ref="110575045"/>
- <string type="base64-UTF8" key="NSTitle">UHJlZmVyZW5jZXPigKY</string>
- <string key="NSKeyEquiv">,</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- <object class="NSMenuItem" id="481834944">
- <reference key="NSMenu" ref="110575045"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- <object class="NSMenuItem" id="1046388886">
- <reference key="NSMenu" ref="110575045"/>
- <string key="NSTitle">Services</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="752062318">
- <string key="NSTitle">Services</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
- <string key="NSName">_NSServicesMenu</string>
- </object>
- </object>
- <object class="NSMenuItem" id="646227648">
- <reference key="NSMenu" ref="110575045"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- <object class="NSMenuItem" id="755159360">
- <reference key="NSMenu" ref="110575045"/>
- <string key="NSTitle">Hide NewApplication</string>
- <string key="NSKeyEquiv">h</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- <object class="NSMenuItem" id="342932134">
- <reference key="NSMenu" ref="110575045"/>
- <string key="NSTitle">Hide Others</string>
- <string key="NSKeyEquiv">h</string>
- <int key="NSKeyEquivModMask">1572864</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- <object class="NSMenuItem" id="908899353">
- <reference key="NSMenu" ref="110575045"/>
- <string key="NSTitle">Show All</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- <object class="NSMenuItem" id="1056857174">
- <reference key="NSMenu" ref="110575045"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- <object class="NSMenuItem" id="632727374">
- <reference key="NSMenu" ref="110575045"/>
- <string key="NSTitle">Quit NewApplication</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- </object>
- <string key="NSName">_NSAppleMenu</string>
- </object>
- </object>
- <object class="NSMenuItem" id="379814623">
- <reference key="NSMenu" ref="649796088"/>
- <string key="NSTitle">File</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="720053764">
- <string key="NSTitle">File</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="705341025">
- <reference key="NSMenu" ref="720053764"/>
- <string key="NSTitle">New</string>
- <string key="NSKeyEquiv">n</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- <object class="NSMenuItem" id="722745758">
- <reference key="NSMenu" ref="720053764"/>
- <string type="base64-UTF8" key="NSTitle">T3BlbuKApg</string>
- <string key="NSKeyEquiv">o</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- <object class="NSMenuItem" id="1025936716">
- <reference key="NSMenu" ref="720053764"/>
- <string key="NSTitle">Open Recent</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="1065607017">
- <string key="NSTitle">Open Recent</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="759406840">
- <reference key="NSMenu" ref="1065607017"/>
- <string key="NSTitle">Clear Menu</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- </object>
- <string key="NSName">_NSRecentDocumentsMenu</string>
- </object>
- </object>
- <object class="NSMenuItem" id="425164168">
- <reference key="NSMenu" ref="720053764"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- <object class="NSMenuItem" id="776162233">
- <reference key="NSMenu" ref="720053764"/>
- <string key="NSTitle">Close</string>
- <string key="NSKeyEquiv">w</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- <object class="NSMenuItem" id="1023925487">
- <reference key="NSMenu" ref="720053764"/>
- <string key="NSTitle">Save</string>
- <string key="NSKeyEquiv">s</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- <object class="NSMenuItem" id="117038363">
- <reference key="NSMenu" ref="720053764"/>
- <string type="base64-UTF8" key="NSTitle">U2F2ZSBBc+KApg</string>
- <string key="NSKeyEquiv">S</string>
- <int key="NSKeyEquivModMask">1179648</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- <object class="NSMenuItem" id="579971712">
- <reference key="NSMenu" ref="720053764"/>
- <string key="NSTitle">Revert to Saved</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- <object class="NSMenuItem" id="1010469920">
- <reference key="NSMenu" ref="720053764"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- <object class="NSMenuItem" id="294629803">
- <reference key="NSMenu" ref="720053764"/>
- <string key="NSTitle">Page Setup...</string>
- <string key="NSKeyEquiv">P</string>
- <int key="NSKeyEquivModMask">1179648</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- <string key="NSToolTip"/>
- </object>
- <object class="NSMenuItem" id="49223823">
- <reference key="NSMenu" ref="720053764"/>
- <string type="base64-UTF8" key="NSTitle">UHJpbnTigKY</string>
- <string key="NSKeyEquiv">p</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- </object>
- </object>
- </object>
- <object class="NSMenuItem" id="952259628">
- <reference key="NSMenu" ref="649796088"/>
- <string key="NSTitle">Edit</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="789758025">
- <string key="NSTitle">Edit</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="1058277027">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Undo</string>
- <string key="NSKeyEquiv">z</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- <object class="NSMenuItem" id="790794224">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Redo</string>
- <string key="NSKeyEquiv">Z</string>
- <int key="NSKeyEquivModMask">1179648</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- <object class="NSMenuItem" id="1040322652">
- <reference key="NSMenu" ref="789758025"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- <object class="NSMenuItem" id="296257095">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Cut</string>
- <string key="NSKeyEquiv">x</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- <object class="NSMenuItem" id="860595796">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Copy</string>
- <string key="NSKeyEquiv">c</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- <object class="NSMenuItem" id="29853731">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Paste</string>
- <string key="NSKeyEquiv">v</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- <object class="NSMenuItem" id="437104165">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Delete</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- <object class="NSMenuItem" id="583158037">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Select All</string>
- <string key="NSKeyEquiv">a</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- <object class="NSMenuItem" id="212016141">
- <reference key="NSMenu" ref="789758025"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- <object class="NSMenuItem" id="892235320">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Find</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="963351320">
- <string key="NSTitle">Find</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="447796847">
- <reference key="NSMenu" ref="963351320"/>
- <string type="base64-UTF8" key="NSTitle">RmluZOKApg</string>
- <string key="NSKeyEquiv">f</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- <int key="NSTag">1</int>
- </object>
- <object class="NSMenuItem" id="326711663">
- <reference key="NSMenu" ref="963351320"/>
- <string key="NSTitle">Find Next</string>
- <string key="NSKeyEquiv">g</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- <int key="NSTag">2</int>
- </object>
- <object class="NSMenuItem" id="270902937">
- <reference key="NSMenu" ref="963351320"/>
- <string key="NSTitle">Find Previous</string>
- <string key="NSKeyEquiv">G</string>
- <int key="NSKeyEquivModMask">1179648</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- <int key="NSTag">3</int>
- </object>
- <object class="NSMenuItem" id="159080638">
- <reference key="NSMenu" ref="963351320"/>
- <string key="NSTitle">Use Selection for Find</string>
- <string key="NSKeyEquiv">e</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- <int key="NSTag">7</int>
- </object>
- <object class="NSMenuItem" id="88285865">
- <reference key="NSMenu" ref="963351320"/>
- <string key="NSTitle">Jump to Selection</string>
- <string key="NSKeyEquiv">j</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- </object>
- </object>
- </object>
- <object class="NSMenuItem" id="972420730">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Spelling and Grammar</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="769623530">
- <string key="NSTitle">Spelling and Grammar</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="679648819">
- <reference key="NSMenu" ref="769623530"/>
- <string type="base64-UTF8" key="NSTitle">U2hvdyBTcGVsbGluZ+KApg</string>
- <string key="NSKeyEquiv">:</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- <object class="NSMenuItem" id="96193923">
- <reference key="NSMenu" ref="769623530"/>
- <string key="NSTitle">Check Spelling</string>
- <string key="NSKeyEquiv">;</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- <object class="NSMenuItem" id="948374510">
- <reference key="NSMenu" ref="769623530"/>
- <string key="NSTitle">Check Spelling While Typing</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- <object class="NSMenuItem" id="967646866">
- <reference key="NSMenu" ref="769623530"/>
- <string key="NSTitle">Check Grammar With Spelling</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- </object>
- </object>
- </object>
- <object class="NSMenuItem" id="507821607">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Substitutions</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="698887838">
- <string key="NSTitle">Substitutions</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="605118523">
- <reference key="NSMenu" ref="698887838"/>
- <string key="NSTitle">Smart Copy/Paste</string>
- <string key="NSKeyEquiv">f</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- <int key="NSTag">1</int>
- </object>
- <object class="NSMenuItem" id="197661976">
- <reference key="NSMenu" ref="698887838"/>
- <string key="NSTitle">Smart Quotes</string>
- <string key="NSKeyEquiv">g</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- <int key="NSTag">2</int>
- </object>
- <object class="NSMenuItem" id="708854459">
- <reference key="NSMenu" ref="698887838"/>
- <string key="NSTitle">Smart Links</string>
- <string key="NSKeyEquiv">G</string>
- <int key="NSKeyEquivModMask">1179648</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- <int key="NSTag">3</int>
- </object>
- </object>
- </object>
- </object>
- <object class="NSMenuItem" id="676164635">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Speech</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="785027613">
- <string key="NSTitle">Speech</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="731782645">
- <reference key="NSMenu" ref="785027613"/>
- <string key="NSTitle">Start Speaking</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- <object class="NSMenuItem" id="680220178">
- <reference key="NSMenu" ref="785027613"/>
- <string key="NSTitle">Stop Speaking</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- </object>
- </object>
- </object>
- </object>
- </object>
- </object>
- <object class="NSMenuItem" id="626404410">
- <reference key="NSMenu" ref="649796088"/>
- <string type="base64-UTF8" key="NSTitle">wqxNZW51IFRpdGxlA</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="502084290">
- <string type="base64-UTF8" key="NSTitle">wqxNZW51IFRpdGxlA</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="83534624">
- <reference key="NSMenu" ref="502084290"/>
- <string type="base64-UTF8" key="NSTitle">wqxNZW51IEl0ZW0</string>
- <string key="NSKeyEquiv">t</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- <object class="NSMenuItem" id="1028416764">
- <reference key="NSMenu" ref="502084290"/>
- <string key="NSTitle">Show Colors</string>
- <string key="NSKeyEquiv">C</string>
- <int key="NSKeyEquivModMask">1179648</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- </object>
- </object>
- </object>
- <object class="NSMenuItem" id="586577488">
- <reference key="NSMenu" ref="649796088"/>
- <string key="NSTitle">View</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="466310130">
- <string key="NSTitle">View</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="102151532">
- <reference key="NSMenu" ref="466310130"/>
- <string key="NSTitle">Show Toolbar</string>
- <string key="NSKeyEquiv">t</string>
- <int key="NSKeyEquivModMask">1572864</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- <object class="NSMenuItem" id="237841660">
- <reference key="NSMenu" ref="466310130"/>
- <string type="base64-UTF8" key="NSTitle">Q3VzdG9taXplIFRvb2xiYXLigKY</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- </object>
- </object>
- </object>
- <object class="NSMenuItem" id="391199113">
- <reference key="NSMenu" ref="649796088"/>
- <string key="NSTitle">Help</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="374024848">
- <string key="NSTitle">Help</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="238773614">
- <reference key="NSMenu" ref="374024848"/>
- <string key="NSTitle">NewApplication Help</string>
- <string key="NSKeyEquiv">?</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="513340101"/>
- </object>
- </object>
- </object>
- </object>
- </object>
- <string key="NSName">_NSMainMenu</string>
- </object>
- <object class="NSCustomObject" id="728136523">
- <string key="NSClassName">GTMUILocalizer</string>
- </object>
- </object>
- <object class="IBObjectContainer" key="IBDocument.Objects">
- <object class="NSMutableArray" key="connectionRecords">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">print:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="49223823"/>
- </object>
- <int key="connectionID">86</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">runPageLayout:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="294629803"/>
- </object>
- <int key="connectionID">87</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">clearRecentDocuments:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="759406840"/>
- </object>
- <int key="connectionID">127</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">orderFrontStandardAboutPanel:</string>
- <reference key="source" ref="1021"/>
- <reference key="destination" ref="238522557"/>
- </object>
- <int key="connectionID">142</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">performClose:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="776162233"/>
- </object>
- <int key="connectionID">193</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">toggleContinuousSpellChecking:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="948374510"/>
- </object>
- <int key="connectionID">222</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">undo:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="1058277027"/>
- </object>
- <int key="connectionID">223</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">copy:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="860595796"/>
- </object>
- <int key="connectionID">224</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">checkSpelling:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="96193923"/>
- </object>
- <int key="connectionID">225</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">paste:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="29853731"/>
- </object>
- <int key="connectionID">226</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">stopSpeaking:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="680220178"/>
- </object>
- <int key="connectionID">227</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">cut:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="296257095"/>
- </object>
- <int key="connectionID">228</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">showGuessPanel:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="679648819"/>
- </object>
- <int key="connectionID">230</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">redo:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="790794224"/>
- </object>
- <int key="connectionID">231</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">selectAll:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="583158037"/>
- </object>
- <int key="connectionID">232</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">startSpeaking:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="731782645"/>
- </object>
- <int key="connectionID">233</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">delete:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="437104165"/>
- </object>
- <int key="connectionID">235</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">performFindPanelAction:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="447796847"/>
- </object>
- <int key="connectionID">241</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">centerSelectionInVisibleArea:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="88285865"/>
- </object>
- <int key="connectionID">245</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">toggleGrammarChecking:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="967646866"/>
- </object>
- <int key="connectionID">347</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">toggleSmartInsertDelete:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="605118523"/>
- </object>
- <int key="connectionID">355</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">toggleAutomaticQuoteSubstitution:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="197661976"/>
- </object>
- <int key="connectionID">356</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">toggleAutomaticLinkDetection:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="708854459"/>
- </object>
- <int key="connectionID">357</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">showHelp:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="238773614"/>
- </object>
- <int key="connectionID">360</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">orderFrontColorPanel:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="1028416764"/>
- </object>
- <int key="connectionID">361</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">saveDocument:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="1023925487"/>
- </object>
- <int key="connectionID">362</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">saveDocumentAs:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="117038363"/>
- </object>
- <int key="connectionID">363</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">revertDocumentToSaved:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="579971712"/>
- </object>
- <int key="connectionID">364</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">runToolbarCustomizationPalette:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="237841660"/>
- </object>
- <int key="connectionID">365</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">toggleToolbarShown:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="102151532"/>
- </object>
- <int key="connectionID">366</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">hide:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="755159360"/>
- </object>
- <int key="connectionID">367</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">hideOtherApplications:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="342932134"/>
- </object>
- <int key="connectionID">368</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">terminate:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="632727374"/>
- </object>
- <int key="connectionID">369</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">unhideAllApplications:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="908899353"/>
- </object>
- <int key="connectionID">370</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">newDocument:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="705341025"/>
- </object>
- <int key="connectionID">373</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">openDocument:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="722745758"/>
- </object>
- <int key="connectionID">374</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBOutletConnection" key="connection">
- <string key="label">owner_</string>
- <reference key="source" ref="728136523"/>
- <reference key="destination" ref="1021"/>
- </object>
- <int key="connectionID">376</int>
- </object>
- </object>
- <object class="IBMutableOrderedSet" key="objectRecords">
- <object class="NSArray" key="orderedObjects">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="IBObjectRecord">
- <int key="objectID">0</int>
- <object class="NSArray" key="object" id="1049">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
- <reference key="children" ref="1048"/>
- <nil key="parent"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">-2</int>
- <reference key="object" ref="1021"/>
- <reference key="parent" ref="1049"/>
- <string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">-1</int>
- <reference key="object" ref="1014"/>
- <reference key="parent" ref="1049"/>
- <string key="objectName">First Responder</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">-3</int>
- <reference key="object" ref="1050"/>
- <reference key="parent" ref="1049"/>
- <string key="objectName">Application</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">29</int>
- <reference key="object" ref="649796088"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="694149608"/>
- <reference ref="391199113"/>
- <reference ref="952259628"/>
- <reference ref="379814623"/>
- <reference ref="586577488"/>
- <reference ref="626404410"/>
- </object>
- <reference key="parent" ref="1049"/>
- <string key="objectName">MainMenu</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">56</int>
- <reference key="object" ref="694149608"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="110575045"/>
- </object>
- <reference key="parent" ref="649796088"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">103</int>
- <reference key="object" ref="391199113"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="374024848"/>
- </object>
- <reference key="parent" ref="649796088"/>
- <string key="objectName">1</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">217</int>
- <reference key="object" ref="952259628"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="789758025"/>
- </object>
- <reference key="parent" ref="649796088"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">83</int>
- <reference key="object" ref="379814623"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="720053764"/>
- </object>
- <reference key="parent" ref="649796088"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">81</int>
- <reference key="object" ref="720053764"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="1023925487"/>
- <reference ref="117038363"/>
- <reference ref="49223823"/>
- <reference ref="722745758"/>
- <reference ref="705341025"/>
- <reference ref="1025936716"/>
- <reference ref="294629803"/>
- <reference ref="776162233"/>
- <reference ref="425164168"/>
- <reference ref="579971712"/>
- <reference ref="1010469920"/>
- </object>
- <reference key="parent" ref="379814623"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">75</int>
- <reference key="object" ref="1023925487"/>
- <reference key="parent" ref="720053764"/>
- <string key="objectName">3</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">80</int>
- <reference key="object" ref="117038363"/>
- <reference key="parent" ref="720053764"/>
- <string key="objectName">8</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">78</int>
- <reference key="object" ref="49223823"/>
- <reference key="parent" ref="720053764"/>
- <string key="objectName">6</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">72</int>
- <reference key="object" ref="722745758"/>
- <reference key="parent" ref="720053764"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">82</int>
- <reference key="object" ref="705341025"/>
- <reference key="parent" ref="720053764"/>
- <string key="objectName">9</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">124</int>
- <reference key="object" ref="1025936716"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="1065607017"/>
- </object>
- <reference key="parent" ref="720053764"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">77</int>
- <reference key="object" ref="294629803"/>
- <reference key="parent" ref="720053764"/>
- <string key="objectName">5</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">73</int>
- <reference key="object" ref="776162233"/>
- <reference key="parent" ref="720053764"/>
- <string key="objectName">1</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">79</int>
- <reference key="object" ref="425164168"/>
- <reference key="parent" ref="720053764"/>
- <string key="objectName">7</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">112</int>
- <reference key="object" ref="579971712"/>
- <reference key="parent" ref="720053764"/>
- <string key="objectName">10</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">74</int>
- <reference key="object" ref="1010469920"/>
- <reference key="parent" ref="720053764"/>
- <string key="objectName">2</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">125</int>
- <reference key="object" ref="1065607017"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="759406840"/>
- </object>
- <reference key="parent" ref="1025936716"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">126</int>
- <reference key="object" ref="759406840"/>
- <reference key="parent" ref="1065607017"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">205</int>
- <reference key="object" ref="789758025"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="437104165"/>
- <reference ref="583158037"/>
- <reference ref="1058277027"/>
- <reference ref="212016141"/>
- <reference ref="296257095"/>
- <reference ref="29853731"/>
- <reference ref="860595796"/>
- <reference ref="1040322652"/>
- <reference ref="790794224"/>
- <reference ref="892235320"/>
- <reference ref="972420730"/>
- <reference ref="676164635"/>
- <reference ref="507821607"/>
- </object>
- <reference key="parent" ref="952259628"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">202</int>
- <reference key="object" ref="437104165"/>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">198</int>
- <reference key="object" ref="583158037"/>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">207</int>
- <reference key="object" ref="1058277027"/>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">214</int>
- <reference key="object" ref="212016141"/>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">199</int>
- <reference key="object" ref="296257095"/>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">203</int>
- <reference key="object" ref="29853731"/>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">197</int>
- <reference key="object" ref="860595796"/>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">206</int>
- <reference key="object" ref="1040322652"/>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">215</int>
- <reference key="object" ref="790794224"/>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">218</int>
- <reference key="object" ref="892235320"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="963351320"/>
- </object>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">216</int>
- <reference key="object" ref="972420730"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="769623530"/>
- </object>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">200</int>
- <reference key="object" ref="769623530"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="948374510"/>
- <reference ref="96193923"/>
- <reference ref="679648819"/>
- <reference ref="967646866"/>
- </object>
- <reference key="parent" ref="972420730"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">219</int>
- <reference key="object" ref="948374510"/>
- <reference key="parent" ref="769623530"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">201</int>
- <reference key="object" ref="96193923"/>
- <reference key="parent" ref="769623530"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">204</int>
- <reference key="object" ref="679648819"/>
- <reference key="parent" ref="769623530"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">220</int>
- <reference key="object" ref="963351320"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="270902937"/>
- <reference ref="88285865"/>
- <reference ref="159080638"/>
- <reference ref="326711663"/>
- <reference ref="447796847"/>
- </object>
- <reference key="parent" ref="892235320"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">213</int>
- <reference key="object" ref="270902937"/>
- <reference key="parent" ref="963351320"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">210</int>
- <reference key="object" ref="88285865"/>
- <reference key="parent" ref="963351320"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">221</int>
- <reference key="object" ref="159080638"/>
- <reference key="parent" ref="963351320"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">208</int>
- <reference key="object" ref="326711663"/>
- <reference key="parent" ref="963351320"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">209</int>
- <reference key="object" ref="447796847"/>
- <reference key="parent" ref="963351320"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">106</int>
- <reference key="object" ref="374024848"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="238773614"/>
- </object>
- <reference key="parent" ref="391199113"/>
- <string key="objectName">2</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">111</int>
- <reference key="object" ref="238773614"/>
- <reference key="parent" ref="374024848"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">57</int>
- <reference key="object" ref="110575045"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="238522557"/>
- <reference ref="755159360"/>
- <reference ref="908899353"/>
- <reference ref="632727374"/>
- <reference ref="646227648"/>
- <reference ref="609285721"/>
- <reference ref="481834944"/>
- <reference ref="304266470"/>
- <reference ref="1046388886"/>
- <reference ref="1056857174"/>
- <reference ref="342932134"/>
- </object>
- <reference key="parent" ref="694149608"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">58</int>
- <reference key="object" ref="238522557"/>
- <reference key="parent" ref="110575045"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">134</int>
- <reference key="object" ref="755159360"/>
- <reference key="parent" ref="110575045"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">150</int>
- <reference key="object" ref="908899353"/>
- <reference key="parent" ref="110575045"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">136</int>
- <reference key="object" ref="632727374"/>
- <reference key="parent" ref="110575045"/>
- <string key="objectName">1111</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">144</int>
- <reference key="object" ref="646227648"/>
- <reference key="parent" ref="110575045"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">129</int>
- <reference key="object" ref="609285721"/>
- <reference key="parent" ref="110575045"/>
- <string key="objectName">121</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">143</int>
- <reference key="object" ref="481834944"/>
- <reference key="parent" ref="110575045"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">236</int>
- <reference key="object" ref="304266470"/>
- <reference key="parent" ref="110575045"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">131</int>
- <reference key="object" ref="1046388886"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="752062318"/>
- </object>
- <reference key="parent" ref="110575045"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">149</int>
- <reference key="object" ref="1056857174"/>
- <reference key="parent" ref="110575045"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">145</int>
- <reference key="object" ref="342932134"/>
- <reference key="parent" ref="110575045"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">130</int>
- <reference key="object" ref="752062318"/>
- <reference key="parent" ref="1046388886"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">295</int>
- <reference key="object" ref="586577488"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="466310130"/>
- </object>
- <reference key="parent" ref="649796088"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">296</int>
- <reference key="object" ref="466310130"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="102151532"/>
- <reference ref="237841660"/>
- </object>
- <reference key="parent" ref="586577488"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">297</int>
- <reference key="object" ref="102151532"/>
- <reference key="parent" ref="466310130"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">298</int>
- <reference key="object" ref="237841660"/>
- <reference key="parent" ref="466310130"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">299</int>
- <reference key="object" ref="626404410"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="502084290"/>
- </object>
- <reference key="parent" ref="649796088"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">300</int>
- <reference key="object" ref="502084290"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="1028416764"/>
- <reference ref="83534624"/>
- </object>
- <reference key="parent" ref="626404410"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">345</int>
- <reference key="object" ref="1028416764"/>
- <reference key="parent" ref="502084290"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">211</int>
- <reference key="object" ref="676164635"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="785027613"/>
- </object>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">212</int>
- <reference key="object" ref="785027613"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="680220178"/>
- <reference ref="731782645"/>
- </object>
- <reference key="parent" ref="676164635"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">195</int>
- <reference key="object" ref="680220178"/>
- <reference key="parent" ref="785027613"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">196</int>
- <reference key="object" ref="731782645"/>
- <reference key="parent" ref="785027613"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">346</int>
- <reference key="object" ref="967646866"/>
- <reference key="parent" ref="769623530"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">348</int>
- <reference key="object" ref="507821607"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="698887838"/>
- </object>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">349</int>
- <reference key="object" ref="698887838"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="605118523"/>
- <reference ref="197661976"/>
- <reference ref="708854459"/>
- </object>
- <reference key="parent" ref="507821607"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">350</int>
- <reference key="object" ref="605118523"/>
- <reference key="parent" ref="698887838"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">351</int>
- <reference key="object" ref="197661976"/>
- <reference key="parent" ref="698887838"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">354</int>
- <reference key="object" ref="708854459"/>
- <reference key="parent" ref="698887838"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">375</int>
- <reference key="object" ref="728136523"/>
- <reference key="parent" ref="1049"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">377</int>
- <reference key="object" ref="83534624"/>
- <reference key="parent" ref="502084290"/>
- </object>
- </object>
- </object>
- <object class="NSMutableDictionary" key="flattenedProperties">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMutableArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>-1.IBPluginDependency</string>
- <string>-2.IBPluginDependency</string>
- <string>-3.IBPluginDependency</string>
- <string>103.IBPluginDependency</string>
- <string>103.ImportedFromIB2</string>
- <string>106.IBEditorWindowLastContentRect</string>
- <string>106.IBPluginDependency</string>
- <string>106.ImportedFromIB2</string>
- <string>106.editorWindowContentRectSynchronizationRect</string>
- <string>111.IBPluginDependency</string>
- <string>111.ImportedFromIB2</string>
- <string>112.IBPluginDependency</string>
- <string>112.ImportedFromIB2</string>
- <string>124.IBPluginDependency</string>
- <string>124.ImportedFromIB2</string>
- <string>125.IBPluginDependency</string>
- <string>125.ImportedFromIB2</string>
- <string>125.editorWindowContentRectSynchronizationRect</string>
- <string>126.IBPluginDependency</string>
- <string>126.ImportedFromIB2</string>
- <string>129.IBPluginDependency</string>
- <string>129.ImportedFromIB2</string>
- <string>130.IBPluginDependency</string>
- <string>130.ImportedFromIB2</string>
- <string>130.editorWindowContentRectSynchronizationRect</string>
- <string>131.IBPluginDependency</string>
- <string>131.ImportedFromIB2</string>
- <string>134.IBPluginDependency</string>
- <string>134.ImportedFromIB2</string>
- <string>136.IBPluginDependency</string>
- <string>136.ImportedFromIB2</string>
- <string>143.IBPluginDependency</string>
- <string>143.ImportedFromIB2</string>
- <string>144.IBPluginDependency</string>
- <string>144.ImportedFromIB2</string>
- <string>145.IBPluginDependency</string>
- <string>145.ImportedFromIB2</string>
- <string>149.IBPluginDependency</string>
- <string>149.ImportedFromIB2</string>
- <string>150.IBPluginDependency</string>
- <string>150.ImportedFromIB2</string>
- <string>195.IBPluginDependency</string>
- <string>195.ImportedFromIB2</string>
- <string>196.IBPluginDependency</string>
- <string>196.ImportedFromIB2</string>
- <string>197.IBPluginDependency</string>
- <string>197.ImportedFromIB2</string>
- <string>198.IBPluginDependency</string>
- <string>198.ImportedFromIB2</string>
- <string>199.IBPluginDependency</string>
- <string>199.ImportedFromIB2</string>
- <string>200.IBPluginDependency</string>
- <string>200.ImportedFromIB2</string>
- <string>200.editorWindowContentRectSynchronizationRect</string>
- <string>201.IBPluginDependency</string>
- <string>201.ImportedFromIB2</string>
- <string>202.IBPluginDependency</string>
- <string>202.ImportedFromIB2</string>
- <string>203.IBPluginDependency</string>
- <string>203.ImportedFromIB2</string>
- <string>204.IBPluginDependency</string>
- <string>204.ImportedFromIB2</string>
- <string>205.IBEditorWindowLastContentRect</string>
- <string>205.IBPluginDependency</string>
- <string>205.ImportedFromIB2</string>
- <string>205.editorWindowContentRectSynchronizationRect</string>
- <string>206.IBPluginDependency</string>
- <string>206.ImportedFromIB2</string>
- <string>207.IBPluginDependency</string>
- <string>207.ImportedFromIB2</string>
- <string>208.IBPluginDependency</string>
- <string>208.ImportedFromIB2</string>
- <string>209.IBPluginDependency</string>
- <string>209.ImportedFromIB2</string>
- <string>210.IBPluginDependency</string>
- <string>210.ImportedFromIB2</string>
- <string>211.IBPluginDependency</string>
- <string>211.ImportedFromIB2</string>
- <string>212.IBPluginDependency</string>
- <string>212.ImportedFromIB2</string>
- <string>212.editorWindowContentRectSynchronizationRect</string>
- <string>213.IBPluginDependency</string>
- <string>213.ImportedFromIB2</string>
- <string>214.IBPluginDependency</string>
- <string>214.ImportedFromIB2</string>
- <string>215.IBPluginDependency</string>
- <string>215.ImportedFromIB2</string>
- <string>216.IBPluginDependency</string>
- <string>216.ImportedFromIB2</string>
- <string>217.IBPluginDependency</string>
- <string>217.ImportedFromIB2</string>
- <string>218.IBPluginDependency</string>
- <string>218.ImportedFromIB2</string>
- <string>219.IBPluginDependency</string>
- <string>219.ImportedFromIB2</string>
- <string>220.IBPluginDependency</string>
- <string>220.ImportedFromIB2</string>
- <string>220.editorWindowContentRectSynchronizationRect</string>
- <string>221.IBPluginDependency</string>
- <string>221.ImportedFromIB2</string>
- <string>236.IBPluginDependency</string>
- <string>236.ImportedFromIB2</string>
- <string>29.IBEditorWindowLastContentRect</string>
- <string>29.IBPluginDependency</string>
- <string>29.ImportedFromIB2</string>
- <string>29.WindowOrigin</string>
- <string>29.editorWindowContentRectSynchronizationRect</string>
- <string>295.IBPluginDependency</string>
- <string>296.IBEditorWindowLastContentRect</string>
- <string>296.IBPluginDependency</string>
- <string>296.editorWindowContentRectSynchronizationRect</string>
- <string>297.IBPluginDependency</string>
- <string>298.IBPluginDependency</string>
- <string>299.IBPluginDependency</string>
- <string>300.IBEditorWindowLastContentRect</string>
- <string>300.IBPluginDependency</string>
- <string>300.editorWindowContentRectSynchronizationRect</string>
- <string>345.IBPluginDependency</string>
- <string>346.IBPluginDependency</string>
- <string>346.ImportedFromIB2</string>
- <string>348.IBPluginDependency</string>
- <string>348.ImportedFromIB2</string>
- <string>349.IBPluginDependency</string>
- <string>349.ImportedFromIB2</string>
- <string>349.editorWindowContentRectSynchronizationRect</string>
- <string>350.IBPluginDependency</string>
- <string>350.ImportedFromIB2</string>
- <string>351.IBPluginDependency</string>
- <string>351.ImportedFromIB2</string>
- <string>354.IBPluginDependency</string>
- <string>354.ImportedFromIB2</string>
- <string>375.IBPluginDependency</string>
- <string>377.IBPluginDependency</string>
- <string>56.IBPluginDependency</string>
- <string>56.ImportedFromIB2</string>
- <string>57.IBEditorWindowLastContentRect</string>
- <string>57.IBPluginDependency</string>
- <string>57.ImportedFromIB2</string>
- <string>57.editorWindowContentRectSynchronizationRect</string>
- <string>58.IBPluginDependency</string>
- <string>58.ImportedFromIB2</string>
- <string>72.IBPluginDependency</string>
- <string>72.ImportedFromIB2</string>
- <string>73.IBPluginDependency</string>
- <string>73.ImportedFromIB2</string>
- <string>74.IBPluginDependency</string>
- <string>74.ImportedFromIB2</string>
- <string>75.IBPluginDependency</string>
- <string>75.ImportedFromIB2</string>
- <string>77.IBPluginDependency</string>
- <string>77.ImportedFromIB2</string>
- <string>78.IBPluginDependency</string>
- <string>78.ImportedFromIB2</string>
- <string>79.IBPluginDependency</string>
- <string>79.ImportedFromIB2</string>
- <string>80.IBPluginDependency</string>
- <string>80.ImportedFromIB2</string>
- <string>81.IBEditorWindowLastContentRect</string>
- <string>81.IBPluginDependency</string>
- <string>81.ImportedFromIB2</string>
- <string>81.editorWindowContentRectSynchronizationRect</string>
- <string>82.IBPluginDependency</string>
- <string>82.ImportedFromIB2</string>
- <string>83.IBPluginDependency</string>
- <string>83.ImportedFromIB2</string>
- </object>
- <object class="NSMutableArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilderKit</string>
- <string>com.apple.InterfaceBuilderKit</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1" id="9"/>
- <string>{{417, 1069}, {216, 23}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>{{596, 852}, {216, 23}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>{{522, 812}, {146, 23}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>{{436, 809}, {64, 6}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>{{608, 612}, {275, 83}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>{{186, 593}, {243, 243}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>{{187, 434}, {243, 243}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>{{608, 612}, {167, 43}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>{{608, 612}, {241, 103}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>{{2560, 1536}, {442, 20}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>{74, 862}</string>
- <string>{{6, 978}, {478, 20}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>{{296, 1049}, {234, 43}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>{{475, 832}, {234, 43}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>{{2790, 1493}, {176, 43}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>{{231, 634}, {176, 43}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>{{608, 612}, {215, 63}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>{{12, 909}, {245, 183}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>{{23, 794}, {245, 183}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>{{144, 633}, {199, 203}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>{{145, 474}, {199, 203}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <reference ref="9"/>
- </object>
- </object>
- <object class="NSMutableDictionary" key="unlocalizedProperties">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
- <object class="NSMutableArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
- </object>
- <nil key="activeLocalization"/>
- <object class="NSMutableDictionary" key="localizations">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
- <object class="NSMutableArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
- </object>
- <nil key="sourceID"/>
- <int key="maxID">388</int>
- </object>
- <object class="IBClassDescriber" key="IBDocument.Classes">
- <object class="NSMutableArray" key="referencedPartialClassDescriptions">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="IBPartialClassDescription">
- <string key="className">GTMLargeTypeWindow</string>
- <string key="superclassName">NSPanel</string>
- <object class="NSMutableDictionary" key="actions">
- <string key="NS.key.0">copy:</string>
- <string key="NS.object.0">id</string>
- </object>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">AppKit/GTMLargeTypeWindow.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">GTMUILocalizer</string>
- <string key="superclassName">NSObject</string>
- <object class="NSMutableDictionary" key="outlets">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMutableArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>otherObjectToLocalize_</string>
- <string>owner_</string>
- <string>yetAnotherObjectToLocalize_</string>
- </object>
- <object class="NSMutableArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- </object>
- </object>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">AppKit/GTMUILocalizer.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSApplication</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier" id="271775925">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">UnitTesting/GTMAppKit+UnitTesting.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSControl</string>
- <reference key="sourceIdentifier" ref="271775925"/>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSMenu</string>
- <reference key="sourceIdentifier" ref="271775925"/>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSMenuItem</string>
- <reference key="sourceIdentifier" ref="271775925"/>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">AppKit/GTMCarbonEvent.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">AppKit/GTMDelegatingTableColumn.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Foundation/GTMHTTPServer.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Foundation/GTMNSAppleEventDescriptor+Foundation.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Foundation/GTMNSObject+KeyValueObserving.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">UnitTesting/GTMCALayer+UnitTesting.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">UnitTesting/GTMNSObject+BindingUnitTesting.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">UnitTesting/GTMNSObject+UnitTesting.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSView</string>
- <reference key="sourceIdentifier" ref="271775925"/>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSWindow</string>
- <reference key="sourceIdentifier" ref="271775925"/>
- </object>
- </object>
- </object>
- <int key="IBDocument.localizationMode">0</int>
- <string key="IBDocument.LastKnownRelativeProjectPath">../../../GTM.xcodeproj</string>
- <int key="IBDocument.defaultPropertyAccessControl">3</int>
- </data>
-</archive>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11201" systemVersion="15G31" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none">
+ <dependencies>
+ <deployment identifier="macosx"/>
+ <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11201"/>
+ </dependencies>
+ <objects>
+ <customObject id="-2" userLabel="File's Owner" customClass="NSApplication"/>
+ <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+ <customObject id="-3" userLabel="Application"/>
+ <menu title="AMainMenu" systemMenu="main" id="29" userLabel="MainMenu">
+ <items>
+ <menuItem title="NewApplication" id="56">
+ <menu key="submenu" title="NewApplication" systemMenu="apple" id="57">
+ <items>
+ <menuItem title="About NewApplication" id="58">
+ <modifierMask key="keyEquivalentModifierMask"/>
+ <connections>
+ <action selector="orderFrontStandardAboutPanel:" target="-2" id="142"/>
+ </connections>
+ </menuItem>
+ <menuItem isSeparatorItem="YES" id="236">
+ <modifierMask key="keyEquivalentModifierMask" command="YES"/>
+ </menuItem>
+ <menuItem title="Preferences…" keyEquivalent="," id="129" userLabel="121"/>
+ <menuItem isSeparatorItem="YES" id="143">
+ <modifierMask key="keyEquivalentModifierMask" command="YES"/>
+ </menuItem>
+ <menuItem title="Services" id="131">
+ <menu key="submenu" title="Services" systemMenu="services" id="130"/>
+ </menuItem>
+ <menuItem isSeparatorItem="YES" id="144">
+ <modifierMask key="keyEquivalentModifierMask" command="YES"/>
+ </menuItem>
+ <menuItem title="Hide NewApplication" keyEquivalent="h" id="134">
+ <connections>
+ <action selector="hide:" target="-1" id="367"/>
+ </connections>
+ </menuItem>
+ <menuItem title="Hide Others" keyEquivalent="h" id="145">
+ <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
+ <connections>
+ <action selector="hideOtherApplications:" target="-1" id="368"/>
+ </connections>
+ </menuItem>
+ <menuItem title="Show All" id="150">
+ <connections>
+ <action selector="unhideAllApplications:" target="-1" id="370"/>
+ </connections>
+ </menuItem>
+ <menuItem isSeparatorItem="YES" id="149">
+ <modifierMask key="keyEquivalentModifierMask" command="YES"/>
+ </menuItem>
+ <menuItem title="Quit NewApplication" id="136" userLabel="1111">
+ <modifierMask key="keyEquivalentModifierMask"/>
+ <connections>
+ <action selector="terminate:" target="-1" id="369"/>
+ </connections>
+ </menuItem>
+ </items>
+ </menu>
+ </menuItem>
+ <menuItem title="File" id="83">
+ <menu key="submenu" title="File" id="81">
+ <items>
+ <menuItem title="New" keyEquivalent="n" id="82" userLabel="9">
+ <connections>
+ <action selector="newDocument:" target="-1" id="373"/>
+ </connections>
+ </menuItem>
+ <menuItem title="Open…" keyEquivalent="o" id="72">
+ <connections>
+ <action selector="openDocument:" target="-1" id="374"/>
+ </connections>
+ </menuItem>
+ <menuItem title="Open Recent" id="124">
+ <menu key="submenu" title="Open Recent" systemMenu="recentDocuments" id="125">
+ <items>
+ <menuItem title="Clear Menu" id="126">
+ <connections>
+ <action selector="clearRecentDocuments:" target="-1" id="127"/>
+ </connections>
+ </menuItem>
+ </items>
+ </menu>
+ </menuItem>
+ <menuItem isSeparatorItem="YES" id="79" userLabel="7">
+ <modifierMask key="keyEquivalentModifierMask" command="YES"/>
+ </menuItem>
+ <menuItem title="Close" keyEquivalent="w" id="73" userLabel="1">
+ <connections>
+ <action selector="performClose:" target="-1" id="193"/>
+ </connections>
+ </menuItem>
+ <menuItem title="Save" keyEquivalent="s" id="75" userLabel="3">
+ <connections>
+ <action selector="saveDocument:" target="-1" id="362"/>
+ </connections>
+ </menuItem>
+ <menuItem title="Save As…" keyEquivalent="S" id="80" userLabel="8">
+ <modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/>
+ <connections>
+ <action selector="saveDocumentAs:" target="-1" id="363"/>
+ </connections>
+ </menuItem>
+ <menuItem title="Revert to Saved" id="112" userLabel="10">
+ <modifierMask key="keyEquivalentModifierMask"/>
+ <connections>
+ <action selector="revertDocumentToSaved:" target="-1" id="364"/>
+ </connections>
+ </menuItem>
+ <menuItem isSeparatorItem="YES" id="74" userLabel="2">
+ <modifierMask key="keyEquivalentModifierMask" command="YES"/>
+ </menuItem>
+ <menuItem title="Page Setup..." keyEquivalent="P" id="77" userLabel="5">
+ <modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/>
+ <connections>
+ <action selector="runPageLayout:" target="-1" id="87"/>
+ </connections>
+ </menuItem>
+ <menuItem title="Print…" keyEquivalent="p" id="78" userLabel="6">
+ <connections>
+ <action selector="print:" target="-1" id="86"/>
+ </connections>
+ </menuItem>
+ </items>
+ </menu>
+ </menuItem>
+ <menuItem title="Edit" id="217">
+ <menu key="submenu" title="Edit" id="205">
+ <items>
+ <menuItem title="Undo" keyEquivalent="z" id="207">
+ <connections>
+ <action selector="undo:" target="-1" id="223"/>
+ </connections>
+ </menuItem>
+ <menuItem title="Redo" keyEquivalent="Z" id="215">
+ <modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/>
+ <connections>
+ <action selector="redo:" target="-1" id="231"/>
+ </connections>
+ </menuItem>
+ <menuItem isSeparatorItem="YES" id="206">
+ <modifierMask key="keyEquivalentModifierMask" command="YES"/>
+ </menuItem>
+ <menuItem title="Cut" keyEquivalent="x" id="199">
+ <connections>
+ <action selector="cut:" target="-1" id="228"/>
+ </connections>
+ </menuItem>
+ <menuItem title="Copy" keyEquivalent="c" id="197">
+ <connections>
+ <action selector="copy:" target="-1" id="224"/>
+ </connections>
+ </menuItem>
+ <menuItem title="Paste" keyEquivalent="v" id="203">
+ <connections>
+ <action selector="paste:" target="-1" id="226"/>
+ </connections>
+ </menuItem>
+ <menuItem title="Delete" id="202">
+ <connections>
+ <action selector="delete:" target="-1" id="235"/>
+ </connections>
+ </menuItem>
+ <menuItem title="Select All" keyEquivalent="a" id="198">
+ <connections>
+ <action selector="selectAll:" target="-1" id="232"/>
+ </connections>
+ </menuItem>
+ <menuItem isSeparatorItem="YES" id="214">
+ <modifierMask key="keyEquivalentModifierMask" command="YES"/>
+ </menuItem>
+ <menuItem title="Find" id="218">
+ <menu key="submenu" title="Find" id="220">
+ <items>
+ <menuItem title="Find…" tag="1" keyEquivalent="f" id="209">
+ <connections>
+ <action selector="performFindPanelAction:" target="-1" id="241"/>
+ </connections>
+ </menuItem>
+ <menuItem title="Find Next" tag="2" keyEquivalent="g" id="208"/>
+ <menuItem title="Find Previous" tag="3" keyEquivalent="G" id="213">
+ <modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/>
+ </menuItem>
+ <menuItem title="Use Selection for Find" tag="7" keyEquivalent="e" id="221"/>
+ <menuItem title="Jump to Selection" keyEquivalent="j" id="210">
+ <connections>
+ <action selector="centerSelectionInVisibleArea:" target="-1" id="245"/>
+ </connections>
+ </menuItem>
+ </items>
+ </menu>
+ </menuItem>
+ <menuItem title="Spelling and Grammar" id="216">
+ <menu key="submenu" title="Spelling and Grammar" id="200">
+ <items>
+ <menuItem title="Show Spelling…" keyEquivalent=":" id="204">
+ <connections>
+ <action selector="showGuessPanel:" target="-1" id="230"/>
+ </connections>
+ </menuItem>
+ <menuItem title="Check Spelling" keyEquivalent=";" id="201">
+ <connections>
+ <action selector="checkSpelling:" target="-1" id="225"/>
+ </connections>
+ </menuItem>
+ <menuItem title="Check Spelling While Typing" id="219">
+ <connections>
+ <action selector="toggleContinuousSpellChecking:" target="-1" id="222"/>
+ </connections>
+ </menuItem>
+ <menuItem title="Check Grammar With Spelling" id="346">
+ <connections>
+ <action selector="toggleGrammarChecking:" target="-1" id="347"/>
+ </connections>
+ </menuItem>
+ </items>
+ </menu>
+ </menuItem>
+ <menuItem title="Substitutions" id="348">
+ <menu key="submenu" title="Substitutions" id="349">
+ <items>
+ <menuItem title="Smart Copy/Paste" tag="1" keyEquivalent="f" id="350">
+ <connections>
+ <action selector="toggleSmartInsertDelete:" target="-1" id="355"/>
+ </connections>
+ </menuItem>
+ <menuItem title="Smart Quotes" tag="2" keyEquivalent="g" id="351">
+ <connections>
+ <action selector="toggleAutomaticQuoteSubstitution:" target="-1" id="356"/>
+ </connections>
+ </menuItem>
+ <menuItem title="Smart Links" tag="3" keyEquivalent="G" id="354">
+ <modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/>
+ <connections>
+ <action selector="toggleAutomaticLinkDetection:" target="-1" id="357"/>
+ </connections>
+ </menuItem>
+ </items>
+ </menu>
+ </menuItem>
+ <menuItem title="Speech" id="211">
+ <menu key="submenu" title="Speech" id="212">
+ <items>
+ <menuItem title="Start Speaking" id="196">
+ <connections>
+ <action selector="startSpeaking:" target="-1" id="233"/>
+ </connections>
+ </menuItem>
+ <menuItem title="Stop Speaking" id="195">
+ <connections>
+ <action selector="stopSpeaking:" target="-1" id="227"/>
+ </connections>
+ </menuItem>
+ </items>
+ </menu>
+ </menuItem>
+ </items>
+ </menu>
+ </menuItem>
+ <menuItem title="¬Menu Title" id="299">
+ <menu key="submenu" title="¬Menu Title" id="300">
+ <items>
+ <menuItem title="¬Menu Item" keyEquivalent="t" id="377"/>
+ <menuItem title="Show Colors" keyEquivalent="C" id="345">
+ <modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/>
+ <connections>
+ <action selector="orderFrontColorPanel:" target="-1" id="361"/>
+ </connections>
+ </menuItem>
+ </items>
+ </menu>
+ </menuItem>
+ <menuItem title="View" id="295">
+ <menu key="submenu" title="View" id="296">
+ <items>
+ <menuItem title="Show Toolbar" keyEquivalent="t" id="297">
+ <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
+ <connections>
+ <action selector="toggleToolbarShown:" target="-1" id="366"/>
+ </connections>
+ </menuItem>
+ <menuItem title="Customize Toolbar…" id="298">
+ <connections>
+ <action selector="runToolbarCustomizationPalette:" target="-1" id="365"/>
+ </connections>
+ </menuItem>
+ </items>
+ </menu>
+ </menuItem>
+ <menuItem title="Help" id="103" userLabel="1">
+ <menu key="submenu" title="Help" id="106" userLabel="2">
+ <items>
+ <menuItem title="NewApplication Help" keyEquivalent="?" id="111">
+ <connections>
+ <action selector="showHelp:" target="-1" id="360"/>
+ </connections>
+ </menuItem>
+ </items>
+ </menu>
+ </menuItem>
+ </items>
+ </menu>
+ <customObject id="375" customClass="GTMUILocalizer">
+ <connections>
+ <outlet property="owner_" destination="-2" id="376"/>
+ </connections>
+ </customObject>
+ </objects>
+</document>
diff --git a/UnitTesting/GTMUIUnitTestingHarness/main.m b/UnitTesting/GTMUIUnitTestingHarness/main.m
index 7438499..ceff0c9 100644
--- a/UnitTesting/GTMUIUnitTestingHarness/main.m
+++ b/UnitTesting/GTMUIUnitTestingHarness/main.m
@@ -19,14 +19,11 @@
#import <Cocoa/Cocoa.h>
-#import "GTMAppKitUnitTestingUtilities.h"
#import "GTMFoundationUnitTestingUtilities.h"
int main(int argc, char *argv[]) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
- [GTMAppKitUnitTestingUtilities setUpForUIUnitTestsIfBeingTested];
-
// Give ourselves a max of 10 minutes for the tests. Sometimes (in automated
// builds) the unittesting bundle fails to load which causes the app to keep
// running forever. This will force it to exit after a certain amount of time
diff --git a/UnitTesting/GTMUnitTestDevLog.h b/UnitTesting/GTMUnitTestDevLog.h
index 2be231e..35d5e0d 100644
--- a/UnitTesting/GTMUnitTestDevLog.h
+++ b/UnitTesting/GTMUnitTestDevLog.h
@@ -16,69 +16,16 @@
// the License.
//
-#import "GTMDefines.h"
#import <Foundation/Foundation.h>
+#import "GTMDefines.h"
-// GTMUnitTestDevLog tracks what messages are logged to verify that you only
-// log what you expect to log during the running of unittests. This allows you
-// to log with impunity from your actual core implementations and still be able
-// to find unexpected logs in your output when running unittests.
-// In your unittests you tell GTMUnitTestDevLog what messages you expect your
-// test to spit out, and it will cause any that don't match to appear as errors
-// in your unittest run output. You can match on exact strings or standard
-// regexps.
-// Set GTM_SHOW_UNITTEST_DEVLOGS in the environment to show the logs that that
-// are expected and encountered. Otherwise they aren't display to keep the
-// unit test results easier to read.
+// GTMUnitTestDevLog modifies assertion logs so they don't get trapped by
+// build systems.
@interface GTMUnitTestDevLog : NSObject
-// Log a message
-+ (void)log:(NSString*)format, ... NS_FORMAT_FUNCTION(1, 2);
-+ (void)log:(NSString*)format args:(va_list)args NS_FORMAT_FUNCTION(1, 0);
// Turn tracking on/off
+ (void)enableTracking;
+ (void)disableTracking;
-+ (BOOL)isTrackingEnabled;
-
-// Note that you are expecting a string that has an exact match. No need to
-// escape any pattern characters.
-+ (void)expectString:(NSString *)format, ... NS_FORMAT_FUNCTION(1, 2);
-
-// Note that you are expecting a pattern. Pattern characters that you want
-// exact matches on must be escaped. See [GTMRegex escapedPatternForString].
-// Patterns match across newlines (kGTMRegexOptionSupressNewlineSupport) making
-// it easier to match output from the descriptions of NS collection types such
-// as NSArray and NSDictionary.
-+ (void)expectPattern:(NSString *)format, ... NS_FORMAT_FUNCTION(1, 2);
-
-// Note that you are expecting exactly 'n' strings
-+ (void)expect:(NSUInteger)n
- casesOfString:(NSString *)format, ... NS_FORMAT_FUNCTION(2, 3);
-// Note that you are expecting exactly 'n' patterns
-+ (void)expect:(NSUInteger)n
- casesOfPattern:(NSString*)format, ... NS_FORMAT_FUNCTION(2, 3);
-+ (void)expect:(NSUInteger)n
- casesOfPattern:(NSString*)format
- args:(va_list)args NS_FORMAT_FUNCTION(2, 0);
-
-// Call when you want to verify that you have matched all the logs you expect
-// to match. If your unittests inherit from GTMTestcase (like they should) you
-// will get this called for free.
-+ (void)verifyNoMoreLogsExpected;
-
-// Resets the expected logs so that you don't have anything expected.
-// In general should not be needed, unless you have a variable logging case
-// of some sort.
-+ (void)resetExpectedLogs;
@end
-
-// Does the same as GTMUnitTestDevLog, but the logs are only expected in debug.
-// ie-the expect requests don't count in release builds.
-@interface GTMUnitTestDevLogDebug : GTMUnitTestDevLog
-@end
-
-// The name of the exception that is raised when GTMUnitTestDevLog
-// finds a problem.
-GTM_EXTERN NSString *const GTMLogFailureException;
diff --git a/UnitTesting/GTMUnitTestDevLog.m b/UnitTesting/GTMUnitTestDevLog.m
index 7a12bb0..ae4050f 100644
--- a/UnitTesting/GTMUnitTestDevLog.m
+++ b/UnitTesting/GTMUnitTestDevLog.m
@@ -18,52 +18,12 @@
#import "GTMUnitTestDevLog.h"
-
-#import "GTMRegex.h"
-#import "GTMSenTestCase.h"
-
-#if !defined(__clang__) && (__GNUC__*10+__GNUC_MINOR__ >= 42)
-// Some versions of GCC (4.2 and below AFAIK) aren't great about supporting
-// -Wmissing-format-attribute
-// when the function is anything more complex than foo(NSString *fmt, ...).
-// You see the error inside the function when you turn ... into va_args and
-// attempt to call another function (like vsprintf for example).
-// So we just shut off the warning for this file. We reenable it at the end.
-#pragma GCC diagnostic ignored "-Wmissing-format-attribute"
-#endif // !__clang__
-
-#if !GTM_IPHONE_SDK
-// Add support for grabbing messages from Carbon.
-#import <CoreServices/CoreServices.h>
-static void GTMDevLogDebugAssert(OSType componentSignature,
- UInt32 options,
- const char *assertionString,
- const char *exceptionLabelString,
- const char *errorString,
- const char *fileName,
- long lineNumber,
- void *value,
- ConstStr255Param outputMsg) {
- NSString *outLog = [[[NSString alloc] initWithBytes:&(outputMsg[1])
- length:StrLength(outputMsg)
- encoding:NSMacOSRomanStringEncoding]
- autorelease];
- _GTMDevLog(@"%@", outLog); // Don't want any percents in outLog honored
-}
-static inline void GTMInstallDebugAssertOutputHandler(void) {
- InstallDebugAssertOutputHandler(GTMDevLogDebugAssert);
-}
-static inline void GTMUninstallDebugAssertOutputHandler(void) {
- InstallDebugAssertOutputHandler(NULL);
-}
-#else // GTM_IPHONE_SDK
-static inline void GTMInstallDebugAssertOutputHandler(void) {};
-static inline void GTMUninstallDebugAssertOutputHandler(void) {};
-#endif // GTM_IPHONE_SDK
-
-NSString *const GTMLogFailureException = @"GTMLogFailureException";
-
@interface GTMUnttestDevLogAssertionHandler : NSAssertionHandler
+- (void)handleFailure:(NSString *)functionName
+ file:(NSString *)fileName
+ lineNumber:(NSInteger)line
+ description:(NSString *)format
+ arguments:(va_list)argList NS_FORMAT_FUNCTION(4,0);
@end
@implementation GTMUnttestDevLogAssertionHandler
@@ -72,24 +32,18 @@ NSString *const GTMLogFailureException = @"GTMLogFailureException";
file:(NSString *)fileName
lineNumber:(NSInteger)line
description:(NSString *)format, ... {
+ NSString *call = [NSString stringWithFormat:@"[%@ %@]",
+ NSStringFromClass([object class]),
+ NSStringFromSelector(selector)];
+
va_list argList;
va_start(argList, format);
- NSString *descStr
- = [[[NSString alloc] initWithFormat:format arguments:argList] autorelease];
+ [self handleFailure:call
+ file:fileName
+ lineNumber:line
+ description:format
+ arguments:argList];
va_end(argList);
-
- // You need a format that will be useful in logs, but won't trip up Xcode or
- // any other build systems parsing of the output.
- NSString *outLog
- = [NSString stringWithFormat:@"RecordedNSAssert in %@ - %@ (%@:%ld)",
- NSStringFromSelector(selector),
- descStr,
- fileName, (long)line];
- // To avoid unused variable warning when _GTMDevLog is stripped.
- (void)outLog;
- _GTMDevLog(@"%@", outLog); // Don't want any percents in outLog honored
- [NSException raise:NSInternalInconsistencyException
- format:@"NSAssert raised"];
}
- (void)handleFailureInFunction:(NSString *)functionName
@@ -98,45 +52,38 @@ NSString *const GTMLogFailureException = @"GTMLogFailureException";
description:(NSString *)format, ... {
va_list argList;
va_start(argList, format);
- NSString *descStr
- = [[[NSString alloc] initWithFormat:format arguments:argList] autorelease];
+ [self handleFailure:functionName
+ file:fileName
+ lineNumber:line
+ description:format
+ arguments:argList];
va_end(argList);
+}
+
+- (void)handleFailure:(NSString *)failure
+ file:(NSString *)fileName
+ lineNumber:(NSInteger)line
+ description:(NSString *)format
+ arguments:(va_list)argList {
+ NSString *descStr
+ = [[[NSString alloc] initWithFormat:format arguments:argList] autorelease];
// You need a format that will be useful in logs, but won't trip up Xcode or
// any other build systems parsing of the output.
NSString *outLog
- = [NSString stringWithFormat:@"RecordedNSAssert in %@ - %@ (%@:%ld)",
- functionName,
- descStr,
- fileName, (long)line];
+ = [NSString stringWithFormat:@"RecordedNSAssert in %@ - %@ (%@:%ld)",
+ failure, descStr, fileName, (long)line];
// To avoid unused variable warning when _GTMDevLog is stripped.
(void)outLog;
_GTMDevLog(@"%@", outLog); // Don't want any percents in outLog honored
[NSException raise:NSInternalInconsistencyException
format:@"NSAssert raised"];
}
-
@end
@implementation GTMUnitTestDevLog
-// If unittests are ever being run on separate threads, this may need to be
-// made a thread local variable.
-static BOOL gTrackingEnabled = NO;
-
-+ (NSMutableArray *)patterns {
- static NSMutableArray *patterns = nil;
- if (!patterns) {
- patterns = [[NSMutableArray array] retain];
- }
- return patterns;
-}
-
-+ (BOOL)isTrackingEnabled {
- return gTrackingEnabled;
-}
+ (void)enableTracking {
- GTMInstallDebugAssertOutputHandler();
NSMutableDictionary *threadDictionary
= [[NSThread currentThread] threadDictionary];
@@ -148,154 +95,14 @@ static BOOL gTrackingEnabled = NO;
GTMUnttestDevLogAssertionHandler *handler =
[[[GTMUnttestDevLogAssertionHandler alloc] init] autorelease];
[threadDictionary setObject:handler forKey:@"NSAssertionHandler"];
-
- gTrackingEnabled = YES;
}
+ (void)disableTracking {
- GTMUninstallDebugAssertOutputHandler();
// Clear our assertion handler back out.
NSMutableDictionary *threadDictionary
= [[NSThread currentThread] threadDictionary];
[threadDictionary removeObjectForKey:@"NSAssertionHandler"];
-
- gTrackingEnabled = NO;
}
-+ (void)log:(NSString*)format, ... {
- va_list argList;
- va_start(argList, format);
- [self log:format args:argList];
- va_end(argList);
-}
-
-+ (void)log:(NSString*)format args:(va_list)args {
- if ([self isTrackingEnabled]) {
- NSString *logString = [[[NSString alloc] initWithFormat:format
- arguments:args] autorelease];
- @synchronized(self) {
- NSMutableArray *patterns = [self patterns];
- BOOL logError = [patterns count] == 0 ? YES : NO;
- GTMRegex *regex = nil;
- if (!logError) {
- regex = [[[patterns objectAtIndex:0] retain] autorelease];
- logError = [regex matchesString:logString] ? NO : YES;
- [patterns removeObjectAtIndex:0];
- }
- if (logError) {
-
- if (regex) {
- [NSException raise:GTMLogFailureException
- format:@"Unexpected log: %@\nExpected: %@",
- logString, regex];
- } else {
- [NSException raise:GTMLogFailureException
- format:@"Unexpected log: %@", logString];
- }
- } else {
- static BOOL envChecked = NO;
- static BOOL showExpectedLogs = YES;
- if (!envChecked) {
- showExpectedLogs = getenv("GTM_SHOW_UNITTEST_DEVLOGS") ? YES : NO;
- }
- if (showExpectedLogs) {
- NSLog(@"Expected Log: %@", logString);
- }
- }
- }
- } else {
- NSLogv(format, args);
- }
-}
-
-+ (void)expectString:(NSString *)format, ... {
- va_list argList;
- va_start(argList, format);
- NSString *string = [[[NSString alloc] initWithFormat:format
- arguments:argList] autorelease];
- va_end(argList);
- NSString *pattern = [GTMRegex escapedPatternForString:string];
- [self expect:1 casesOfPattern:@"%@", pattern];
-
-}
-
-+ (void)expectPattern:(NSString *)format, ... {
- va_list argList;
- va_start(argList, format);
- [self expect:1 casesOfPattern:format args:argList];
- va_end(argList);
-}
-
-+ (void)expect:(NSUInteger)n casesOfString:(NSString *)format, ... {
- va_list argList;
- va_start(argList, format);
- NSString *string = [[[NSString alloc] initWithFormat:format
- arguments:argList] autorelease];
- va_end(argList);
- NSString *pattern = [GTMRegex escapedPatternForString:string];
- [self expect:n casesOfPattern:@"%@", pattern];
-}
-
-+ (void)expect:(NSUInteger)n casesOfPattern:(NSString*)format, ... {
- va_list argList;
- va_start(argList, format);
- [self expect:n casesOfPattern:format args:argList];
- va_end(argList);
-}
-
-+ (void)expect:(NSUInteger)n
-casesOfPattern:(NSString*)format
- args:(va_list)args {
- NSString *pattern = [[[NSString alloc] initWithFormat:format
- arguments:args] autorelease];
- GTMRegex *regex = [GTMRegex regexWithPattern:pattern
- options:kGTMRegexOptionSupressNewlineSupport];
- @synchronized(self) {
- NSMutableArray *patterns = [self patterns];
- for (NSUInteger i = 0; i < n; ++i) {
- [patterns addObject:regex];
- }
- }
-}
-
-+ (void)verifyNoMoreLogsExpected {
- @synchronized(self) {
- NSMutableArray *patterns = [self patterns];
- if ([patterns count] > 0) {
- NSMutableArray *patternsCopy = [[patterns copy] autorelease];
- [self resetExpectedLogs];
- [NSException raise:GTMLogFailureException
- format:@"Logs still expected %@", patternsCopy];
- }
- }
-}
-
-+ (void)resetExpectedLogs {
- @synchronized(self) {
- NSMutableArray *patterns = [self patterns];
- [patterns removeAllObjects];
- }
-}
@end
-
-
-@implementation GTMUnitTestDevLogDebug
-
-+ (void)expect:(NSUInteger)n
-casesOfPattern:(NSString*)format
- args:(va_list)args {
-#if DEBUG
- // In debug, let the base work happen
- [super expect:n casesOfPattern:format args:args];
-#else
- // nothing when not in debug
-#endif
-}
-
-@end
-
-#if !defined(__clang__) && (__GNUC__*10+__GNUC_MINOR__ >= 42)
-// See comment at top of file.
-#pragma GCC diagnostic error "-Wmissing-format-attribute"
-#endif // !__clang__
diff --git a/UnitTesting/GTMUnitTestingBindingTest.m b/UnitTesting/GTMUnitTestingBindingTest.m
deleted file mode 100644
index 26ae5df..0000000
--- a/UnitTesting/GTMUnitTestingBindingTest.m
+++ /dev/null
@@ -1,116 +0,0 @@
-//
-// GTMUnitTestingBindingTest.m
-//
-// Copyright 2008 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 "GTMSenTestCase.h"
-#import "GTMUnitTestingTest.h"
-#import "GTMNSObject+BindingUnitTesting.h"
-
-@interface GTMUnitTestingBindingTest : GTMTestCase {
- int expectedFailureCount_;
-}
-@end
-
-@interface GTMUnitTestingBindingBadClass : NSObject
-@end
-
-@implementation GTMUnitTestingBindingTest
-
-// Iterates through all of our subviews testing the exposed bindings
-- (void)doSubviewBindingTest:(NSView*)view {
- NSArray *subviews = [view subviews];
- NSView *subview;
- GTM_FOREACH_OBJECT(subview, subviews) {
- GTMTestExposedBindings(subview, @"testing %@", subview);
- [self doSubviewBindingTest:subview];
- }
-}
-
-- (void)testBindings {
- // Get our window to work with and test it's bindings
- GTMUnitTestingTestController *testWindowController
- = [[GTMUnitTestingTestController alloc] initWithWindowNibName:@"GTMUnitTestingTest"];
- NSWindow *window = [testWindowController window];
- GTMTestExposedBindings(window, @"Window failed binding test");
- [self doSubviewBindingTest:[window contentView]];
- [window close];
- [testWindowController release];
-
- // Run a test against something with no bindings.
- // We're expecting a failure here.
- expectedFailureCount_ = 1;
- GTMTestExposedBindings(@"foo", @"testing no bindings");
- STAssertEquals(expectedFailureCount_, 0, @"Didn't get expected failures testing bindings");
-
- // Run test against some with bad bindings.
- // We're expecting failures here.
- expectedFailureCount_ = 4;
- GTMUnitTestingBindingBadClass *bad = [[[GTMUnitTestingBindingBadClass alloc] init] autorelease];
- GTMTestExposedBindings(bad, @"testing bad bindings");
- STAssertEquals(expectedFailureCount_, 0, @"Didn't get expected failures testing bad bindings");
-}
-
-- (void)failWithException:(NSException *)anException {
- if (expectedFailureCount_ > 0) {
- expectedFailureCount_ -= 1;
- } else {
- [super failWithException:anException]; // COV_NF_LINE - not expecting exception
- }
-}
-
-@end
-
-// Forces several error cases in our binding tests to test them
-@implementation GTMUnitTestingBindingBadClass
-
-NSString *const kGTMKeyWithNoClass = @"keyWithNoClass";
-NSString *const kGTMKeyWithNoValue = @"keyWithNoValue";
-NSString *const kGTMKeyWeCantSet = @"keyWeCantSet";
-NSString *const kGTMKeyThatIsntEqual = @"keyThatIsntEqual";
-
-- (NSArray *)exposedBindings {
- return [NSArray arrayWithObjects:kGTMKeyWithNoClass,
- kGTMKeyWithNoValue,
- kGTMKeyWeCantSet,
- kGTMKeyThatIsntEqual,
- nil];
-}
-
-- (NSArray*)gtm_unitTestExposedBindingsTestValues:(NSString*)binding {
- GTMBindingUnitTestData *data
- = [GTMBindingUnitTestData testWithIdentityValue:kGTMKeyThatIsntEqual];
- return [NSArray arrayWithObject:data];
-}
-
-- (Class)valueClassForBinding:(NSString*)binding {
- return [binding isEqualTo:kGTMKeyWithNoClass] ? nil : [NSString class];
-}
-
-- (id)valueForKey:(NSString*)binding {
- if ([binding isEqualTo:kGTMKeyWithNoValue]) {
- [NSException raise:NSUndefinedKeyException format:@""];
- }
- return @"foo";
-}
-
-- (void)setValue:(id)value forKey:(NSString*)binding {
- if ([binding isEqualTo:kGTMKeyWeCantSet]) {
- [NSException raise:NSUndefinedKeyException format:@""];
- }
-}
-@end
-
diff --git a/UnitTesting/GTMUnitTestingTest.h b/UnitTesting/GTMUnitTestingTest.h
deleted file mode 100644
index ea9521b..0000000
--- a/UnitTesting/GTMUnitTestingTest.h
+++ /dev/null
@@ -1,29 +0,0 @@
-//
-// GTMUnitTestingTest.h
-//
-// Copyright 2008 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 <AppKit/AppKit.h>
-
-// GTMUnitTestingTestController controller so that initWithWindowNibName can
-// find the appropriate bundle to load our nib from. See [GTMUnitTestingTest
-// -testUnitTestingFramework] for more info
-@interface GTMUnitTestingTestController : NSWindowController {
- IBOutlet NSTextField *field_;
-}
-
-- (NSTextField *)textField;
-@end
diff --git a/UnitTesting/GTMUnitTestingTest.m b/UnitTesting/GTMUnitTestingTest.m
deleted file mode 100644
index 0f87d28..0000000
--- a/UnitTesting/GTMUnitTestingTest.m
+++ /dev/null
@@ -1,253 +0,0 @@
-//
-// GTMUnitTestingTest.m
-//
-// Copyright 2008 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 "GTMSenTestCase.h"
-#import "GTMUnitTestingTest.h"
-#import "GTMAppKit+UnitTesting.h"
-
-NSString *const kGTMWindowNibName = @"GTMUnitTestingTest";
-NSString *const kGTMWindowSaveFileName = @"GTMUnitTestingWindow";
-
-@interface GTMUnitTestingTest : GTMTestCase {
- int expectedFailureCount_;
-}
-@end
-
-// GTMUnitTestingTest support classes
-@interface GTMUnitTestingView : NSObject <GTMUnitTestViewDrawer> {
- BOOL goodContext_;
-}
-- (BOOL)hadGoodContext;
-@end
-
-@interface GTMUnitTestingDelegate : NSObject <NSImageDelegate> {
- BOOL didEncode_;
-}
-- (BOOL)didEncode;
-@end
-
-@interface GTMUnitTestingProxyTest : NSProxy
-- (id)init;
-@end
-
-@implementation GTMUnitTestingTest
-
-// Brings up the window defined in the nib and takes a snapshot of it.
-// We use the "empty" GTMUnitTestingTestController controller so that
-// initWithWindowNibName can find the appropriate bundle to load our nib from.
-// For some reason when running unit tests, with all the injecting going on
-// the nib loader can get confused as to where it should load a nib from.
-// Having a NSWindowController subclass in the same bundle as the nib seems
-// to help the nib loader find the nib, and any custom classes that are attached
-// to it.
-- (void)testUnitTestingFramework {
- // set up our delegates so we can test delegate handling
- GTMUnitTestingDelegate *appDelegate = [[GTMUnitTestingDelegate alloc] init];
- [NSApp setDelegate:appDelegate];
-
- // Get our window
- GTMUnitTestingTestController *testWindowController
- = [[GTMUnitTestingTestController alloc] initWithWindowNibName:kGTMWindowNibName];
- NSWindow *window = [testWindowController window];
- // Test the app state. This will cover windows and menus
- GTMAssertObjectStateEqualToStateNamed(NSApp,
- @"GTMUnitTestingTestApp",
- @"Testing the app state");
-
- // Test the window image and state
- GTMAssertObjectEqualToStateAndImageNamed(window,
- kGTMWindowSaveFileName,
- @"Testing the window image and state");
-
- // Verify that all of our delegate encoders got called
- STAssertTrue([appDelegate didEncode], @"app delegate didn't get called?");
-
- // Clean up
- [NSApp setDelegate:nil];
- [appDelegate release];
- [testWindowController release];
-}
-
-- (void)testViewUnitTesting {
- GTMUnitTestingView *unitTestingView = [[GTMUnitTestingView alloc] init];
- GTMAssertDrawingEqualToImageNamed(unitTestingView,
- NSMakeSize(200,200),
- @"GTMUnitTestingView",
- NSApp,
- @"Testing view drawing");
- STAssertTrue([unitTestingView hadGoodContext], @"bad context?");
- [unitTestingView release];
-}
-
-- (void)testImageUnitTesting {
- NSImage *image = [NSImage imageNamed:@"NSApplicationIcon"];
- GTMUnitTestingDelegate *imgDelegate = [[GTMUnitTestingDelegate alloc] init];
- [image setDelegate:imgDelegate];
- GTMAssertObjectEqualToStateAndImageNamed(image,
- @"GTMUnitTestingImage",
- @"Testing NSImage image and state");
- STAssertTrue([imgDelegate didEncode], @"imgDelegate didn't get called?");
- [image setDelegate:nil];
- [imgDelegate release];
-}
-
-- (void)testFailures {
- NSString *const bogusTestName = @"GTMUnitTestTestingFailTest";
- NSString *tempDir = NSTemporaryDirectory();
- STAssertNotNil(tempDir, @"No Temp Dir?");
- NSString *originalPath = [NSObject gtm_getUnitTestSaveToDirectory];
- STAssertNotNil(originalPath, @"No save dir?");
- [NSObject gtm_setUnitTestSaveToDirectory:tempDir];
- STAssertEqualObjects(tempDir, [NSObject gtm_getUnitTestSaveToDirectory],
- @"Save to dir not set?");
- NSString *statePath = [self gtm_saveToPathForStateNamed:bogusTestName];
- STAssertNotNil(statePath, @"no state path?");
- NSString *imagePath = [self gtm_saveToPathForImageNamed:bogusTestName];
- STAssertNotNil(imagePath, @"no image path?");
- GTMUnitTestingTestController *testWindowController
- = [[GTMUnitTestingTestController alloc] initWithWindowNibName:kGTMWindowNibName];
- NSWindow *window = [testWindowController window];
-
- // Test against a golden master filename that doesn't exist
- expectedFailureCount_ = 2;
- GTMAssertObjectEqualToStateAndImageNamed(window,
- bogusTestName,
- @"Creating image and state files");
- STAssertEquals(expectedFailureCount_, 0,
- @"Didn't get expected failures creating files");
-
- // Change our image and state and verify failures
- [[testWindowController textField] setStringValue:@"Foo"];
- expectedFailureCount_ = 2;
- GTMAssertObjectEqualToStateAndImageNamed(window,
- kGTMWindowSaveFileName,
- @"Testing the window image and state");
- STAssertEquals(expectedFailureCount_, 0,
- @"Didn't get expected failures testing files");
-
- // Now change the size of our image and verify failures
- NSRect oldFrame = [window frame];
- NSRect newFrame = oldFrame;
- newFrame.size.width += 1;
- [window setFrame:newFrame display:YES];
- expectedFailureCount_ = 1;
- GTMAssertObjectImageEqualToImageNamed(window,
- kGTMWindowSaveFileName,
- @"Testing the changed window size");
- [window setFrame:oldFrame display:YES];
-
- // Set our unit test save dir to a bogus directory and
- // run the tests again.
- [NSObject gtm_setUnitTestSaveToDirectory:@"/zim/blatz/foo/bob/bar"];
- expectedFailureCount_ = 2;
- GTMAssertObjectEqualToStateAndImageNamed(window,
- kGTMWindowSaveFileName,
- @"Testing the window image and state");
- STAssertEquals(expectedFailureCount_, 0,
- @"Didn't get expected failures testing files");
- expectedFailureCount_ = 2;
- GTMAssertObjectEqualToStateAndImageNamed(window,
- @"GTMUnitTestingWindowDoesntExist",
- @"Testing the window image and state");
- STAssertEquals(expectedFailureCount_, 0,
- @"Didn't get expected failures testing files");
-
- // Reset our unit test save dir
- [NSObject gtm_setUnitTestSaveToDirectory:nil];
-
- // Test against something that doesn't have an image
- expectedFailureCount_ = 1;
- GTMAssertObjectImageEqualToImageNamed(@"a string",
- @"GTMStringsDontHaveImages",
- @"Testing that strings should fail");
- STAssertEquals(expectedFailureCount_, 0, @"Didn't get expected failures testing files");
-
- // Test against something that doesn't implement our support
- expectedFailureCount_ = 1;
- GTMUnitTestingProxyTest *proxy = [[GTMUnitTestingProxyTest alloc] init];
- GTMAssertObjectStateEqualToStateNamed(proxy,
- @"NSProxiesDontDoState",
- @"Testing that NSProxy should fail");
- STAssertEquals(expectedFailureCount_, 0, @"Didn't get expected failures testing proxy");
- [proxy release];
-
- [window close];
-}
-
-- (void)failWithException:(NSException *)anException {
- if (expectedFailureCount_ > 0) {
- expectedFailureCount_ -= 1;
- } else {
- [super failWithException:anException]; // COV_NF_LINE - not expecting exception
- }
-}
-
-
-@end
-
-@implementation GTMUnitTestingTestController
-- (NSTextField *)textField {
- return field_;
-}
-
-@end
-
-@implementation GTMUnitTestingDelegate
-
-- (void)gtm_unitTestEncoderWillEncode:(id)sender inCoder:(NSCoder*)inCoder {
- // Test various encodings
- [inCoder encodeBool:YES forKey:@"BoolTest"];
- [inCoder encodeInt:1 forKey:@"IntTest"];
- [inCoder encodeInt32:1 forKey:@"Int32Test"];
- [inCoder encodeInt64:1 forKey:@"Int64Test"];
- [inCoder encodeFloat:1.0f forKey:@"FloatTest"];
- [inCoder encodeDouble:1.0 forKey:@"DoubleTest"];
- [inCoder encodeBytes:(const uint8_t*)"BytesTest" length:9 forKey:@"BytesTest"];
- didEncode_ = YES;
-}
-
-- (BOOL)didEncode {
- return didEncode_;
-}
-@end
-
-@implementation GTMUnitTestingView
-
-- (void)gtm_unitTestViewDrawRect:(NSRect)rect contextInfo:(void*)contextInfo {
- [[NSColor redColor] set];
- NSRectFill(rect);
- goodContext_ = [(id)contextInfo isEqualTo:NSApp];
-}
-
-- (BOOL)hadGoodContext {
- return goodContext_;
-}
-@end
-
-// GTMUnitTestingProxyTest is for testing the case where we don't conform to
-// the GTMUnitTestingEncoding protocol.
-@implementation GTMUnitTestingProxyTest
-- (id)init {
- return self;
-}
-
-- (BOOL)conformsToProtocol:(Protocol *)protocol {
- return NO;
-}
-
-@end
diff --git a/UnitTesting/TestData/GTMUIViewUnitTestingTest.gtmUTState b/UnitTesting/TestData/GTMUIViewUnitTestingTest.gtmUTState
deleted file mode 100644
index 87ae9e5..0000000
--- a/UnitTesting/TestData/GTMUIViewUnitTestingTest.gtmUTState
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>$GTMArchive</key>
- <string>GTMUnitTestingArchive</string>
- <key>$GTMVersion</key>
- <integer>1</integer>
- <key>LayerIsDoublesided</key>
- <true/>
- <key>LayerIsHidden</key>
- <false/>
- <key>LayerIsOpaque</key>
- <true/>
- <key>LayerOpacity</key>
- <real>1</real>
- <key>ViewIsHidden</key>
- <false/>
- <key>ViewSubView 0</key>
- <dict>
- <key>LayerIsDoublesided</key>
- <true/>
- <key>LayerIsHidden</key>
- <false/>
- <key>LayerIsOpaque</key>
- <true/>
- <key>LayerOpacity</key>
- <real>1</real>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
-</dict>
-</plist>
diff --git a/UnitTesting/TestData/GTMUIViewUnitTestingTest.png b/UnitTesting/TestData/GTMUIViewUnitTestingTest.png
deleted file mode 100644
index 03fd9f0..0000000
--- a/UnitTesting/TestData/GTMUIViewUnitTestingTest.png
+++ /dev/null
Binary files differ
diff --git a/UnitTesting/TestData/GTMUnitTestingImage.10.6.tiff b/UnitTesting/TestData/GTMUnitTestingImage.10.6.tiff
deleted file mode 100644
index ec06a53..0000000
--- a/UnitTesting/TestData/GTMUnitTestingImage.10.6.tiff
+++ /dev/null
Binary files differ
diff --git a/UnitTesting/TestData/GTMUnitTestingImage.gtmUTState b/UnitTesting/TestData/GTMUnitTestingImage.gtmUTState
deleted file mode 100644
index 969ddf6..0000000
--- a/UnitTesting/TestData/GTMUnitTestingImage.gtmUTState
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>$GTMArchive</key>
- <string>GTMUnitTestingArchive</string>
- <key>$GTMVersion</key>
- <integer>1</integer>
- <key>BoolTest</key>
- <true/>
- <key>BytesTest</key>
- <data>
- Qnl0ZXNUZXN0
- </data>
- <key>DoubleTest</key>
- <real>1</real>
- <key>FloatTest</key>
- <real>1</real>
- <key>ImageName</key>
- <string>NSApplicationIcon</string>
- <key>ImageSize</key>
- <string>{128, 128}</string>
- <key>Int32Test</key>
- <integer>1</integer>
- <key>Int64Test</key>
- <integer>1</integer>
- <key>IntTest</key>
- <integer>1</integer>
-</dict>
-</plist>
diff --git a/UnitTesting/TestData/GTMUnitTestingImage.tiff b/UnitTesting/TestData/GTMUnitTestingImage.tiff
deleted file mode 100644
index 4d08297..0000000
--- a/UnitTesting/TestData/GTMUnitTestingImage.tiff
+++ /dev/null
Binary files differ
diff --git a/UnitTesting/TestData/GTMUnitTestingTest.nib/classes.nib b/UnitTesting/TestData/GTMUnitTestingTest.nib/classes.nib
deleted file mode 100644
index cc51f67..0000000
--- a/UnitTesting/TestData/GTMUnitTestingTest.nib/classes.nib
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>IBClasses</key>
- <array>
- <dict>
- <key>CLASS</key>
- <string>NSView</string>
- <key>LANGUAGE</key>
- <string>ObjC</string>
- <key>SUPERCLASS</key>
- <string>NSResponder</string>
- </dict>
- <dict>
- <key>CLASS</key>
- <string>NSApplication</string>
- <key>LANGUAGE</key>
- <string>ObjC</string>
- <key>SUPERCLASS</key>
- <string>NSResponder</string>
- </dict>
- <dict>
- <key>CLASS</key>
- <string>NSTextField</string>
- <key>LANGUAGE</key>
- <string>ObjC</string>
- <key>SUPERCLASS</key>
- <string>NSControl</string>
- </dict>
- <dict>
- <key>CLASS</key>
- <string>NSMenu</string>
- <key>LANGUAGE</key>
- <string>ObjC</string>
- <key>SUPERCLASS</key>
- <string>NSObject</string>
- </dict>
- <dict>
- <key>CLASS</key>
- <string>NSControl</string>
- <key>LANGUAGE</key>
- <string>ObjC</string>
- <key>SUPERCLASS</key>
- <string>NSView</string>
- </dict>
- <dict>
- <key>CLASS</key>
- <string>NSObject</string>
- <key>LANGUAGE</key>
- <string>ObjC</string>
- </dict>
- <dict>
- <key>CLASS</key>
- <string>NSCell</string>
- <key>LANGUAGE</key>
- <string>ObjC</string>
- <key>SUPERCLASS</key>
- <string>NSObject</string>
- </dict>
- <dict>
- <key>CLASS</key>
- <string>NSWindow</string>
- <key>LANGUAGE</key>
- <string>ObjC</string>
- <key>SUPERCLASS</key>
- <string>NSResponder</string>
- </dict>
- <dict>
- <key>CLASS</key>
- <string>GTMUnitTestingTestController</string>
- <key>LANGUAGE</key>
- <string>ObjC</string>
- <key>OUTLETS</key>
- <dict>
- <key>field_</key>
- <string>NSTextField</string>
- </dict>
- <key>SUPERCLASS</key>
- <string>NSWindowController</string>
- </dict>
- </array>
- <key>IBVersion</key>
- <string>1</string>
-</dict>
-</plist>
diff --git a/UnitTesting/TestData/GTMUnitTestingTest.nib/designable.nib b/UnitTesting/TestData/GTMUnitTestingTest.nib/designable.nib
new file mode 100644
index 0000000..b2aa6ee
--- /dev/null
+++ b/UnitTesting/TestData/GTMUnitTestingTest.nib/designable.nib
@@ -0,0 +1,1144 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
+ <data>
+ <int key="IBDocument.SystemTarget">1050</int>
+ <string key="IBDocument.SystemVersion">15G1004</string>
+ <string key="IBDocument.InterfaceBuilderVersion">11201</string>
+ <string key="IBDocument.AppKitVersion">1404.47</string>
+ <string key="IBDocument.HIToolboxVersion">807.20</string>
+ <object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="NS.object.0">11201</string>
+ </object>
+ <array key="IBDocument.IntegratedClassDependencies">
+ <string>NSBox</string>
+ <string>NSButton</string>
+ <string>NSButtonCell</string>
+ <string>NSColorWell</string>
+ <string>NSCustomObject</string>
+ <string>NSProgressIndicator</string>
+ <string>NSScrollView</string>
+ <string>NSScroller</string>
+ <string>NSSearchField</string>
+ <string>NSSearchFieldCell</string>
+ <string>NSSlider</string>
+ <string>NSSliderCell</string>
+ <string>NSTabView</string>
+ <string>NSTabViewItem</string>
+ <string>NSTableColumn</string>
+ <string>NSTableHeaderView</string>
+ <string>NSTableView</string>
+ <string>NSTextField</string>
+ <string>NSTextFieldCell</string>
+ <string>NSTextView</string>
+ <string>NSView</string>
+ <string>NSWindowTemplate</string>
+ </array>
+ <array key="IBDocument.PluginDependencies">
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ </array>
+ <dictionary class="NSMutableDictionary" key="IBDocument.Metadata"/>
+ <array class="NSMutableArray" key="IBDocument.RootObjects" id="948991554">
+ <object class="NSCustomObject" id="774623032">
+ <string key="NSClassName">GTMUnitTestingTestController</string>
+ </object>
+ <object class="NSCustomObject" id="121913320">
+ <string key="NSClassName">FirstResponder</string>
+ </object>
+ <object class="NSCustomObject" id="575648047">
+ <string key="NSClassName">NSApplication</string>
+ </object>
+ <object class="NSWindowTemplate" id="392237883">
+ <int key="NSWindowStyleMask">3</int>
+ <int key="NSWindowBacking">2</int>
+ <string key="NSWindowRect">{{196, 192}, {393, 318}}</string>
+ <int key="NSWTFlags">536871936</int>
+ <string key="NSWindowTitle">Window</string>
+ <string key="NSWindowClass">NSWindow</string>
+ <nil key="NSViewClass"/>
+ <nil key="NSUserInterfaceItemIdentifier"/>
+ <object class="NSView" key="NSWindowView" id="640013893">
+ <nil key="NSNextResponder"/>
+ <int key="NSvFlags">256</int>
+ <array class="NSMutableArray" key="NSSubviews">
+ <object class="NSScrollView" id="85174318">
+ <reference key="NSNextResponder" ref="640013893"/>
+ <int key="NSvFlags">268</int>
+ <array class="NSMutableArray" key="NSSubviews">
+ <object class="NSClipView" id="410309725">
+ <reference key="NSNextResponder" ref="85174318"/>
+ <int key="NSvFlags">2322</int>
+ <array class="NSMutableArray" key="NSSubviews">
+ <object class="NSTableView" id="497150328">
+ <reference key="NSNextResponder" ref="410309725"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrameSize">{223, 32}</string>
+ <reference key="NSSuperview" ref="410309725"/>
+ <reference key="NSNextKeyView" ref="975309690"/>
+ <bool key="NSEnabled">YES</bool>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ <bool key="NSControlAllowsExpansionToolTips">YES</bool>
+ <object class="NSTableHeaderView" key="NSHeaderView" id="218180457">
+ <reference key="NSNextResponder" ref="700173326"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrameSize">{223, 23}</string>
+ <reference key="NSSuperview" ref="700173326"/>
+ <reference key="NSNextKeyView" ref="837150896"/>
+ <reference key="NSTableView" ref="497150328"/>
+ </object>
+ <object class="_NSCornerView" key="NSCornerView" id="837150896">
+ <reference key="NSNextResponder" ref="85174318"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrame">{{224, 0}, {16, 23}}</string>
+ <reference key="NSSuperview" ref="85174318"/>
+ <reference key="NSNextKeyView" ref="410309725"/>
+ </object>
+ <array class="NSMutableArray" key="NSTableColumns">
+ <object class="NSTableColumn" id="867115630">
+ <double key="NSWidth">101</double>
+ <double key="NSMinWidth">40</double>
+ <double key="NSMaxWidth">1000</double>
+ <object class="NSTableHeaderCell" key="NSHeaderCell">
+ <int key="NSCellFlags">75497536</int>
+ <int key="NSCellFlags2">2048</int>
+ <string key="NSContents"/>
+ <object class="NSFont" key="NSSupport" id="26">
+ <bool key="IBIsSystemFont">YES</bool>
+ <double key="NSSize">11</double>
+ <int key="NSfFlags">3100</int>
+ </object>
+ <object class="NSColor" key="NSBackgroundColor" id="907423441">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MC4zMzMzMzI5OQA</bytes>
+ </object>
+ <object class="NSColor" key="NSTextColor" id="1031637411">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">headerTextColor</string>
+ <object class="NSColor" key="NSColor" id="637251812">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MAA</bytes>
+ </object>
+ </object>
+ </object>
+ <object class="NSTextFieldCell" key="NSDataCell" id="1026765034">
+ <int key="NSCellFlags">337641536</int>
+ <int key="NSCellFlags2">2048</int>
+ <string key="NSContents">Text Cell</string>
+ <object class="NSFont" key="NSSupport" id="719066366">
+ <bool key="IBIsSystemFont">YES</bool>
+ <double key="NSSize">13</double>
+ <int key="NSfFlags">1044</int>
+ </object>
+ <reference key="NSControlView" ref="497150328"/>
+ <object class="NSColor" key="NSBackgroundColor" id="421034111">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlBackgroundColor</string>
+ <object class="NSColor" key="NSColor" id="450059627">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
+ </object>
+ </object>
+ <object class="NSColor" key="NSTextColor" id="183411164">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlTextColor</string>
+ <reference key="NSColor" ref="637251812"/>
+ </object>
+ </object>
+ <int key="NSResizingMask">3</int>
+ <bool key="NSIsResizeable">YES</bool>
+ <bool key="NSIsEditable">YES</bool>
+ <reference key="NSTableView" ref="497150328"/>
+ </object>
+ <object class="NSTableColumn" id="328836390">
+ <double key="NSWidth">116</double>
+ <double key="NSMinWidth">40</double>
+ <double key="NSMaxWidth">1000</double>
+ <object class="NSTableHeaderCell" key="NSHeaderCell">
+ <int key="NSCellFlags">75497536</int>
+ <int key="NSCellFlags2">2048</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSBackgroundColor" ref="907423441"/>
+ <reference key="NSTextColor" ref="1031637411"/>
+ </object>
+ <object class="NSTextFieldCell" key="NSDataCell" id="114565872">
+ <int key="NSCellFlags">337641536</int>
+ <int key="NSCellFlags2">2048</int>
+ <string key="NSContents">Text Cell</string>
+ <reference key="NSSupport" ref="719066366"/>
+ <reference key="NSControlView" ref="497150328"/>
+ <reference key="NSBackgroundColor" ref="421034111"/>
+ <reference key="NSTextColor" ref="183411164"/>
+ </object>
+ <int key="NSResizingMask">3</int>
+ <bool key="NSIsResizeable">YES</bool>
+ <bool key="NSIsEditable">YES</bool>
+ <reference key="NSTableView" ref="497150328"/>
+ </object>
+ </array>
+ <double key="NSIntercellSpacingWidth">3</double>
+ <double key="NSIntercellSpacingHeight">2</double>
+ <reference key="NSBackgroundColor" ref="421034111"/>
+ <object class="NSColor" key="NSGridColor">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">gridColor</string>
+ <object class="NSColor" key="NSColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MC41AA</bytes>
+ </object>
+ </object>
+ <double key="NSRowHeight">17</double>
+ <int key="NSTvFlags">-700448768</int>
+ <reference key="NSDelegate"/>
+ <reference key="NSDataSource"/>
+ <int key="NSColumnAutoresizingStyle">4</int>
+ <int key="NSDraggingSourceMaskForLocal">15</int>
+ <int key="NSDraggingSourceMaskForNonLocal">0</int>
+ <bool key="NSAllowsTypeSelect">YES</bool>
+ <int key="NSTableViewDraggingDestinationStyle">0</int>
+ <int key="NSTableViewGroupRowStyle">1</int>
+ </object>
+ </array>
+ <string key="NSFrame">{{1, 23}, {223, 32}}</string>
+ <reference key="NSSuperview" ref="85174318"/>
+ <reference key="NSNextKeyView" ref="497150328"/>
+ <reference key="NSDocView" ref="497150328"/>
+ <reference key="NSBGColor" ref="421034111"/>
+ <int key="NScvFlags">4</int>
+ <bool key="NSAutomaticallyAdjustsContentInsets">YES</bool>
+ </object>
+ <object class="NSScroller" id="975309690">
+ <reference key="NSNextResponder" ref="85174318"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrame">{{224, 23}, {15, 32}}</string>
+ <reference key="NSSuperview" ref="85174318"/>
+ <reference key="NSNextKeyView" ref="745203310"/>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ <string key="NSControlAction">_doScroller:</string>
+ <reference key="NSControlTarget" ref="85174318"/>
+ <reference key="NSTarget" ref="85174318"/>
+ <string key="NSAction">_doScroller:</string>
+ <double key="NSCurValue">37</double>
+ <double key="NSPercent">0.1947367936372757</double>
+ </object>
+ <object class="NSScroller" id="745203310">
+ <reference key="NSNextResponder" ref="85174318"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrame">{{1, 55}, {223, 15}}</string>
+ <reference key="NSSuperview" ref="85174318"/>
+ <reference key="NSNextKeyView" ref="826932166"/>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ <string key="NSControlAction">_doScroller:</string>
+ <reference key="NSControlTarget" ref="85174318"/>
+ <int key="NSsFlags">1</int>
+ <reference key="NSTarget" ref="85174318"/>
+ <string key="NSAction">_doScroller:</string>
+ <double key="NSPercent">0.57142859697341919</double>
+ </object>
+ <object class="NSClipView" id="700173326">
+ <reference key="NSNextResponder" ref="85174318"/>
+ <int key="NSvFlags">2338</int>
+ <array class="NSMutableArray" key="NSSubviews">
+ <reference ref="218180457"/>
+ </array>
+ <string key="NSFrame">{{1, 0}, {223, 23}}</string>
+ <reference key="NSSuperview" ref="85174318"/>
+ <reference key="NSNextKeyView" ref="218180457"/>
+ <reference key="NSDocView" ref="218180457"/>
+ <bool key="NSAutomaticallyAdjustsContentInsets">YES</bool>
+ </object>
+ <reference ref="837150896"/>
+ </array>
+ <string key="NSFrame">{{20, 227}, {240, 71}}</string>
+ <reference key="NSSuperview" ref="640013893"/>
+ <reference key="NSNextKeyView" ref="700173326"/>
+ <int key="NSsFlags">133170</int>
+ <reference key="NSVScroller" ref="975309690"/>
+ <reference key="NSHScroller" ref="745203310"/>
+ <reference key="NSContentView" ref="410309725"/>
+ <reference key="NSHeaderClipView" ref="700173326"/>
+ <reference key="NSCornerView" ref="837150896"/>
+ <bytes key="NSScrollAmts">QSAAAEEgAABBmAAAQZgAAA</bytes>
+ <double key="NSMinMagnification">0.25</double>
+ <double key="NSMaxMagnification">4</double>
+ <double key="NSMagnification">1</double>
+ </object>
+ <object class="NSBox" id="1010937789">
+ <reference key="NSNextResponder" ref="640013893"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{266, 0}, {5, 318}}</string>
+ <reference key="NSSuperview" ref="640013893"/>
+ <reference key="NSNextKeyView" ref="321194065"/>
+ <string key="NSOffsets">{0, 0}</string>
+ <object class="NSTextFieldCell" key="NSTitleCell">
+ <int key="NSCellFlags">67108864</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">Box</string>
+ <reference key="NSSupport" ref="719066366"/>
+ <object class="NSColor" key="NSBackgroundColor" id="938122495">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">textBackgroundColor</string>
+ <object class="NSColor" key="NSColor" id="103793517">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MQA</bytes>
+ </object>
+ </object>
+ <object class="NSColor" key="NSTextColor">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">labelColor</string>
+ <reference key="NSColor" ref="637251812"/>
+ </object>
+ </object>
+ <int key="NSBorderType">3</int>
+ <int key="NSBoxType">2</int>
+ <int key="NSTitlePosition">0</int>
+ <bool key="NSTransparent">NO</bool>
+ </object>
+ <object class="NSTextField" id="321194065">
+ <reference key="NSNextResponder" ref="640013893"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{280, 281}, {38, 17}}</string>
+ <reference key="NSSuperview" ref="640013893"/>
+ <reference key="NSNextKeyView" ref="437142657"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="765978048">
+ <int key="NSCellFlags">68157504</int>
+ <int key="NSCellFlags2">272630784</int>
+ <string key="NSContents">HaHa</string>
+ <reference key="NSSupport" ref="719066366"/>
+ <reference key="NSControlView" ref="321194065"/>
+ <object class="NSColor" key="NSBackgroundColor" id="434344295">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlColor</string>
+ <reference key="NSColor" ref="450059627"/>
+ </object>
+ <reference key="NSTextColor" ref="183411164"/>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ <int key="NSTextFieldAlignmentRectInsetsVersion">2</int>
+ </object>
+ <object class="NSSearchField" id="437142657">
+ <reference key="NSNextResponder" ref="640013893"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{277, 251}, {96, 22}}</string>
+ <reference key="NSSuperview" ref="640013893"/>
+ <reference key="NSNextKeyView" ref="426312658"/>
+ <bool key="NSViewIsLayerTreeHost">YES</bool>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSSearchFieldCell" key="NSCell" id="581737406">
+ <int key="NSCellFlags">342884416</int>
+ <int key="NSCellFlags2">268436480</int>
+ <string key="NSContents">Still Haven't Found What I'm Searching For</string>
+ <reference key="NSSupport" ref="719066366"/>
+ <reference key="NSControlView" ref="437142657"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <int key="NSTextBezelStyle">1</int>
+ <reference key="NSBackgroundColor" ref="938122495"/>
+ <reference key="NSTextColor" ref="183411164"/>
+ <object class="NSButtonCell" key="NSSearchButtonCell">
+ <int key="NSCellFlags">0</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">search</string>
+ <reference key="NSControlView" ref="437142657"/>
+ <string key="NSAction">_searchFieldSearch:</string>
+ <reference key="NSTarget" ref="581737406"/>
+ <int key="NSButtonFlags">138690560</int>
+ <int key="NSButtonFlags2">0</int>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">400</int>
+ <int key="NSPeriodicInterval">75</int>
+ </object>
+ <object class="NSButtonCell" key="NSCancelButtonCell">
+ <int key="NSCellFlags">0</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">clear</string>
+ <array class="NSMutableArray" key="NSAccessibilityOverriddenAttributes">
+ <dictionary class="NSMutableDictionary">
+ <string key="AXDescription">cancel</string>
+ <integer value="1" key="NSAccessibilityEncodedAttributesValueType"/>
+ </dictionary>
+ </array>
+ <reference key="NSControlView" ref="437142657"/>
+ <string key="NSAction">_searchFieldCancel:</string>
+ <reference key="NSTarget" ref="581737406"/>
+ <int key="NSButtonFlags">138690560</int>
+ <int key="NSButtonFlags2">0</int>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">400</int>
+ <int key="NSPeriodicInterval">75</int>
+ </object>
+ <int key="NSMaximumRecents">255</int>
+ <bytes key="NSSearchFieldFlags">BgAAAA</bytes>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ <int key="NSTextFieldAlignmentRectInsetsVersion">2</int>
+ </object>
+ <object class="NSTextField" id="426312658">
+ <reference key="NSNextResponder" ref="640013893"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{277, 219}, {96, 22}}</string>
+ <reference key="NSSuperview" ref="640013893"/>
+ <reference key="NSNextKeyView" ref="582902776"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="403080839">
+ <int key="NSCellFlags">-1804599231</int>
+ <int key="NSCellFlags2">272630784</int>
+ <string key="NSContents">Once upon a time</string>
+ <reference key="NSSupport" ref="719066366"/>
+ <reference key="NSControlView" ref="426312658"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <reference key="NSBackgroundColor" ref="938122495"/>
+ <object class="NSColor" key="NSTextColor">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">textColor</string>
+ <reference key="NSColor" ref="637251812"/>
+ </object>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ <int key="NSTextFieldAlignmentRectInsetsVersion">2</int>
+ </object>
+ <object class="NSButton" id="582902776">
+ <reference key="NSNextResponder" ref="640013893"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{275, 195}, {96, 18}}</string>
+ <reference key="NSSuperview" ref="640013893"/>
+ <reference key="NSNextKeyView" ref="938586919"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="540877530">
+ <int key="NSCellFlags">-2080374784</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">CheckMate!</string>
+ <reference key="NSSupport" ref="719066366"/>
+ <reference key="NSControlView" ref="582902776"/>
+ <int key="NSButtonFlags">1211912448</int>
+ <int key="NSButtonFlags2">130</int>
+ <object class="NSCustomResource" key="NSNormalImage">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSSwitch</string>
+ </object>
+ <object class="NSButtonImageSource" key="NSAlternateImage">
+ <string key="NSImageName">NSSwitch</string>
+ </object>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ </object>
+ <object class="NSSlider" id="938586919">
+ <reference key="NSNextResponder" ref="640013893"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{276, 159}, {96, 21}}</string>
+ <reference key="NSSuperview" ref="640013893"/>
+ <reference key="NSNextKeyView" ref="672462228"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSSliderCell" key="NSCell" id="630356720">
+ <int key="NSCellFlags">-2080374784</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents"/>
+ <object class="NSFont" key="NSSupport">
+ <string key="NSName">Helvetica</string>
+ <double key="NSSize">12</double>
+ <int key="NSfFlags">16</int>
+ </object>
+ <reference key="NSControlView" ref="938586919"/>
+ <double key="NSMaxValue">100</double>
+ <double key="NSMinValue">0.0</double>
+ <double key="NSValue">50</double>
+ <double key="NSAltIncValue">0.0</double>
+ <int key="NSNumberOfTickMarks">0</int>
+ <int key="NSTickMarkPosition">1</int>
+ <bool key="NSAllowsTickMarkValuesOnly">NO</bool>
+ <bool key="NSVertical">NO</bool>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ </object>
+ <object class="NSButton" id="728377240">
+ <reference key="NSNextResponder" ref="640013893"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{275, 115}, {96, 32}}</string>
+ <reference key="NSSuperview" ref="640013893"/>
+ <reference key="NSNextKeyView" ref="146897443"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="808585577">
+ <int key="NSCellFlags">67108864</int>
+ <int key="NSCellFlags2">134217728</int>
+ <string key="NSContents">Cancel</string>
+ <reference key="NSSupport" ref="719066366"/>
+ <reference key="NSControlView" ref="728377240"/>
+ <int key="NSButtonFlags">-2038284288</int>
+ <int key="NSButtonFlags2">129</int>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ </object>
+ <object class="NSColorWell" id="469359029">
+ <reference key="NSNextResponder" ref="640013893"/>
+ <int key="NSvFlags">268</int>
+ <set class="NSMutableSet" key="NSDragTypes">
+ <string>NSColor pasteboard type</string>
+ </set>
+ <string key="NSFrame">{{279, 62}, {87, 23}}</string>
+ <reference key="NSSuperview" ref="640013893"/>
+ <bool key="NSEnabled">YES</bool>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ <bool key="NSIsBordered">YES</bool>
+ <object class="NSColor" key="NSColor">
+ <int key="NSColorSpace">1</int>
+ <bytes key="NSRGB">MC4wNTgxMzA0OTkgMC4wNTU1NDE4OTkgMQA</bytes>
+ </object>
+ </object>
+ <object class="NSProgressIndicator" id="146897443">
+ <reference key="NSNextResponder" ref="640013893"/>
+ <int key="NSvFlags">1292</int>
+ <string key="NSFrame">{{280, 91}, {85, 12}}</string>
+ <reference key="NSSuperview" ref="640013893"/>
+ <reference key="NSNextKeyView" ref="469359029"/>
+ <int key="NSpiFlags">16648</int>
+ <double key="NSMinValue">16</double>
+ <double key="NSMaxValue">100</double>
+ </object>
+ <object class="NSScrollView" id="826932166">
+ <reference key="NSNextResponder" ref="640013893"/>
+ <int key="NSvFlags">256</int>
+ <array class="NSMutableArray" key="NSSubviews">
+ <object class="NSClipView" id="954815377">
+ <reference key="NSNextResponder" ref="826932166"/>
+ <int key="NSvFlags">2322</int>
+ <array class="NSMutableArray" key="NSSubviews">
+ <object class="NSTextView" id="1039988695">
+ <reference key="NSNextResponder" ref="954815377"/>
+ <int key="NSvFlags">2322</int>
+ <string key="NSFrameSize">{223, 54}</string>
+ <reference key="NSSuperview" ref="954815377"/>
+ <reference key="NSNextKeyView" ref="767227615"/>
+ <object class="NSTextContainer" key="NSTextContainer" id="35629099">
+ <object class="NSLayoutManager" key="NSLayoutManager">
+ <object class="NSTextStorage" key="NSTextStorage">
+ <object class="NSMutableString" key="NSString">
+ <characters key="NS.bytes">Lorem ipsum dolor</characters>
+ </object>
+ <dictionary key="NSAttributes">
+ <object class="NSFont" key="NSFont">
+ <bool key="IBIsSystemFont">YES</bool>
+ <double key="NSSize">10</double>
+ <int key="NSfFlags">2843</int>
+ </object>
+ <object class="NSParagraphStyle" key="NSParagraphStyle">
+ <int key="NSAlignment">3</int>
+ <array key="NSTabStops">
+ <object class="NSTextTab">
+ <double key="NSLocation">0.0</double>
+ </object>
+ <object class="NSTextTab">
+ <double key="NSLocation">56</double>
+ </object>
+ <object class="NSTextTab">
+ <double key="NSLocation">112</double>
+ </object>
+ <object class="NSTextTab">
+ <double key="NSLocation">168</double>
+ </object>
+ <object class="NSTextTab">
+ <double key="NSLocation">224</double>
+ </object>
+ <object class="NSTextTab">
+ <double key="NSLocation">280</double>
+ </object>
+ <object class="NSTextTab">
+ <double key="NSLocation">336</double>
+ </object>
+ <object class="NSTextTab">
+ <double key="NSLocation">392</double>
+ </object>
+ <object class="NSTextTab">
+ <double key="NSLocation">448</double>
+ </object>
+ <object class="NSTextTab">
+ <double key="NSLocation">504</double>
+ </object>
+ <object class="NSTextTab">
+ <double key="NSLocation">560</double>
+ </object>
+ <object class="NSTextTab">
+ <double key="NSLocation">616</double>
+ </object>
+ <object class="NSTextTab">
+ <double key="NSLocation">672</double>
+ </object>
+ <object class="NSTextTab">
+ <double key="NSLocation">728</double>
+ </object>
+ <object class="NSTextTab">
+ <double key="NSLocation">784</double>
+ </object>
+ <object class="NSTextTab">
+ <double key="NSLocation">840</double>
+ </object>
+ <object class="NSTextTab">
+ <double key="NSLocation">896</double>
+ </object>
+ <object class="NSTextTab">
+ <double key="NSLocation">952</double>
+ </object>
+ <object class="NSTextTab">
+ <double key="NSLocation">1008</double>
+ </object>
+ <object class="NSTextTab">
+ <double key="NSLocation">1064</double>
+ </object>
+ <object class="NSTextTab">
+ <double key="NSLocation">1120</double>
+ </object>
+ <object class="NSTextTab">
+ <double key="NSLocation">1176</double>
+ </object>
+ <object class="NSTextTab">
+ <double key="NSLocation">1232</double>
+ </object>
+ <object class="NSTextTab">
+ <double key="NSLocation">1288</double>
+ </object>
+ <object class="NSTextTab">
+ <double key="NSLocation">1344</double>
+ </object>
+ <object class="NSTextTab">
+ <double key="NSLocation">1400</double>
+ </object>
+ <object class="NSTextTab">
+ <double key="NSLocation">1456</double>
+ </object>
+ <object class="NSTextTab">
+ <double key="NSLocation">1512</double>
+ </object>
+ <object class="NSTextTab">
+ <double key="NSLocation">1568</double>
+ </object>
+ <object class="NSTextTab">
+ <double key="NSLocation">1624</double>
+ </object>
+ <object class="NSTextTab">
+ <double key="NSLocation">1680</double>
+ </object>
+ <object class="NSTextTab">
+ <double key="NSLocation">1736</double>
+ </object>
+ </array>
+ </object>
+ </dictionary>
+ <nil key="NSDelegate"/>
+ </object>
+ <array class="NSMutableArray" key="NSTextContainers">
+ <reference ref="35629099"/>
+ </array>
+ <int key="NSLMFlags">38</int>
+ <nil key="NSDelegate"/>
+ </object>
+ <reference key="NSTextView" ref="1039988695"/>
+ <double key="NSWidth">223</double>
+ <int key="NSTCFlags">1</int>
+ </object>
+ <object class="NSTextViewSharedData" key="NSSharedData">
+ <int key="NSFlags">67120103</int>
+ <int key="NSTextCheckingTypes">0</int>
+ <nil key="NSMarkedAttributes"/>
+ <reference key="NSBackgroundColor" ref="103793517"/>
+ <dictionary key="NSSelectedAttributes">
+ <object class="NSColor" key="NSBackgroundColor">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">selectedTextBackgroundColor</string>
+ <reference key="NSColor" ref="450059627"/>
+ </object>
+ <object class="NSColor" key="NSColor">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">selectedTextColor</string>
+ <reference key="NSColor" ref="637251812"/>
+ </object>
+ </dictionary>
+ <reference key="NSInsertionColor" ref="183411164"/>
+ <dictionary key="NSLinkAttributes">
+ <object class="NSColor" key="NSColor">
+ <int key="NSColorSpace">1</int>
+ <bytes key="NSRGB">MCAwIDEAA</bytes>
+ </object>
+ <integer value="1" key="NSUnderline"/>
+ </dictionary>
+ <nil key="NSDefaultParagraphStyle"/>
+ <nil key="NSTextFinder"/>
+ <int key="NSPreferredTextFinderStyle">1</int>
+ </object>
+ <int key="NSTVFlags">70</int>
+ <string key="NSMaxSize">{463, 10000000}</string>
+ <nil key="NSDelegate"/>
+ </object>
+ </array>
+ <string key="NSFrame">{{1, 1}, {223, 54}}</string>
+ <reference key="NSSuperview" ref="826932166"/>
+ <reference key="NSNextKeyView" ref="1039988695"/>
+ <reference key="NSDocView" ref="1039988695"/>
+ <reference key="NSBGColor" ref="103793517"/>
+ <object class="NSCursor" key="NSCursor">
+ <string key="NSHotSpot">{4, -5}</string>
+ <int key="NSCursorType">1</int>
+ </object>
+ <int key="NScvFlags">4</int>
+ <bool key="NSAutomaticallyAdjustsContentInsets">YES</bool>
+ </object>
+ <object class="NSScroller" id="767227615">
+ <reference key="NSNextResponder" ref="826932166"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrame">{{224, 1}, {15, 54}}</string>
+ <reference key="NSSuperview" ref="826932166"/>
+ <reference key="NSNextKeyView" ref="1010937789"/>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ <string key="NSControlAction">_doScroller:</string>
+ <reference key="NSControlTarget" ref="826932166"/>
+ <reference key="NSTarget" ref="826932166"/>
+ <string key="NSAction">_doScroller:</string>
+ <double key="NSCurValue">1</double>
+ <double key="NSPercent">0.73888885974884033</double>
+ </object>
+ <object class="NSScroller" id="666418199">
+ <reference key="NSNextResponder" ref="826932166"/>
+ <int key="NSvFlags">-2147483392</int>
+ <string key="NSFrame">{{-100, -100}, {87, 18}}</string>
+ <reference key="NSSuperview" ref="826932166"/>
+ <reference key="NSNextKeyView" ref="954815377"/>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ <string key="NSControlAction">_doScroller:</string>
+ <reference key="NSControlTarget" ref="826932166"/>
+ <int key="NSsFlags">1</int>
+ <reference key="NSTarget" ref="826932166"/>
+ <string key="NSAction">_doScroller:</string>
+ <double key="NSCurValue">1</double>
+ <double key="NSPercent">0.94565218687057495</double>
+ </object>
+ </array>
+ <string key="NSFrame">{{20, 163}, {240, 56}}</string>
+ <reference key="NSSuperview" ref="640013893"/>
+ <reference key="NSNextKeyView" ref="666418199"/>
+ <int key="NSsFlags">133138</int>
+ <reference key="NSVScroller" ref="767227615"/>
+ <reference key="NSHScroller" ref="666418199"/>
+ <reference key="NSContentView" ref="954815377"/>
+ <double key="NSMinMagnification">0.25</double>
+ <double key="NSMaxMagnification">4</double>
+ <double key="NSMagnification">1</double>
+ </object>
+ <object class="NSTabView" id="672462228">
+ <reference key="NSNextResponder" ref="640013893"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{13, 25}, {254, 124}}</string>
+ <reference key="NSSuperview" ref="640013893"/>
+ <reference key="NSNextKeyView" ref="940943414"/>
+ <array class="NSMutableArray" key="NSTabViewItems">
+ <object class="NSTabViewItem" id="229928186">
+ <string key="NSIdentifier">1</string>
+ <object class="NSView" key="NSView" id="940943414">
+ <reference key="NSNextResponder" ref="672462228"/>
+ <int key="NSvFlags">274</int>
+ <string key="NSFrame">{{10, 33}, {234, 78}}</string>
+ <reference key="NSSuperview" ref="672462228"/>
+ </object>
+ <string key="NSLabel">Tab</string>
+ <reference key="NSColor" ref="434344295"/>
+ <reference key="NSTabView" ref="672462228"/>
+ </object>
+ <object class="NSTabViewItem" id="984817245">
+ <string key="NSIdentifier">2</string>
+ <object class="NSView" key="NSView" id="50036484">
+ <nil key="NSNextResponder"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrame">{{10, 33}, {234, 78}}</string>
+ </object>
+ <string key="NSLabel">View</string>
+ <reference key="NSColor" ref="434344295"/>
+ <reference key="NSTabView" ref="672462228"/>
+ </object>
+ </array>
+ <reference key="NSSelectedTabViewItem" ref="229928186"/>
+ <reference key="NSFont" ref="719066366"/>
+ <int key="NSTvFlags">0</int>
+ <bool key="NSAllowTruncatedLabels">YES</bool>
+ <bool key="NSDrawsBackground">YES</bool>
+ <array class="NSMutableArray" key="NSSubviews">
+ <reference ref="940943414"/>
+ </array>
+ </object>
+ </array>
+ <string key="NSFrameSize">{393, 318}</string>
+ <reference key="NSNextKeyView" ref="85174318"/>
+ </object>
+ <string key="NSScreenRect">{{0, 0}, {2560, 1577}}</string>
+ <bool key="NSWindowIsRestorable">YES</bool>
+ </object>
+ </array>
+ <object class="IBObjectContainer" key="IBDocument.Objects">
+ <array key="connectionRecords">
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">field_</string>
+ <reference key="source" ref="774623032"/>
+ <reference key="destination" ref="426312658"/>
+ </object>
+ <int key="connectionID">45</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">window</string>
+ <reference key="source" ref="774623032"/>
+ <reference key="destination" ref="392237883"/>
+ </object>
+ <int key="connectionID">29</int>
+ </object>
+ </array>
+ <object class="IBMutableOrderedSet" key="objectRecords">
+ <array key="orderedObjects">
+ <object class="IBObjectRecord">
+ <int key="objectID">0</int>
+ <array key="object" id="0"/>
+ <reference key="children" ref="948991554"/>
+ <nil key="parent"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-2</int>
+ <reference key="object" ref="774623032"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">File's Owner</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-1</int>
+ <reference key="object" ref="121913320"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">First Responder</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-3</int>
+ <reference key="object" ref="575648047"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">Application</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1</int>
+ <reference key="object" ref="392237883"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="640013893"/>
+ </array>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">Window (Window)</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2</int>
+ <reference key="object" ref="640013893"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="728377240"/>
+ <reference ref="85174318"/>
+ <reference ref="321194065"/>
+ <reference ref="437142657"/>
+ <reference ref="426312658"/>
+ <reference ref="582902776"/>
+ <reference ref="826932166"/>
+ <reference ref="1010937789"/>
+ <reference ref="938586919"/>
+ <reference ref="146897443"/>
+ <reference ref="469359029"/>
+ <reference ref="672462228"/>
+ </array>
+ <reference key="parent" ref="392237883"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">5</int>
+ <reference key="object" ref="728377240"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="808585577"/>
+ </array>
+ <reference key="parent" ref="640013893"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">7</int>
+ <reference key="object" ref="85174318"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="497150328"/>
+ <reference ref="745203310"/>
+ <reference ref="218180457"/>
+ <reference ref="975309690"/>
+ </array>
+ <reference key="parent" ref="640013893"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">10</int>
+ <reference key="object" ref="497150328"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="867115630"/>
+ <reference ref="328836390"/>
+ </array>
+ <reference key="parent" ref="85174318"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">12</int>
+ <reference key="object" ref="867115630"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="1026765034"/>
+ </array>
+ <reference key="parent" ref="497150328"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">15</int>
+ <reference key="object" ref="1026765034"/>
+ <reference key="parent" ref="867115630"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">13</int>
+ <reference key="object" ref="328836390"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="114565872"/>
+ </array>
+ <reference key="parent" ref="497150328"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">14</int>
+ <reference key="object" ref="114565872"/>
+ <reference key="parent" ref="328836390"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">16</int>
+ <reference key="object" ref="321194065"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="765978048"/>
+ </array>
+ <reference key="parent" ref="640013893"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">18</int>
+ <reference key="object" ref="437142657"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="581737406"/>
+ </array>
+ <reference key="parent" ref="640013893"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">20</int>
+ <reference key="object" ref="426312658"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="403080839"/>
+ </array>
+ <reference key="parent" ref="640013893"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">22</int>
+ <reference key="object" ref="582902776"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="540877530"/>
+ </array>
+ <reference key="parent" ref="640013893"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">24</int>
+ <reference key="object" ref="826932166"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="1039988695"/>
+ <reference ref="666418199"/>
+ <reference ref="767227615"/>
+ </array>
+ <reference key="parent" ref="640013893"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">27</int>
+ <reference key="object" ref="1039988695"/>
+ <reference key="parent" ref="826932166"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">28</int>
+ <reference key="object" ref="1010937789"/>
+ <reference key="parent" ref="640013893"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">66</int>
+ <reference key="object" ref="938586919"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="630356720"/>
+ </array>
+ <reference key="parent" ref="640013893"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">68</int>
+ <reference key="object" ref="146897443"/>
+ <reference key="parent" ref="640013893"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">69</int>
+ <reference key="object" ref="469359029"/>
+ <reference key="parent" ref="640013893"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">70</int>
+ <reference key="object" ref="672462228"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="229928186"/>
+ <reference ref="984817245"/>
+ </array>
+ <reference key="parent" ref="640013893"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">71</int>
+ <reference key="object" ref="229928186"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="940943414"/>
+ </array>
+ <reference key="parent" ref="672462228"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">74</int>
+ <reference key="object" ref="940943414"/>
+ <reference key="parent" ref="229928186"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">72</int>
+ <reference key="object" ref="984817245"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="50036484"/>
+ </array>
+ <reference key="parent" ref="672462228"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">73</int>
+ <reference key="object" ref="50036484"/>
+ <reference key="parent" ref="984817245"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">77</int>
+ <reference key="object" ref="808585577"/>
+ <reference key="parent" ref="728377240"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">78</int>
+ <reference key="object" ref="765978048"/>
+ <reference key="parent" ref="321194065"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">79</int>
+ <reference key="object" ref="581737406"/>
+ <reference key="parent" ref="437142657"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">80</int>
+ <reference key="object" ref="403080839"/>
+ <reference key="parent" ref="426312658"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">81</int>
+ <reference key="object" ref="540877530"/>
+ <reference key="parent" ref="582902776"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">82</int>
+ <reference key="object" ref="630356720"/>
+ <reference key="parent" ref="938586919"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">83</int>
+ <reference key="object" ref="745203310"/>
+ <reference key="parent" ref="85174318"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">84</int>
+ <reference key="object" ref="218180457"/>
+ <reference key="parent" ref="85174318"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">85</int>
+ <reference key="object" ref="975309690"/>
+ <reference key="parent" ref="85174318"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">86</int>
+ <reference key="object" ref="666418199"/>
+ <reference key="parent" ref="826932166"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">87</int>
+ <reference key="object" ref="767227615"/>
+ <reference key="parent" ref="826932166"/>
+ </object>
+ </array>
+ </object>
+ <dictionary class="NSMutableDictionary" key="flattenedProperties">
+ <string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="-3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <boolean value="YES" key="1.NSWindowTemplate.visibleAtLaunch"/>
+ <string key="10.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="12.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="13.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="14.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="15.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="16.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="18.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="20.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="22.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="24.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="27.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="28.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="5.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="66.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="68.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="69.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="7.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="70.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="71.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="72.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="73.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="74.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="77.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="78.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="79.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="80.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="81.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="82.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="83.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="84.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="85.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="86.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="87.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ </dictionary>
+ <dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
+ <nil key="activeLocalization"/>
+ <dictionary class="NSMutableDictionary" key="localizations"/>
+ <nil key="sourceID"/>
+ <int key="maxID">87</int>
+ </object>
+ <object class="IBClassDescriber" key="IBDocument.Classes"/>
+ <int key="IBDocument.localizationMode">0</int>
+ <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
+ <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+ <integer value="1050" key="NS.object.0"/>
+ </object>
+ <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
+ <integer value="4600" key="NS.object.0"/>
+ </object>
+ <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+ <int key="IBDocument.defaultPropertyAccessControl">3</int>
+ <object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
+ <string key="NS.key.0">NSSwitch</string>
+ <string key="NS.object.0">{15, 15}</string>
+ </object>
+ </data>
+</archive>
diff --git a/UnitTesting/TestData/GTMUnitTestingTest.nib/info.nib b/UnitTesting/TestData/GTMUnitTestingTest.nib/info.nib
deleted file mode 100644
index 3fb1618..0000000
--- a/UnitTesting/TestData/GTMUnitTestingTest.nib/info.nib
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>IBFramework Version</key>
- <string>644</string>
- <key>IBLastKnownRelativeProjectPath</key>
- <string>../GTM.xcodeproj</string>
- <key>IBOldestOS</key>
- <integer>5</integer>
- <key>IBOpenObjects</key>
- <array>
- <integer>2</integer>
- </array>
- <key>IBSystem Version</key>
- <string>9C31</string>
- <key>targetFramework</key>
- <string>IBCocoaFramework</string>
-</dict>
-</plist>
diff --git a/UnitTesting/TestData/GTMUnitTestingTest.nib/keyedobjects.nib b/UnitTesting/TestData/GTMUnitTestingTest.nib/keyedobjects.nib
index d3104e2..8a771e8 100644
--- a/UnitTesting/TestData/GTMUnitTestingTest.nib/keyedobjects.nib
+++ b/UnitTesting/TestData/GTMUnitTestingTest.nib/keyedobjects.nib
Binary files differ
diff --git a/UnitTesting/TestData/GTMUnitTestingTestApp.10.6.gtmUTState b/UnitTesting/TestData/GTMUnitTestingTestApp.10.6.gtmUTState
deleted file mode 100644
index 2f2ef56..0000000
--- a/UnitTesting/TestData/GTMUnitTestingTestApp.10.6.gtmUTState
+++ /dev/null
@@ -1,2608 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>$GTMArchive</key>
- <string>GTMUnitTestingArchive</string>
- <key>$GTMVersion</key>
- <integer>1</integer>
- <key>ApplicationMainWindow</key>
- <integer>0</integer>
- <key>BoolTest</key>
- <true/>
- <key>BytesTest</key>
- <data>
- Qnl0ZXNUZXN0
- </data>
- <key>DoubleTest</key>
- <real>1</real>
- <key>FloatTest</key>
- <real>1</real>
- <key>Int32Test</key>
- <integer>1</integer>
- <key>Int64Test</key>
- <integer>1</integer>
- <key>IntTest</key>
- <integer>1</integer>
- <key>MenuBar</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>About NewApplication</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <true/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string></string>
- </dict>
- <key>MenuItem 10</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Quit NewApplication</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>,</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Preferences…</string>
- </dict>
- <key>MenuItem 3</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <true/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string></string>
- </dict>
- <key>MenuItem 4</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuTitle</key>
- <string>Services</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Services</string>
- </dict>
- <key>MenuItem 5</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <true/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string></string>
- </dict>
- <key>MenuItem 6</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>h</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Hide NewApplication</string>
- </dict>
- <key>MenuItem 7</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>h</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Hide Others</string>
- </dict>
- <key>MenuItem 8</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Show All</string>
- </dict>
- <key>MenuItem 9</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <true/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string></string>
- </dict>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>n</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>New</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>o</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Open…</string>
- </dict>
- <key>MenuItem 10</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>P</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Page Setup...</string>
- <key>MenuItemTooltip</key>
- <string></string>
- </dict>
- <key>MenuItem 11</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>p</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Print…</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Clear Menu</string>
- </dict>
- <key>MenuTitle</key>
- <string>Open Recent</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Open Recent</string>
- </dict>
- <key>MenuItem 3</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <true/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string></string>
- </dict>
- <key>MenuItem 4</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>w</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Close</string>
- </dict>
- <key>MenuItem 5</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <true/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>w</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Close All</string>
- </dict>
- <key>MenuItem 6</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>s</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Save</string>
- </dict>
- <key>MenuItem 7</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>S</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Save As…</string>
- </dict>
- <key>MenuItem 8</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Revert to Saved</string>
- </dict>
- <key>MenuItem 9</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <true/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string></string>
- </dict>
- <key>MenuTitle</key>
- <string>File</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>File</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>z</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Undo</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>Z</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Redo</string>
- </dict>
- <key>MenuItem 10</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>:</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Show Spelling…</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>;</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Check Spelling</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Check Spelling While Typing</string>
- </dict>
- <key>MenuItem 3</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Check Grammar With Spelling</string>
- </dict>
- <key>MenuTitle</key>
- <string>Spelling and Grammar</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Spelling and Grammar</string>
- </dict>
- <key>MenuItem 11</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>1</integer>
- <key>MenuItemTitle</key>
- <string>Smart Copy/Paste</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>2</integer>
- <key>MenuItemTitle</key>
- <string>Smart Quotes</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>3</integer>
- <key>MenuItemTitle</key>
- <string>Smart Links</string>
- </dict>
- <key>MenuTitle</key>
- <string>Substitutions</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Substitutions</string>
- </dict>
- <key>MenuItem 12</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Start Speaking</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Stop Speaking</string>
- </dict>
- <key>MenuTitle</key>
- <string>Speech</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Speech</string>
- </dict>
- <key>MenuItem 13</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <true/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string></string>
- </dict>
- <key>MenuItem 14</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Special Characters…</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <true/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string></string>
- </dict>
- <key>MenuItem 3</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>x</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Cut</string>
- </dict>
- <key>MenuItem 4</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>c</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Copy</string>
- </dict>
- <key>MenuItem 5</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>v</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Paste</string>
- </dict>
- <key>MenuItem 6</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Delete</string>
- </dict>
- <key>MenuItem 7</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>a</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Select All</string>
- </dict>
- <key>MenuItem 8</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <true/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string></string>
- </dict>
- <key>MenuItem 9</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>f</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>1</integer>
- <key>MenuItemTitle</key>
- <string>Find…</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>g</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>2</integer>
- <key>MenuItemTitle</key>
- <string>Find Next</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>G</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>3</integer>
- <key>MenuItemTitle</key>
- <string>Find Previous</string>
- </dict>
- <key>MenuItem 3</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>e</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>7</integer>
- <key>MenuItemTitle</key>
- <string>Use Selection for Find</string>
- </dict>
- <key>MenuItem 4</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>j</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Jump to Selection</string>
- </dict>
- <key>MenuTitle</key>
- <string>Find</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Find</string>
- </dict>
- <key>MenuTitle</key>
- <string>Edit</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Edit</string>
- </dict>
- <key>MenuItem 3</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>t</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>¬Menu Item</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>C</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Show Colors</string>
- </dict>
- <key>MenuTitle</key>
- <string>¬Menu Title</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>¬Menu Title</string>
- </dict>
- <key>MenuItem 4</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>t</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Show Toolbar</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Customize Toolbar…</string>
- </dict>
- <key>MenuTitle</key>
- <string>View</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>View</string>
- </dict>
- <key>MenuItem 5</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>?</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>NewApplication Help</string>
- </dict>
- <key>MenuTitle</key>
- <string>Help</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Help</string>
- </dict>
- <key>MenuTitle</key>
- <string>AMainMenu</string>
- </dict>
- <key>Window 0</key>
- <dict>
- <key>WindowContent</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- <key>ViewSubView 0</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- <key>ViewSubView 0</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- <key>ViewSubView 0</key>
- <dict>
- <key>ControlIsEnabled</key>
- <true/>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSTableView</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- </dict>
- <key>ViewSubView 1</key>
- <dict>
- <key>ControlIsEnabled</key>
- <false/>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSScroller</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 2</key>
- <dict>
- <key>ControlIsEnabled</key>
- <false/>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSScroller</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 3</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- <key>ViewSubView 0</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- </dict>
- <key>ViewSubView 4</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- </dict>
- <key>ViewSubView 1</key>
- <dict>
- <key>BoxBorderType</key>
- <integer>3</integer>
- <key>BoxTitle</key>
- <string>Box</string>
- <key>BoxTitlePosition</key>
- <integer>0</integer>
- <key>BoxType</key>
- <integer>2</integer>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 10</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- <key>ViewSubView 0</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- <key>ViewSubView 0</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- <key>ViewMenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Cut</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Copy</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Paste</string>
- </dict>
- <key>MenuItem 3</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <true/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string></string>
- </dict>
- <key>MenuItem 4</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Show Fonts</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>2</integer>
- <key>MenuItemTitle</key>
- <string>Bold</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>1</integer>
- <key>MenuItemTitle</key>
- <string>Italic</string>
- </dict>
- <key>MenuItem 3</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Underline</string>
- </dict>
- <key>MenuItem 4</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Outline</string>
- </dict>
- <key>MenuItem 5</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Styles…</string>
- </dict>
- <key>MenuItem 6</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Show Colors</string>
- </dict>
- <key>MenuTitle</key>
- <string>Font</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Font</string>
- </dict>
- <key>MenuItem 5</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Show Spelling and Grammar</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Check Document Now</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <true/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string></string>
- </dict>
- <key>MenuItem 3</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Check Spelling While Typing</string>
- </dict>
- <key>MenuItem 4</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Check Grammar With Spelling</string>
- </dict>
- <key>MenuItem 5</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Correct Spelling Automatically</string>
- </dict>
- <key>MenuTitle</key>
- <string>Spelling and Grammar</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Spelling and Grammar</string>
- </dict>
- <key>MenuItem 6</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Replace Quotes</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Replace Dashes</string>
- </dict>
- <key>MenuItem 10</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Smart Links</string>
- </dict>
- <key>MenuItem 11</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Data Detectors</string>
- </dict>
- <key>MenuItem 12</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Text Replacement</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Add Links</string>
- </dict>
- <key>MenuItem 3</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Replace Text</string>
- </dict>
- <key>MenuItem 4</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <true/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string></string>
- </dict>
- <key>MenuItem 5</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Show Substitutions</string>
- </dict>
- <key>MenuItem 6</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <true/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string></string>
- </dict>
- <key>MenuItem 7</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Smart Copy/Paste</string>
- </dict>
- <key>MenuItem 8</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Smart Quotes</string>
- </dict>
- <key>MenuItem 9</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Smart Dashes</string>
- </dict>
- <key>MenuTitle</key>
- <string>Substitutions</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Substitutions</string>
- </dict>
- <key>MenuItem 7</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Make Upper Case</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Make Lower Case</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Capitalize</string>
- </dict>
- <key>MenuTitle</key>
- <string>Transformations</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Transformations</string>
- </dict>
- <key>MenuItem 8</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Start Speaking</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Stop Speaking</string>
- </dict>
- <key>MenuTitle</key>
- <string>Speech</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Speech</string>
- </dict>
- <key>MenuItem 9</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Paragraph</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>-1</integer>
- <key>MenuItemTitle</key>
- <string> Default</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string> Left to Right</string>
- </dict>
- <key>MenuItem 3</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>1</integer>
- <key>MenuItemTitle</key>
- <string> Right to Left</string>
- </dict>
- <key>MenuItem 4</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <true/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string></string>
- </dict>
- <key>MenuItem 5</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Selection</string>
- </dict>
- <key>MenuItem 6</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>-1</integer>
- <key>MenuItemTitle</key>
- <string> Default</string>
- </dict>
- <key>MenuItem 7</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string> Left to Right</string>
- </dict>
- <key>MenuItem 8</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>1</integer>
- <key>MenuItemTitle</key>
- <string> Right to Left</string>
- </dict>
- <key>MenuTitle</key>
- <string>Writing Direction</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Writing Direction</string>
- </dict>
- <key>MenuTitle</key>
- <string>Menu</string>
- </dict>
- </dict>
- </dict>
- <key>ViewSubView 1</key>
- <dict>
- <key>ControlIsEnabled</key>
- <false/>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSScroller</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 2</key>
- <dict>
- <key>ControlIsEnabled</key>
- <false/>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSScroller</string>
- <key>ViewIsHidden</key>
- <true/>
- </dict>
- </dict>
- <key>ViewSubView 11</key>
- <dict>
- <key>TabItem 0</key>
- <dict>
- <key>TabLabel</key>
- <string>Tab</string>
- <key>TabView</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- </dict>
- <key>TabItem 1</key>
- <dict>
- <key>TabLabel</key>
- <string>View</string>
- <key>TabView</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- </dict>
- <key>ViewIsHidden</key>
- <false/>
- <key>ViewSubView 0</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- </dict>
- <key>ViewSubView 2</key>
- <dict>
- <key>ControlIsEnabled</key>
- <true/>
- <key>ControlSelectedCell</key>
- <dict>
- <key>CellState</key>
- <integer>0</integer>
- <key>CellTag</key>
- <integer>0</integer>
- <key>CellTitle</key>
- <string>HaHa</string>
- <key>CellValue</key>
- <string>HaHa</string>
- </dict>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSTextField</string>
- <key>ControlValue</key>
- <string>HaHa</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 3</key>
- <dict>
- <key>ControlIsEnabled</key>
- <true/>
- <key>ControlSelectedCell</key>
- <dict>
- <key>CellState</key>
- <integer>0</integer>
- <key>CellTag</key>
- <integer>0</integer>
- <key>CellTitle</key>
- <string>Still Haven't Found What I'm Searching For</string>
- <key>CellValue</key>
- <string>Still Haven't Found What I'm Searching For</string>
- </dict>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSSearchField</string>
- <key>ControlValue</key>
- <string>Still Haven't Found What I'm Searching For</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 4</key>
- <dict>
- <key>ControlIsEnabled</key>
- <true/>
- <key>ControlSelectedCell</key>
- <dict>
- <key>CellState</key>
- <integer>1</integer>
- <key>CellTag</key>
- <integer>0</integer>
- <key>CellTitle</key>
- <string>Once upon a time</string>
- <key>CellValue</key>
- <string>Once upon a time</string>
- </dict>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSTextField</string>
- <key>ControlValue</key>
- <string>Once upon a time</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 5</key>
- <dict>
- <key>ButtonAlternateTitle</key>
- <string></string>
- <key>ControlIsEnabled</key>
- <true/>
- <key>ControlSelectedCell</key>
- <dict>
- <key>CellState</key>
- <integer>1</integer>
- <key>CellTag</key>
- <integer>0</integer>
- <key>CellTitle</key>
- <string>CheckMate!</string>
- <key>CellValue</key>
- <string>1</string>
- </dict>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSButton</string>
- <key>ControlValue</key>
- <string>1</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 6</key>
- <dict>
- <key>ControlIsEnabled</key>
- <true/>
- <key>ControlSelectedCell</key>
- <dict>
- <key>CellState</key>
- <integer>1</integer>
- <key>CellTag</key>
- <integer>0</integer>
- <key>CellTitle</key>
- <string></string>
- <key>CellValue</key>
- <string>50</string>
- </dict>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSSlider</string>
- <key>ControlValue</key>
- <string>50</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 7</key>
- <dict>
- <key>ButtonAlternateTitle</key>
- <string></string>
- <key>ControlIsEnabled</key>
- <true/>
- <key>ControlSelectedCell</key>
- <dict>
- <key>CellState</key>
- <integer>0</integer>
- <key>CellTag</key>
- <integer>0</integer>
- <key>CellTitle</key>
- <string>Cancel</string>
- <key>CellValue</key>
- <string>0</string>
- </dict>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSButton</string>
- <key>ControlValue</key>
- <string>0</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 8</key>
- <dict>
- <key>ControlIsEnabled</key>
- <true/>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSColorWell</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 9</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- </dict>
- <key>WindowIsMain</key>
- <false/>
- <key>WindowIsVisible</key>
- <true/>
- <key>WindowTitle</key>
- <string>Window</string>
- </dict>
-</dict>
-</plist>
diff --git a/UnitTesting/TestData/GTMUnitTestingTestApp.gtmUTState b/UnitTesting/TestData/GTMUnitTestingTestApp.gtmUTState
deleted file mode 100644
index db045bf..0000000
--- a/UnitTesting/TestData/GTMUnitTestingTestApp.gtmUTState
+++ /dev/null
@@ -1,2204 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>$GTMArchive</key>
- <string>GTMUnitTestingArchive</string>
- <key>$GTMVersion</key>
- <integer>1</integer>
- <key>ApplicationMainWindow</key>
- <integer>0</integer>
- <key>BoolTest</key>
- <true/>
- <key>BytesTest</key>
- <data>
- Qnl0ZXNUZXN0
- </data>
- <key>DoubleTest</key>
- <real>1</real>
- <key>FloatTest</key>
- <real>1</real>
- <key>Int32Test</key>
- <integer>1</integer>
- <key>Int64Test</key>
- <integer>1</integer>
- <key>IntTest</key>
- <integer>1</integer>
- <key>MenuBar</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>About NewApplication</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <true/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string></string>
- </dict>
- <key>MenuItem 10</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Quit NewApplication</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>,</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Preferences…</string>
- </dict>
- <key>MenuItem 3</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <true/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string></string>
- </dict>
- <key>MenuItem 4</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuTitle</key>
- <string>Services</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Services</string>
- </dict>
- <key>MenuItem 5</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <true/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string></string>
- </dict>
- <key>MenuItem 6</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>h</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Hide NewApplication</string>
- </dict>
- <key>MenuItem 7</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>h</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Hide Others</string>
- </dict>
- <key>MenuItem 8</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Show All</string>
- </dict>
- <key>MenuItem 9</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <true/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string></string>
- </dict>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>n</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>New</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>o</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Open…</string>
- </dict>
- <key>MenuItem 10</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>P</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Page Setup...</string>
- <key>MenuItemTooltip</key>
- <string></string>
- </dict>
- <key>MenuItem 11</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>p</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Print…</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Clear Menu</string>
- </dict>
- <key>MenuTitle</key>
- <string>Open Recent</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Open Recent</string>
- </dict>
- <key>MenuItem 3</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <true/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string></string>
- </dict>
- <key>MenuItem 4</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>w</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Close</string>
- </dict>
- <key>MenuItem 5</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <true/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>w</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Close All</string>
- </dict>
- <key>MenuItem 6</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>s</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Save</string>
- </dict>
- <key>MenuItem 7</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>S</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Save As…</string>
- </dict>
- <key>MenuItem 8</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Revert to Saved</string>
- </dict>
- <key>MenuItem 9</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <true/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string></string>
- </dict>
- <key>MenuTitle</key>
- <string>File</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>File</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>z</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Undo</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>Z</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Redo</string>
- </dict>
- <key>MenuItem 10</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>:</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Show Spelling…</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>;</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Check Spelling</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Check Spelling While Typing</string>
- </dict>
- <key>MenuItem 3</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Check Grammar With Spelling</string>
- </dict>
- <key>MenuTitle</key>
- <string>Spelling and Grammar</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Spelling and Grammar</string>
- </dict>
- <key>MenuItem 11</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>1</integer>
- <key>MenuItemTitle</key>
- <string>Smart Copy/Paste</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>2</integer>
- <key>MenuItemTitle</key>
- <string>Smart Quotes</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>3</integer>
- <key>MenuItemTitle</key>
- <string>Smart Links</string>
- </dict>
- <key>MenuTitle</key>
- <string>Substitutions</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Substitutions</string>
- </dict>
- <key>MenuItem 12</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Start Speaking</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Stop Speaking</string>
- </dict>
- <key>MenuTitle</key>
- <string>Speech</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Speech</string>
- </dict>
- <key>MenuItem 13</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <true/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string></string>
- </dict>
- <key>MenuItem 14</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Special Characters…</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <true/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string></string>
- </dict>
- <key>MenuItem 3</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>x</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Cut</string>
- </dict>
- <key>MenuItem 4</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>c</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Copy</string>
- </dict>
- <key>MenuItem 5</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>v</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Paste</string>
- </dict>
- <key>MenuItem 6</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Delete</string>
- </dict>
- <key>MenuItem 7</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>a</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Select All</string>
- </dict>
- <key>MenuItem 8</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <true/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string></string>
- </dict>
- <key>MenuItem 9</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>f</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>1</integer>
- <key>MenuItemTitle</key>
- <string>Find…</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>g</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>2</integer>
- <key>MenuItemTitle</key>
- <string>Find Next</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>G</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>3</integer>
- <key>MenuItemTitle</key>
- <string>Find Previous</string>
- </dict>
- <key>MenuItem 3</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>e</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>7</integer>
- <key>MenuItemTitle</key>
- <string>Use Selection for Find</string>
- </dict>
- <key>MenuItem 4</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>j</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Jump to Selection</string>
- </dict>
- <key>MenuTitle</key>
- <string>Find</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Find</string>
- </dict>
- <key>MenuTitle</key>
- <string>Edit</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Edit</string>
- </dict>
- <key>MenuItem 3</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>t</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>¬Menu Item</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>C</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Show Colors</string>
- </dict>
- <key>MenuTitle</key>
- <string>¬Menu Title</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>¬Menu Title</string>
- </dict>
- <key>MenuItem 4</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>t</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Show Toolbar</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Customize Toolbar…</string>
- </dict>
- <key>MenuTitle</key>
- <string>View</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>View</string>
- </dict>
- <key>MenuItem 5</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string>?</string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>NewApplication Help</string>
- </dict>
- <key>MenuTitle</key>
- <string>Help</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Help</string>
- </dict>
- <key>MenuTitle</key>
- <string>AMainMenu</string>
- </dict>
- <key>Window 0</key>
- <dict>
- <key>WindowContent</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- <key>ViewSubView 0</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- <key>ViewSubView 0</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- <key>ViewSubView 0</key>
- <dict>
- <key>ControlIsEnabled</key>
- <true/>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSTableView</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- </dict>
- <key>ViewSubView 1</key>
- <dict>
- <key>ControlIsEnabled</key>
- <false/>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSScroller</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 2</key>
- <dict>
- <key>ControlIsEnabled</key>
- <false/>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSScroller</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 3</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- <key>ViewSubView 0</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- </dict>
- <key>ViewSubView 4</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- </dict>
- <key>ViewSubView 1</key>
- <dict>
- <key>BoxBorderType</key>
- <integer>3</integer>
- <key>BoxTitle</key>
- <string>Box</string>
- <key>BoxTitlePosition</key>
- <integer>0</integer>
- <key>BoxType</key>
- <integer>2</integer>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 10</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- <key>ViewSubView 0</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- <key>ViewSubView 0</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- <key>ViewMenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Cut</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Copy</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Paste</string>
- </dict>
- <key>MenuItem 3</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <true/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string></string>
- </dict>
- <key>MenuItem 4</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Show Fonts</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>2</integer>
- <key>MenuItemTitle</key>
- <string>Bold</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>1</integer>
- <key>MenuItemTitle</key>
- <string>Italic</string>
- </dict>
- <key>MenuItem 3</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Underline</string>
- </dict>
- <key>MenuItem 4</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Outline</string>
- </dict>
- <key>MenuItem 5</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Styles…</string>
- </dict>
- <key>MenuItem 6</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <true/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string></string>
- </dict>
- <key>MenuItem 7</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Show Colors</string>
- </dict>
- <key>MenuTitle</key>
- <string>Font</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Font</string>
- </dict>
- <key>MenuItem 5</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Show Spelling and Grammar</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Check Document Now</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Check Spelling While Typing</string>
- </dict>
- <key>MenuItem 3</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Check Grammar With Spelling</string>
- </dict>
- <key>MenuTitle</key>
- <string>Spelling and Grammar</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Spelling and Grammar</string>
- </dict>
- <key>MenuItem 6</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Smart Copy/Paste</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Smart Quotes</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Smart Links</string>
- </dict>
- <key>MenuTitle</key>
- <string>Substitutions</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Substitutions</string>
- </dict>
- <key>MenuItem 7</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Start Speaking</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Stop Speaking</string>
- </dict>
- <key>MenuTitle</key>
- <string>Speech</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Speech</string>
- </dict>
- <key>MenuItem 8</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>-1</integer>
- <key>MenuItemTitle</key>
- <string>Default</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Left to Right</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>1</integer>
- <key>MenuItemTitle</key>
- <string>Right to Left</string>
- </dict>
- <key>MenuTitle</key>
- <string>Writing Direction</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Writing Direction</string>
- </dict>
- <key>MenuTitle</key>
- <string>Menu</string>
- </dict>
- </dict>
- </dict>
- <key>ViewSubView 1</key>
- <dict>
- <key>ControlIsEnabled</key>
- <false/>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSScroller</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 2</key>
- <dict>
- <key>ControlIsEnabled</key>
- <false/>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSScroller</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- </dict>
- <key>ViewSubView 11</key>
- <dict>
- <key>TabItem 0</key>
- <dict>
- <key>TabLabel</key>
- <string>Tab</string>
- <key>TabView</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- </dict>
- <key>TabItem 1</key>
- <dict>
- <key>TabLabel</key>
- <string>View</string>
- <key>TabView</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- </dict>
- <key>ViewIsHidden</key>
- <false/>
- <key>ViewSubView 0</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- </dict>
- <key>ViewSubView 2</key>
- <dict>
- <key>ControlIsEnabled</key>
- <true/>
- <key>ControlSelectedCell</key>
- <dict>
- <key>CellState</key>
- <integer>0</integer>
- <key>CellTag</key>
- <integer>0</integer>
- <key>CellTitle</key>
- <string>HaHa</string>
- <key>CellValue</key>
- <string>HaHa</string>
- </dict>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSTextField</string>
- <key>ControlValue</key>
- <string>HaHa</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 3</key>
- <dict>
- <key>ControlIsEnabled</key>
- <true/>
- <key>ControlSelectedCell</key>
- <dict>
- <key>CellState</key>
- <integer>0</integer>
- <key>CellTag</key>
- <integer>0</integer>
- <key>CellTitle</key>
- <string>Still Haven't Found What I'm Searching For</string>
- <key>CellValue</key>
- <string>Still Haven't Found What I'm Searching For</string>
- </dict>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSSearchField</string>
- <key>ControlValue</key>
- <string>Still Haven't Found What I'm Searching For</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 4</key>
- <dict>
- <key>ControlIsEnabled</key>
- <true/>
- <key>ControlSelectedCell</key>
- <dict>
- <key>CellState</key>
- <integer>1</integer>
- <key>CellTag</key>
- <integer>0</integer>
- <key>CellTitle</key>
- <string>Once upon a time</string>
- <key>CellValue</key>
- <string>Once upon a time</string>
- </dict>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSTextField</string>
- <key>ControlValue</key>
- <string>Once upon a time</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 5</key>
- <dict>
- <key>ButtonAlternateTitle</key>
- <string></string>
- <key>ControlIsEnabled</key>
- <true/>
- <key>ControlSelectedCell</key>
- <dict>
- <key>CellState</key>
- <integer>1</integer>
- <key>CellTag</key>
- <integer>0</integer>
- <key>CellTitle</key>
- <string>CheckMate!</string>
- <key>CellValue</key>
- <string>1</string>
- </dict>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSButton</string>
- <key>ControlValue</key>
- <string>1</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 6</key>
- <dict>
- <key>ControlIsEnabled</key>
- <true/>
- <key>ControlSelectedCell</key>
- <dict>
- <key>CellState</key>
- <integer>1</integer>
- <key>CellTag</key>
- <integer>0</integer>
- <key>CellTitle</key>
- <string></string>
- <key>CellValue</key>
- <string>50</string>
- </dict>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSSlider</string>
- <key>ControlValue</key>
- <string>50</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 7</key>
- <dict>
- <key>ButtonAlternateTitle</key>
- <string></string>
- <key>ControlIsEnabled</key>
- <true/>
- <key>ControlSelectedCell</key>
- <dict>
- <key>CellState</key>
- <integer>0</integer>
- <key>CellTag</key>
- <integer>0</integer>
- <key>CellTitle</key>
- <string>Cancel</string>
- <key>CellValue</key>
- <string>0</string>
- </dict>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSButton</string>
- <key>ControlValue</key>
- <string>0</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 8</key>
- <dict>
- <key>ControlIsEnabled</key>
- <true/>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSColorWell</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 9</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- </dict>
- <key>WindowIsMain</key>
- <false/>
- <key>WindowIsVisible</key>
- <true/>
- <key>WindowTitle</key>
- <string>Window</string>
- </dict>
-</dict>
-</plist>
diff --git a/UnitTesting/TestData/GTMUnitTestingView.10.6.tiff b/UnitTesting/TestData/GTMUnitTestingView.10.6.tiff
deleted file mode 100644
index 3b7545b..0000000
--- a/UnitTesting/TestData/GTMUnitTestingView.10.6.tiff
+++ /dev/null
Binary files differ
diff --git a/UnitTesting/TestData/GTMUnitTestingView.tiff b/UnitTesting/TestData/GTMUnitTestingView.tiff
deleted file mode 100644
index 228df73..0000000
--- a/UnitTesting/TestData/GTMUnitTestingView.tiff
+++ /dev/null
Binary files differ
diff --git a/UnitTesting/TestData/GTMUnitTestingWindow.10.5.6.tiff b/UnitTesting/TestData/GTMUnitTestingWindow.10.5.6.tiff
deleted file mode 100644
index 9179576..0000000
--- a/UnitTesting/TestData/GTMUnitTestingWindow.10.5.6.tiff
+++ /dev/null
Binary files differ
diff --git a/UnitTesting/TestData/GTMUnitTestingWindow.10.5.7.tiff b/UnitTesting/TestData/GTMUnitTestingWindow.10.5.7.tiff
deleted file mode 100644
index 9179576..0000000
--- a/UnitTesting/TestData/GTMUnitTestingWindow.10.5.7.tiff
+++ /dev/null
Binary files differ
diff --git a/UnitTesting/TestData/GTMUnitTestingWindow.10.5.8.tiff b/UnitTesting/TestData/GTMUnitTestingWindow.10.5.8.tiff
deleted file mode 100644
index 9179576..0000000
--- a/UnitTesting/TestData/GTMUnitTestingWindow.10.5.8.tiff
+++ /dev/null
Binary files differ
diff --git a/UnitTesting/TestData/GTMUnitTestingWindow.10.6.gtmUTState b/UnitTesting/TestData/GTMUnitTestingWindow.10.6.gtmUTState
deleted file mode 100644
index 02ec00d..0000000
--- a/UnitTesting/TestData/GTMUnitTestingWindow.10.6.gtmUTState
+++ /dev/null
@@ -1,1308 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>$GTMArchive</key>
- <string>GTMUnitTestingArchive</string>
- <key>$GTMVersion</key>
- <integer>1</integer>
- <key>WindowContent</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- <key>ViewSubView 0</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- <key>ViewSubView 0</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- <key>ViewSubView 0</key>
- <dict>
- <key>ControlIsEnabled</key>
- <true/>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSTableView</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- </dict>
- <key>ViewSubView 1</key>
- <dict>
- <key>ControlIsEnabled</key>
- <false/>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSScroller</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 2</key>
- <dict>
- <key>ControlIsEnabled</key>
- <false/>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSScroller</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 3</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- <key>ViewSubView 0</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- </dict>
- <key>ViewSubView 4</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- </dict>
- <key>ViewSubView 1</key>
- <dict>
- <key>BoxBorderType</key>
- <integer>3</integer>
- <key>BoxTitle</key>
- <string>Box</string>
- <key>BoxTitlePosition</key>
- <integer>0</integer>
- <key>BoxType</key>
- <integer>2</integer>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 10</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- <key>ViewSubView 0</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- <key>ViewSubView 0</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- <key>ViewMenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Cut</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Copy</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Paste</string>
- </dict>
- <key>MenuItem 3</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <true/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string></string>
- </dict>
- <key>MenuItem 4</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Show Fonts</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>2</integer>
- <key>MenuItemTitle</key>
- <string>Bold</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>1</integer>
- <key>MenuItemTitle</key>
- <string>Italic</string>
- </dict>
- <key>MenuItem 3</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Underline</string>
- </dict>
- <key>MenuItem 4</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Outline</string>
- </dict>
- <key>MenuItem 5</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Styles…</string>
- </dict>
- <key>MenuItem 6</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Show Colors</string>
- </dict>
- <key>MenuTitle</key>
- <string>Font</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Font</string>
- </dict>
- <key>MenuItem 5</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Show Spelling and Grammar</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Check Document Now</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <true/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string></string>
- </dict>
- <key>MenuItem 3</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Check Spelling While Typing</string>
- </dict>
- <key>MenuItem 4</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Check Grammar With Spelling</string>
- </dict>
- <key>MenuItem 5</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Correct Spelling Automatically</string>
- </dict>
- <key>MenuTitle</key>
- <string>Spelling and Grammar</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Spelling and Grammar</string>
- </dict>
- <key>MenuItem 6</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Replace Quotes</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Replace Dashes</string>
- </dict>
- <key>MenuItem 10</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Smart Links</string>
- </dict>
- <key>MenuItem 11</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Data Detectors</string>
- </dict>
- <key>MenuItem 12</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Text Replacement</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Add Links</string>
- </dict>
- <key>MenuItem 3</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Replace Text</string>
- </dict>
- <key>MenuItem 4</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <true/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string></string>
- </dict>
- <key>MenuItem 5</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Show Substitutions</string>
- </dict>
- <key>MenuItem 6</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <true/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string></string>
- </dict>
- <key>MenuItem 7</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Smart Copy/Paste</string>
- </dict>
- <key>MenuItem 8</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Smart Quotes</string>
- </dict>
- <key>MenuItem 9</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Smart Dashes</string>
- </dict>
- <key>MenuTitle</key>
- <string>Substitutions</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Substitutions</string>
- </dict>
- <key>MenuItem 7</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Make Upper Case</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Make Lower Case</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Capitalize</string>
- </dict>
- <key>MenuTitle</key>
- <string>Transformations</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Transformations</string>
- </dict>
- <key>MenuItem 8</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Start Speaking</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Stop Speaking</string>
- </dict>
- <key>MenuTitle</key>
- <string>Speech</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Speech</string>
- </dict>
- <key>MenuItem 9</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Paragraph</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>-1</integer>
- <key>MenuItemTitle</key>
- <string> Default</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string> Left to Right</string>
- </dict>
- <key>MenuItem 3</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>1</integer>
- <key>MenuItemTitle</key>
- <string> Right to Left</string>
- </dict>
- <key>MenuItem 4</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <true/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string></string>
- </dict>
- <key>MenuItem 5</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Selection</string>
- </dict>
- <key>MenuItem 6</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>-1</integer>
- <key>MenuItemTitle</key>
- <string> Default</string>
- </dict>
- <key>MenuItem 7</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string> Left to Right</string>
- </dict>
- <key>MenuItem 8</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>1</integer>
- <key>MenuItemTitle</key>
- <string> Right to Left</string>
- </dict>
- <key>MenuTitle</key>
- <string>Writing Direction</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Writing Direction</string>
- </dict>
- <key>MenuTitle</key>
- <string>Menu</string>
- </dict>
- </dict>
- </dict>
- <key>ViewSubView 1</key>
- <dict>
- <key>ControlIsEnabled</key>
- <false/>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSScroller</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 2</key>
- <dict>
- <key>ControlIsEnabled</key>
- <false/>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSScroller</string>
- <key>ViewIsHidden</key>
- <true/>
- </dict>
- </dict>
- <key>ViewSubView 11</key>
- <dict>
- <key>TabItem 0</key>
- <dict>
- <key>TabLabel</key>
- <string>Tab</string>
- <key>TabView</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- </dict>
- <key>TabItem 1</key>
- <dict>
- <key>TabLabel</key>
- <string>View</string>
- <key>TabView</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- </dict>
- <key>ViewIsHidden</key>
- <false/>
- <key>ViewSubView 0</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- </dict>
- <key>ViewSubView 2</key>
- <dict>
- <key>ControlIsEnabled</key>
- <true/>
- <key>ControlSelectedCell</key>
- <dict>
- <key>CellState</key>
- <integer>0</integer>
- <key>CellTag</key>
- <integer>0</integer>
- <key>CellTitle</key>
- <string>HaHa</string>
- <key>CellValue</key>
- <string>HaHa</string>
- </dict>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSTextField</string>
- <key>ControlValue</key>
- <string>HaHa</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 3</key>
- <dict>
- <key>ControlIsEnabled</key>
- <true/>
- <key>ControlSelectedCell</key>
- <dict>
- <key>CellState</key>
- <integer>0</integer>
- <key>CellTag</key>
- <integer>0</integer>
- <key>CellTitle</key>
- <string>Still Haven't Found What I'm Searching For</string>
- <key>CellValue</key>
- <string>Still Haven't Found What I'm Searching For</string>
- </dict>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSSearchField</string>
- <key>ControlValue</key>
- <string>Still Haven't Found What I'm Searching For</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 4</key>
- <dict>
- <key>ControlIsEnabled</key>
- <true/>
- <key>ControlSelectedCell</key>
- <dict>
- <key>CellState</key>
- <integer>1</integer>
- <key>CellTag</key>
- <integer>0</integer>
- <key>CellTitle</key>
- <string>Once upon a time</string>
- <key>CellValue</key>
- <string>Once upon a time</string>
- </dict>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSTextField</string>
- <key>ControlValue</key>
- <string>Once upon a time</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 5</key>
- <dict>
- <key>ButtonAlternateTitle</key>
- <string></string>
- <key>ControlIsEnabled</key>
- <true/>
- <key>ControlSelectedCell</key>
- <dict>
- <key>CellState</key>
- <integer>1</integer>
- <key>CellTag</key>
- <integer>0</integer>
- <key>CellTitle</key>
- <string>CheckMate!</string>
- <key>CellValue</key>
- <string>1</string>
- </dict>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSButton</string>
- <key>ControlValue</key>
- <string>1</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 6</key>
- <dict>
- <key>ControlIsEnabled</key>
- <true/>
- <key>ControlSelectedCell</key>
- <dict>
- <key>CellState</key>
- <integer>1</integer>
- <key>CellTag</key>
- <integer>0</integer>
- <key>CellTitle</key>
- <string></string>
- <key>CellValue</key>
- <string>50</string>
- </dict>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSSlider</string>
- <key>ControlValue</key>
- <string>50</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 7</key>
- <dict>
- <key>ButtonAlternateTitle</key>
- <string></string>
- <key>ControlIsEnabled</key>
- <true/>
- <key>ControlSelectedCell</key>
- <dict>
- <key>CellState</key>
- <integer>0</integer>
- <key>CellTag</key>
- <integer>0</integer>
- <key>CellTitle</key>
- <string>Cancel</string>
- <key>CellValue</key>
- <string>0</string>
- </dict>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSButton</string>
- <key>ControlValue</key>
- <string>0</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 8</key>
- <dict>
- <key>ControlIsEnabled</key>
- <true/>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSColorWell</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 9</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- </dict>
- <key>WindowIsMain</key>
- <false/>
- <key>WindowIsVisible</key>
- <true/>
- <key>WindowTitle</key>
- <string>Window</string>
-</dict>
-</plist>
diff --git a/UnitTesting/TestData/GTMUnitTestingWindow.10.6.tiff b/UnitTesting/TestData/GTMUnitTestingWindow.10.6.tiff
deleted file mode 100644
index 6a88f84..0000000
--- a/UnitTesting/TestData/GTMUnitTestingWindow.10.6.tiff
+++ /dev/null
Binary files differ
diff --git a/UnitTesting/TestData/GTMUnitTestingWindow.gtmUTState b/UnitTesting/TestData/GTMUnitTestingWindow.gtmUTState
deleted file mode 100644
index 8cba4c4..0000000
--- a/UnitTesting/TestData/GTMUnitTestingWindow.gtmUTState
+++ /dev/null
@@ -1,904 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>$GTMArchive</key>
- <string>GTMUnitTestingArchive</string>
- <key>$GTMVersion</key>
- <integer>1</integer>
- <key>WindowContent</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- <key>ViewSubView 0</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- <key>ViewSubView 0</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- <key>ViewSubView 0</key>
- <dict>
- <key>ControlIsEnabled</key>
- <true/>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSTableView</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- </dict>
- <key>ViewSubView 1</key>
- <dict>
- <key>ControlIsEnabled</key>
- <false/>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSScroller</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 2</key>
- <dict>
- <key>ControlIsEnabled</key>
- <false/>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSScroller</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 3</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- <key>ViewSubView 0</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- </dict>
- <key>ViewSubView 4</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- </dict>
- <key>ViewSubView 1</key>
- <dict>
- <key>BoxBorderType</key>
- <integer>3</integer>
- <key>BoxTitle</key>
- <string>Box</string>
- <key>BoxTitlePosition</key>
- <integer>0</integer>
- <key>BoxType</key>
- <integer>2</integer>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 10</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- <key>ViewSubView 0</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- <key>ViewSubView 0</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- <key>ViewMenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Cut</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Copy</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Paste</string>
- </dict>
- <key>MenuItem 3</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <true/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string></string>
- </dict>
- <key>MenuItem 4</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Show Fonts</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>2</integer>
- <key>MenuItemTitle</key>
- <string>Bold</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>1</integer>
- <key>MenuItemTitle</key>
- <string>Italic</string>
- </dict>
- <key>MenuItem 3</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Underline</string>
- </dict>
- <key>MenuItem 4</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Outline</string>
- </dict>
- <key>MenuItem 5</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Styles…</string>
- </dict>
- <key>MenuItem 6</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <false/>
- <key>MenuItemIsSeparator</key>
- <true/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string></string>
- </dict>
- <key>MenuItem 7</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Show Colors</string>
- </dict>
- <key>MenuTitle</key>
- <string>Font</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Font</string>
- </dict>
- <key>MenuItem 5</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Show Spelling and Grammar</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Check Document Now</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Check Spelling While Typing</string>
- </dict>
- <key>MenuItem 3</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Check Grammar With Spelling</string>
- </dict>
- <key>MenuTitle</key>
- <string>Spelling and Grammar</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Spelling and Grammar</string>
- </dict>
- <key>MenuItem 6</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Smart Copy/Paste</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Smart Quotes</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Smart Links</string>
- </dict>
- <key>MenuTitle</key>
- <string>Substitutions</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Substitutions</string>
- </dict>
- <key>MenuItem 7</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Start Speaking</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Stop Speaking</string>
- </dict>
- <key>MenuTitle</key>
- <string>Speech</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Speech</string>
- </dict>
- <key>MenuItem 8</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemSubmenu</key>
- <dict>
- <key>MenuItem 0</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>-1</integer>
- <key>MenuItemTitle</key>
- <string>Default</string>
- </dict>
- <key>MenuItem 1</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Left to Right</string>
- </dict>
- <key>MenuItem 2</key>
- <dict>
- <key>MenuItemIndentationLevel</key>
- <integer>0</integer>
- <key>MenuItemIsAlternate</key>
- <false/>
- <key>MenuItemIsEnabled</key>
- <true/>
- <key>MenuItemIsSeparator</key>
- <false/>
- <key>MenuItemKeyEquivalent</key>
- <string></string>
- <key>MenuItemState</key>
- <integer>0</integer>
- <key>MenuItemTag</key>
- <integer>1</integer>
- <key>MenuItemTitle</key>
- <string>Right to Left</string>
- </dict>
- <key>MenuTitle</key>
- <string>Writing Direction</string>
- </dict>
- <key>MenuItemTag</key>
- <integer>0</integer>
- <key>MenuItemTitle</key>
- <string>Writing Direction</string>
- </dict>
- <key>MenuTitle</key>
- <string>Menu</string>
- </dict>
- </dict>
- </dict>
- <key>ViewSubView 1</key>
- <dict>
- <key>ControlIsEnabled</key>
- <false/>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSScroller</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 2</key>
- <dict>
- <key>ControlIsEnabled</key>
- <false/>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSScroller</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- </dict>
- <key>ViewSubView 11</key>
- <dict>
- <key>TabItem 0</key>
- <dict>
- <key>TabLabel</key>
- <string>Tab</string>
- <key>TabView</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- </dict>
- <key>TabItem 1</key>
- <dict>
- <key>TabLabel</key>
- <string>View</string>
- <key>TabView</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- </dict>
- <key>ViewIsHidden</key>
- <false/>
- <key>ViewSubView 0</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- </dict>
- <key>ViewSubView 2</key>
- <dict>
- <key>ControlIsEnabled</key>
- <true/>
- <key>ControlSelectedCell</key>
- <dict>
- <key>CellState</key>
- <integer>0</integer>
- <key>CellTag</key>
- <integer>0</integer>
- <key>CellTitle</key>
- <string>HaHa</string>
- <key>CellValue</key>
- <string>HaHa</string>
- </dict>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSTextField</string>
- <key>ControlValue</key>
- <string>HaHa</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 3</key>
- <dict>
- <key>ControlIsEnabled</key>
- <true/>
- <key>ControlSelectedCell</key>
- <dict>
- <key>CellState</key>
- <integer>0</integer>
- <key>CellTag</key>
- <integer>0</integer>
- <key>CellTitle</key>
- <string>Still Haven't Found What I'm Searching For</string>
- <key>CellValue</key>
- <string>Still Haven't Found What I'm Searching For</string>
- </dict>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSSearchField</string>
- <key>ControlValue</key>
- <string>Still Haven't Found What I'm Searching For</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 4</key>
- <dict>
- <key>ControlIsEnabled</key>
- <true/>
- <key>ControlSelectedCell</key>
- <dict>
- <key>CellState</key>
- <integer>1</integer>
- <key>CellTag</key>
- <integer>0</integer>
- <key>CellTitle</key>
- <string>Once upon a time</string>
- <key>CellValue</key>
- <string>Once upon a time</string>
- </dict>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSTextField</string>
- <key>ControlValue</key>
- <string>Once upon a time</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 5</key>
- <dict>
- <key>ButtonAlternateTitle</key>
- <string></string>
- <key>ControlIsEnabled</key>
- <true/>
- <key>ControlSelectedCell</key>
- <dict>
- <key>CellState</key>
- <integer>1</integer>
- <key>CellTag</key>
- <integer>0</integer>
- <key>CellTitle</key>
- <string>CheckMate!</string>
- <key>CellValue</key>
- <string>1</string>
- </dict>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSButton</string>
- <key>ControlValue</key>
- <string>1</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 6</key>
- <dict>
- <key>ControlIsEnabled</key>
- <true/>
- <key>ControlSelectedCell</key>
- <dict>
- <key>CellState</key>
- <integer>1</integer>
- <key>CellTag</key>
- <integer>0</integer>
- <key>CellTitle</key>
- <string></string>
- <key>CellValue</key>
- <string>50</string>
- </dict>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSSlider</string>
- <key>ControlValue</key>
- <string>50</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 7</key>
- <dict>
- <key>ButtonAlternateTitle</key>
- <string></string>
- <key>ControlIsEnabled</key>
- <true/>
- <key>ControlSelectedCell</key>
- <dict>
- <key>CellState</key>
- <integer>0</integer>
- <key>CellTag</key>
- <integer>0</integer>
- <key>CellTitle</key>
- <string>Cancel</string>
- <key>CellValue</key>
- <string>0</string>
- </dict>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSButton</string>
- <key>ControlValue</key>
- <string>0</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 8</key>
- <dict>
- <key>ControlIsEnabled</key>
- <true/>
- <key>ControlTag</key>
- <integer>0</integer>
- <key>ControlType</key>
- <string>NSColorWell</string>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- <key>ViewSubView 9</key>
- <dict>
- <key>ViewIsHidden</key>
- <false/>
- </dict>
- </dict>
- <key>WindowIsMain</key>
- <false/>
- <key>WindowIsVisible</key>
- <true/>
- <key>WindowTitle</key>
- <string>Window</string>
-</dict>
-</plist>
diff --git a/UnitTesting/TestData/GTMUnitTestingWindow.tiff b/UnitTesting/TestData/GTMUnitTestingWindow.tiff
deleted file mode 100644
index 63f5649..0000000
--- a/UnitTesting/TestData/GTMUnitTestingWindow.tiff
+++ /dev/null
Binary files differ