diff options
author | gtm.daemon <gtm.daemon@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3> | 2009-06-18 14:00:30 +0000 |
---|---|---|
committer | gtm.daemon <gtm.daemon@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3> | 2009-06-18 14:00:30 +0000 |
commit | 0f00539f6e4a7b203e65507e021ab923fa116550 (patch) | |
tree | 002f0496526bdaaaefd1acf4549e3436f9ea224e /AppKit/GTMWindowSheetControllerTest.m | |
parent | f621eda86586f17e0db413c1d4c3e9d74eb5a75a (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.m | 191 |
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 |