aboutsummaryrefslogtreecommitdiff
path: root/AppKit/GTMWindowSheetControllerTest.m
diff options
context:
space:
mode:
authorGravatar gtm.daemon <gtm.daemon@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3>2009-06-18 14:00:30 +0000
committerGravatar gtm.daemon <gtm.daemon@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3>2009-06-18 14:00:30 +0000
commit0f00539f6e4a7b203e65507e021ab923fa116550 (patch)
tree002f0496526bdaaaefd1acf4549e3436f9ea224e /AppKit/GTMWindowSheetControllerTest.m
parentf621eda86586f17e0db413c1d4c3e9d74eb5a75a (diff)
[Author: avi]
Adding the WindowSheetController to GTM. R=dmaclach DELTA=925 (925 added, 0 deleted, 0 changed)
Diffstat (limited to 'AppKit/GTMWindowSheetControllerTest.m')
-rw-r--r--AppKit/GTMWindowSheetControllerTest.m191
1 files changed, 191 insertions, 0 deletions
diff --git a/AppKit/GTMWindowSheetControllerTest.m b/AppKit/GTMWindowSheetControllerTest.m
new file mode 100644
index 0000000..67e32be
--- /dev/null
+++ b/AppKit/GTMWindowSheetControllerTest.m
@@ -0,0 +1,191 @@
+//
+// GTMWindowSheetControllerTest.m
+//
+// Copyright 2009 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 "GTMWindowSheetController.h"
+#import "GTMNSObject+UnitTesting.h"
+
+@interface GTMWindowSheetControllerTest : GTMTestCase
+ <GTMWindowSheetControllerDelegate> {
+ @private
+ GTMWindowSheetController *sheetController_;
+ BOOL didAlertClose_;
+ BOOL didSheetClose_;
+}
+@end
+
+@implementation GTMWindowSheetControllerTest
+
+- (void)testOpenTwoSheetsAndSwitch {
+ // Set up window
+ NSWindow *window =
+ [[[NSWindow alloc] initWithContentRect:NSMakeRect(100, 100, 600, 600)
+ styleMask:NSTitledWindowMask
+ backing:NSBackingStoreBuffered
+ defer:NO] autorelease];
+ STAssertNotNil(window, @"Could not allocate window");
+ NSTabView *tabView =
+ [[[NSTabView alloc] initWithFrame:NSMakeRect(10, 10, 580, 580)]
+ autorelease];
+ STAssertNotNil(tabView, @"Could not allocate tab view");
+ [[window contentView] addSubview:tabView];
+ [tabView setDelegate:self];
+
+ NSTabViewItem *item1 =
+ [[[NSTabViewItem alloc] initWithIdentifier:@"one"] autorelease];
+ [item1 setLabel:@"One"];
+ NSTabViewItem *item2 =
+ [[[NSTabViewItem alloc] initWithIdentifier:@"two"] autorelease];
+ [item2 setLabel:@"Two"];
+ [tabView addTabViewItem:item1];
+ [tabView addTabViewItem:item2];
+
+ sheetController_ =
+ [[[GTMWindowSheetController alloc] initWithWindow:window
+ delegate:self] autorelease];
+
+ STAssertFalse([sheetController_ isSheetAttachedToView:
+ [[tabView selectedTabViewItem] view]],
+ @"Sheet should not be attached to current view");
+ STAssertEquals([[sheetController_ viewsWithAttachedSheets] count],
+ (NSUInteger)0,
+ @"Should have no views with sheets");
+
+ // Pop alert on first tab
+ NSAlert* alert = [[NSAlert alloc] init];
+
+ [alert setMessageText:@"Hell Has Broken Loose."];
+ [alert setInformativeText:@"All hell has broken loose. You may want to run "
+ @"outside screaming and waving your arms around "
+ @"wildly."];
+
+ NSButton *alertButton = [alert addButtonWithTitle:@"OK"];
+
+ [sheetController_ beginSystemSheet:alert
+ modalForView:[item1 view]
+ withParameters:[NSArray arrayWithObjects:
+ [NSNull null],
+ self,
+ [NSValue valueWithPointer:
+ @selector(alertDidEnd:returnCode:context:)],
+ [NSValue valueWithPointer:nil],
+ nil]];
+ didAlertClose_ = NO;
+
+ STAssertTrue([sheetController_ isSheetAttachedToView:
+ [[tabView selectedTabViewItem] view]],
+ @"Sheet should be attached to current view");
+ STAssertEquals([[sheetController_ viewsWithAttachedSheets] count],
+ (NSUInteger)1,
+ @"Should have one view with sheets");
+
+ [tabView selectTabViewItem:item2];
+
+ STAssertFalse([sheetController_ isSheetAttachedToView:
+ [[tabView selectedTabViewItem] view]],
+ @"Sheet should not be attached to current view");
+ STAssertEquals([[sheetController_ viewsWithAttachedSheets] count],
+ (NSUInteger)1,
+ @"Should have one view with sheets");
+
+ // Pop sheet on second tab
+ NSPanel *sheet =
+ [[[NSPanel alloc] initWithContentRect:NSMakeRect(0, 0, 300, 200)
+ styleMask:NSTitledWindowMask
+ backing:NSBackingStoreBuffered
+ defer:NO] autorelease];
+
+ [sheetController_ beginSheet:sheet
+ modalForView:[item2 view]
+ modalDelegate:self
+ didEndSelector:@selector(sheetDidEnd:returnCode:context:)
+ contextInfo:nil];
+ didSheetClose_ = NO;
+
+ STAssertTrue([sheetController_ isSheetAttachedToView:
+ [[tabView selectedTabViewItem] view]],
+ @"Sheet should be attached to current view");
+ STAssertEquals([[sheetController_ viewsWithAttachedSheets] count],
+ (NSUInteger)2,
+ @"Should have two views with sheets");
+
+ [tabView selectTabViewItem:item1];
+
+ STAssertTrue([sheetController_ isSheetAttachedToView:
+ [[tabView selectedTabViewItem] view]],
+ @"Sheet should be attached to current view");
+ STAssertEquals([[sheetController_ viewsWithAttachedSheets] count],
+ (NSUInteger)2,
+ @"Should have two views with sheets");
+
+ // Close alert
+ [alertButton performClick:self];
+
+ STAssertFalse([sheetController_ isSheetAttachedToView:
+ [[tabView selectedTabViewItem] view]],
+ @"Sheet should not be attached to current view");
+ STAssertEquals([[sheetController_ viewsWithAttachedSheets] count],
+ (NSUInteger)1,
+ @"Should have one view with sheets");
+ STAssertTrue(didAlertClose_, @"Alert should have closed");
+
+ [tabView selectTabViewItem:item2];
+
+ STAssertTrue([sheetController_ isSheetAttachedToView:
+ [[tabView selectedTabViewItem] view]],
+ @"Sheet should be attached to current view");
+ STAssertEquals([[sheetController_ viewsWithAttachedSheets] count],
+ (NSUInteger)1,
+ @"Should have one view with sheets");
+
+ // Close sheet
+ [[NSApplication sharedApplication] endSheet:sheet returnCode:NSOKButton];
+
+ STAssertFalse([sheetController_ isSheetAttachedToView:
+ [[tabView selectedTabViewItem] view]],
+ @"Sheet should not be attached to current view");
+ STAssertEquals([[sheetController_ viewsWithAttachedSheets] count],
+ (NSUInteger)0,
+ @"Should have no views with sheets");
+ STAssertTrue(didSheetClose_, @"Sheet should have closed");
+}
+
+- (void)alertDidEnd:(NSAlert *)alert
+ returnCode:(NSInteger)returnCode
+ context:(void *)context {
+ didAlertClose_ = YES;
+}
+
+- (void)sheetDidEnd:(NSWindow *)sheet
+ returnCode:(NSInteger)returnCode
+ context:(void *)context {
+ didSheetClose_ = YES;
+ [sheet orderOut:self];
+}
+
+- (void)tabView:(NSTabView *)tabView
+didSelectTabViewItem:(NSTabViewItem *)tabViewItem {
+ NSView* view = [tabViewItem view];
+ [sheetController_ setActiveView:view];
+}
+
+- (void)gtm_systemRequestsVisibilityForView:(NSView*)view {
+ STAssertTrue(false, @"Shouldn't be called");
+}
+
+@end