| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #import "chrome/browser/ui/cocoa/constrained_window/constrained_window_alert.h" |
| #import "chrome/browser/ui/cocoa/cocoa_test_helper.h" |
| #import "testing/gtest_mac.h" |
| |
| class ConstrainedWindowAlertTest : public CocoaTest { |
| }; |
| |
| @interface ConstrainedWindowAlertTestTarget : NSObject { |
| @private |
| int linkClickedCount_; |
| } |
| @property(nonatomic, readonly) int linkClickedCount; |
| |
| - (void)onLinkClicked:(id)sender; |
| @end |
| |
| @implementation ConstrainedWindowAlertTestTarget |
| |
| @synthesize linkClickedCount = linkClickedCount_; |
| |
| - (void)onLinkClicked:(id)sender { |
| ++linkClickedCount_; |
| } |
| |
| @end |
| |
| // Test showing the alert. |
| TEST_F(ConstrainedWindowAlertTest, Show) { |
| base::scoped_nsobject<ConstrainedWindowAlert> alert( |
| [[ConstrainedWindowAlert alloc] init]); |
| EXPECT_TRUE([alert window]); |
| EXPECT_TRUE([alert closeButton]); |
| |
| [alert setMessageText:@"Message text"]; |
| [alert setInformativeText:@"Informative text"]; |
| [alert addButtonWithTitle:@"OK" keyEquivalent:@"" target:nil action:NULL]; |
| [alert addButtonWithTitle:@"Cancel" keyEquivalent:@"" target:nil action:NULL]; |
| |
| [alert layout]; |
| [[alert window] makeKeyAndOrderFront:nil]; |
| } |
| |
| // Test showing the alert with no buttons. |
| TEST_F(ConstrainedWindowAlertTest, NoButtons) { |
| base::scoped_nsobject<ConstrainedWindowAlert> alert( |
| [[ConstrainedWindowAlert alloc] init]); |
| [alert layout]; |
| [[alert window] makeKeyAndOrderFront:nil]; |
| } |
| |
| // Test adding an accessory view to an alert. |
| TEST_F(ConstrainedWindowAlertTest, AccessoryView) { |
| base::scoped_nsobject<ConstrainedWindowAlert> alert( |
| [[ConstrainedWindowAlert alloc] init]); |
| [alert addButtonWithTitle:@"OK" keyEquivalent:@"" target:nil action:NULL]; |
| [alert addButtonWithTitle:@"Cancel" keyEquivalent:@"" target:nil action:NULL]; |
| |
| NSRect view_rect = NSMakeRect(0, 0, 700, 300); |
| base::scoped_nsobject<NSView> view([[NSView alloc] initWithFrame:view_rect]); |
| EXPECT_FALSE([alert accessoryView]); |
| [alert setAccessoryView:view]; |
| EXPECT_NSEQ([alert accessoryView], view); |
| |
| [alert layout]; |
| NSRect window_rect = [[alert window] frame]; |
| EXPECT_GT(NSWidth(window_rect), NSWidth(view_rect)); |
| EXPECT_GT(NSHeight(window_rect), NSHeight(view_rect)); |
| |
| [[alert window] makeKeyAndOrderFront:nil]; |
| } |
| |
| // Test adding a link to an alert. |
| TEST_F(ConstrainedWindowAlertTest, LinkView) { |
| base::scoped_nsobject<ConstrainedWindowAlert> alert( |
| [[ConstrainedWindowAlert alloc] init]); |
| base::scoped_nsobject<ConstrainedWindowAlertTestTarget> target( |
| [[ConstrainedWindowAlertTestTarget alloc] init]); |
| |
| [alert layout]; |
| NSRect initial_window_rect = [[alert window] frame]; |
| |
| EXPECT_EQ(nil, [alert linkView]); |
| NSString* linkText = @"Text of the link"; |
| [alert setLinkText:linkText |
| target:target.get() |
| action:@selector(onLinkClicked:)]; |
| EXPECT_EQ([linkText length], [[[alert linkView] title] length]); |
| |
| [alert layout]; |
| NSRect window_rect = [[alert window] frame]; |
| |
| EXPECT_GT(NSHeight(window_rect), NSHeight(initial_window_rect)); |
| |
| [[alert window] makeKeyAndOrderFront:nil]; |
| |
| [[alert linkView] performClick:nil]; |
| EXPECT_EQ(1, [target linkClickedCount]); |
| } |